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结构和数据传送格式示意图

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pandas中的drop函数_pandas replace函数

    pandas中的drop函数_pandas replace函数这里写自定义目录标题新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  • 数仓分层

    000概述数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用本文的大纲001,介绍数据分层的作用002,分层设计的原则以及介绍一种通用的数据分层设计003,具体案例004,落地实践意见005,思考001,数据分层的作用我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是数据分层。数据分层的好处有①,清晰数据结构:每一…

  • 有关SqlDbType.Decimal

    有关SqlDbType.Decimal今天在开发过程中遇到SqlDbType.Decimal类型的参数,返回值却是没有小数位的整数值,郁闷坏了。查了半天资料,原来需要指定小数位。具体书写如下:               cmd.Parameters.Add(“@Percent”,SqlDbType.Decimal).Direction=ParameterDirection.Output;               cm

  • 异步fifo的工作原理(netty异步方法)

    FPGA(一):异步FIFO实现(包含源码和仿真文件)一、异步FIFO的重要参数及其作用1、FIFO:FirstInputFirstOutput,即先入先出队列,本质是RAM。FIFO有几个最重要的参数:2、wr_clk:写时钟,所有与写有关的操作都是基于写时钟;3、rd_clk:读时钟,所有与读有关的操作都是基于读时钟;4、FIFO_WIDTH:FIFO的位宽,即FIFO中每个地址对应的数据的位宽;5、FIFO_DEPTH:FIFO的深度,即FIFO中能存入多少个(位宽为FIFO_

  • 这个, …, 男方也太背了吧, 尽碰上极品女方…

    这个, …, 男方也太背了吧, 尽碰上极品女方…
    发信人:jungleford(風淸揚╬孤城斩菜羊),信区:Joke
    标 题:我生活在上海,我相亲无数次,那些极品女方父母(转载)
    发信站:水木社区(SunAug2220:58:532010),站内

    【以下文字转载自Shanghai讨论区】
    发信人:adi(杨过),信区:Shanghai
    标 题:我生活在上海,我相亲无数次,那些极品女方父母
    发信站:水木

  • unity3d官网下载安装教程_3D怎么安装

    unity3d官网下载安装教程_3D怎么安装入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。一、官网下载链接https://unity3d.com/cn/但是可能是因为我没翻墙,所以我根本没办法进入这个网页二、Unity3D中国官网下载但是天无绝人之路嘛可不是,让我找到了这么个大宝贝Unity所有版本下载|Unity中国官网点进链接后往下翻然后根据提示进行一些注册和登录,就可以选择你想要的版本进行下载啦三、Unity3D安装教程这里我选择.

发表回复

您的电子邮箱地址不会被公开。

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