MSM8953配置I2C及SPI

MSM8953配置I2C及SPI此次完成的任务是要使能高通8953平台的i2c和spi,主要做的工作就是在设备树文件中添加节点信息。主要的工作在于对设备树文件的修改,主要修改了msm8953-pinctrl.dtsi和msm8953.dtsi两个文件。msm8953-pinctrl.dtsi是配置MSM8953芯片中的GPIO。在此文件中定义i2c使用哪个gpio。因为引脚复用功能的存在,所以要先配置i2c的引脚复用功能…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

此次完成的任务是要使能高通8953平台的i2c和spi,主要做的工作就是在设备树文件中添加节点信息。主要的工作在于对设备树文件的修改,主要修改了msm8953-pinctrl.dtsi和msm8953.dtsi两个文件。

msm8953-pinctrl.dtsi是配置MSM8953芯片中的GPIO。在此文件中定义i2c使用哪个gpio。

因为引脚复用功能的存在,所以要先配置i2c的引脚复用功能,在msm8953-pinctrl.dtsi中进行如下配置:

i2c_4 {

i2c_4_active: i2c_4_active { /*i2c处于active状态*/

/* active state */

mux {

pins = “gpio14”, “gpio15”; /*i2c有两根线,分别是SDA和SCL*/

/* SDA用到了gpio14,SCL用到了gpio15*/

function = “blsp_i2c4”; /*这个gpio组支持功能复用,在i2c_4_active中,gpio说明采用”blsp_i2c4″功能*/

};

config {

pins = “gpio14”, “gpio15”;

drive-strength = <2>; /*设置gpio14,gpio15这个pin脚组的驱动能力为2MA*/

bias-disable; /*选项有bias-pull-up、bias-pull-down和bias-disable。这里使用bias-disable,代表no-pull*/

};

};

i2c_4_sleep: i2c_4_sleep { /*i2c处于sleep状态*/

/* suspended state */

mux {

pins = “gpio14”, “gpio15”;

function = “gpio”; /*这时pins的功能设置为普通的gpio功能。这里体现出了pin脚的功能复用。*/

};

config {

pins = “gpio14”, “gpio15”;

drive-strength = <2>; /*驱动能力设置为2MA*/

bias-disable;

};

};

};

接下来,需要在文件msm8953.dtsi中添加一个新的i2c设备树节点:

根据spec获取物理地址,中断号等。

i2c_4: i2c@78b8000 { /* BLSP1 QUP4 */ /*i2c_4使用的是BLSP1 QUP4,对应的物理地址为0x78b8000*/

compatible = “qcom,i2c-msm-v2”;

#address-cells = <1>;

#size-cells = <0>;

reg-names = “qup_phys_addr”;

reg = <0x78b8000 0x600>; /*i2c_4对应的物理地址*/

interrupt-names = “qup_irq”;

interrupts = <0 98 0>; /*根据spec可以得到BLSP1 QUP4对应的中断号为98,第三个0的含义为:*/

/*1: low-to-high edge triggered;2: high-to-low edge triggered;3: active high-level-sensitive;4: active low-level-sensitive*/

qcom,clk-freq-out = <400000>; /*希望得到的i2c总线时钟频率,HZ*/

qcom,clk-freq-in = <19200000>; /*提供的核心时钟频率,HZ*/

clock-names = “iface_clk”, “core_clk”;

clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,

<&clock_gcc clk_gcc_blsp1_qup4_i2c_apps_clk>;

 

pinctrl-names = “i2c_active”, “i2c_sleep”; /*用到的pinctrl。*/

pinctrl-0 = <&i2c_4_active>;

pinctrl-1 = <&i2c_4_sleep>;

qcom,noise-rjct-scl = <0>;

qcom,noise-rjct-sda = <0>;

qcom,master-id = <86>;

dmas = <&dma_blsp1 10 64 0x20000020 0x20>,

<&dma_blsp1 11 32 0x20000020 0x20>;

dma-names = “tx”, “rx”;

status = “okay”;

};

 

确认i2c是否配置成功的方法:

adb shell

cd /dev/

ls i2c*

会看到所添加的i2c设备。

使用示波器可以观察到正确的波形,证明配置正确了。

 

对spi的配置和i2c类似,主要在msm8953-pinctrl.dtsi和msm8953.dtsi中进行修改:

在msm8953-pinctrl.dtsi中添加如下代码:

spi3 {

spi3_default: spi3_default {

/* active state */

mux {

/* MOSI, MISO, CLK */

pins = “gpio8”, “gpio9”, “gpio11”; /* 在这里,spi使用四根线,MOSI、MISO、CLK和CS。*/

/* MOSI对应gpio8,MISO对应gpio9,CLK对应gpio11,CS对应gpio10*/

/* spi普遍使用三根或四根线,在需要片选时需要加CS线*/

function = “blsp_spi3″; /* 功能复用,设置功能为”blsp_spi3” */

};

config {

pins = “gpio8”, “gpio9”, “gpio11”;

drive-strength = <12>; /* 12 MA */ /*驱动能力为12MA*/

bias-disable = <0>; /* No PULL */ /*有三个选项:bias-disable、bias-pull-down、bias-pull-up*/

};

};

spi3_sleep: spi3_sleep {

/* suspended state */

mux {

/* MOSI, MISO, CLK */

pins = “gpio8”, “gpio9”, “gpio11”;

function = “gpio”; /* 功能复用,在sleep状态时作为gpio。*/

};

config {

pins = “gpio8”, “gpio9”, “gpio11”;

drive-strength = <2>; /* 2 MA */ /* 睡眠状态时的驱动能力设为2MA */

bias-pull-down; /* PULL Down */

};

};

spi3_cs0_active: cs0_active { /*设置CS片选线的gpio*/

/* CS */

mux {

pins = “gpio10”;

function = “blsp_spi3”; /*功能复用*/

};

config {

pins = “gpio10”;

drive-strength = <2>;

bias-disable = <0>;

};

};

spi3_cs0_sleep: cs0_sleep {

/* CS */

mux {

pins = “gpio10”;

function = “gpio”;

};

config {

pins = “gpio10”;

drive-strength = <2>;

bias-disable = <0>;

};

};

};

在msm8953.dtsi中添加节点:

spi_3: spi@78b7000 { /* BLSP1 QUP3 */ /*使用BLSP1 QUP3*/

compatible = “qcom,spi-qup-v2”;

#address-cells = <1>;

#size-cells = <0>;

reg-names = “spi_physical”, “spi_bam_physical”;

reg = <0x78b7000 0x600>,

<0x7884000 0x1f000>;

interrupt-names = “spi_irq”, “spi_bam_irq”;

interrupts = <0 97 0>, <0 238 0>; /*根据表2确定中断号*/

spi-max-frequency = <19200000>; /*最大的SPI设备的频率*/

pinctrl-names = “spi_default”, “spi_sleep”; /*所用到的pin脚和功能*/

pinctrl-0 = <&spi3_default &spi3_cs0_active>;

pinctrl-1 = <&spi3_sleep &spi3_cs0_sleep>;

clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,

<&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>;

clock-names = “iface_clk”, “core_clk”;

qcom,infinite-mode = <0>;

qcom,use-bam; /*使用BAM模式*/

qcom,use-pinctrl;

qcom,ver-reg-exists;

qcom,bam-consumer-pipe-index = <8>;

qcom,bam-producer-pipe-index = <9>;

qcom,master-id = <86>;

};

如果配置正确,可以在/sys/class/spi_master/spi下看到spi总线:

adb shell

cd /sys/class/spi_master/

ls

 

spi和i2c知识总结:

SPI总线由三条信号线组成。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备 间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。 

如果用通用IO口模拟SPI总线,必须要有一个输出口,一个输入口,另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

I2C总线是双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。 

如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口,另外还需一个输出口。

 

iic的两根线:SDA、SCL,结构如下图所示。分别表示:

SDA:串行数据线。

SCl:串行时钟线。

MSM8953配置I2C及SPI

图 IIC结构示意图

MSM8953配置I2C及SPI

图 IIC总线数据传输协议示意图

spi的四根线:MOSI、MISO、CS、CLK,spi总线的结构和数据的传送格式如下图所示。分别代表:

MOSI:主输出,从输入。

MISO:主输入,从输出。

CS:片选。

CLK:同步时钟。

MSM8953配置I2C及SPI

图 spi结构和数据传送格式示意图

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180599.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 漫话Unity3D(一)

    漫话Unity3D(一)

    2021年12月1日
    47
  • ideaspringboot启动_idea运行不出结果

    ideaspringboot启动_idea运行不出结果idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错1.在IDEA里找到”.idea===>workspace.xml”2.找到,在里面添加即可

    2022年8月19日
    20
  • Proteus使用教程并仿真51程序——LED流水灯

    Proteus使用教程并仿真51程序——LED流水灯目录一、安装Proteus软件二、熟悉Proteus软件三、51程序设计和仿真四、总结五、参考资料Proteus是LabCenterElectronics公司推出的一个EDA工具软件。Proteus具有原理布图、PCB自动或人工布线、SPICE电路仿真、互动电路仿真、仿真处理器及其外围电路等特点功能。一、安装Proteus软件下面来了解下如何安装Proteus软件,安装过程也十分简单。首先需要下载Proteus的压缩包,链接如下。链接:https://pan.baidu.com/s/1e

    2022年5月10日
    55
  • 错误代码as-3_android studio is currently

    错误代码as-3_android studio is currently解决AS编译报错:Causedby:org.gradle.api.internal.plugins.PluginApplicationException:Failedtoapplyplugin[id‘com.android.application’]编译Android项目时总是遇到以上报错,所以记录一下。解决方法:添加android.overridePathCheck=true就可以了。其实解决的方法可以在EventLog窗口中找到,如图下:从日志第一句可以看出,应该是项目路径包

    2025年8月27日
    8
  • p6操作教程_pc6视频教学

    p6操作教程_pc6视频教学在开发的过程中,我们经常会遇到由于sql语句书写错误导致的bug,那么如何来解决这种困扰呢?如果方法执行完了可以打印出完整的sql语句,就可以方便我们判断执行的是否正确,所以我们希望有一个可以打印sql语句的插件。p6spy就是一款这样的工具,下面给大家介绍一下p6spy的使用。使用p6spy需要做以下三步:1. 导入jar包:将jar包复制到项目中去,记得要buildpath一下。我用…

    2022年10月5日
    4
  • OllyDBG 入门

    OllyDBG 入门一 OllyDBG 的安装与配置 OllyDBG1 10 版的发布版本是个 ZIP 压缩包 只要解压到一个目录下 运行 OllyDBG exe 就可以了 汉化版的发布版本是个 RAR 压缩包 同样只需解压到一个目录下运行 OllyDBG exe 即可 OllyDBG 中各个窗口的功能如上图 简单解释一下各个窗口的功能 更详细的内容可以参考 TT 小组翻译的中文帮助 反汇编窗口 显示被调试程序的反汇编代码 标题栏上的地址 HEX 数据 反汇编 注释可以通过在窗口中右击出现的菜单界面选项 gt 隐藏

    2025年5月9日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号