嵌入式arm学习之I²C总线
嵌入式arm学习之I²C总线
cpu和外设常见的几种通信方式:GPIO/UART/I²C总线/1-Wire总线
今天学习I²C总线:
CPU和外设传输需要两根信号线,SDA数据线、SCL时钟控制信号线(数据同步)
SCL周期(频率)由外设决定
SDA和SCL分别外接两个上拉电阻,默认为高电平
CPU和外设数据通信只需要一根数据线,一个时钟周期传输一个bit位,cpu在SCL为低电平的时候将数据放到SDA上(拉高/拉低),外设在同周期的SCL为高电平的时候从SDA取出数据(判断高/低电平),低放高取
I²C总线数据传输从高位开始,一次传输一个子节
SDA和SCL这两根信号线上可以连接多个外设,也可以连接多个CPU,总线上的负载电容不超过400pF即可,跟硬件设计相关
优点:
节省CPU引脚资源
简化硬件设计
软件设计相对简单
开发周期短
成本降低
在手机中有一个PMIC芯片与CPU之间就是用的I²C,给LCD、WIFI、摄像头等供电
CPU如何找到需要访问的外设?
通过设备地址
CPU如何与外设进行数据传输?
SDA与SCL如何搭配使用?
在I²C外设的芯片手册中的时序图查找
相关概念:
START信号:起始信号,时序为SCL为高电平,SDA由高电平向低电平跳变,产生一个下降沿
STOP信号:结束信号,时序为SCL为高电平,SDA由低电平向高电平跳变,产生一个上升沿
读写位(R/W):表示CPU是读还是写,如果从外设读数据,R/W=1,如果向外设写入数据,R/W=0
如果传输数据时读写位发生改变,必须重发START和设备地址+读写位
设备地址:外设的唯一设备地址,通过原理图和芯片手册得到,有效位数为7位(居多)或10位(极少)
例如:LM77温度传感器
LM77设备地址=10010A1A0(A1A0为两个引脚)
假设硬件工程师将A1A0接地,1001000(二进制),0x48(十六进制,高位补0)
例如:MMA8653三轴加速度传感器
MMA8653设备地址=0x1D
例如:ADP8860背光灯控制芯片
ADP8860设备地址=0x2a
读设备地址:将设备地址<<1|1(R/W=1,表示读外设)
MMA8653的读设备地址=0x1D<<1|1=0x3B
写设备地址:将设备地址<<1|0(R/W=0,表示写外设)
MMA8653的写设备地址=0x1D<<1|0=0x3A
I²C总线规定传输一次一个子节,设备地址为7位,加一个读写位,正好一个子节
ACK信号:应答信号,有效位1位,低电平有效
I²C数据传输协议:
I²C总线接口的外设,芯片内部都集成一堆寄存器(片内寄存器),这些寄存器地址从0x00开始,本质就是CPU通过I²C总线访问寄存器,不能以指针的形式访问片内寄存器(片内寄存器地址不再CPU直接寻址的4G地址控件上),根据外设的时序来访问片内寄存器地址
看I²C外设芯片手册先找片内寄存器地址和片内寄存器BIT含义,再找片内寄存器的读写时序
例如:CPU读取LM77内某个寄存器2子节过程
打开LM77芯片手册第一个时序图:
CPU向总线发送START信号
发送LM77的设备地址和读写位1(0x48<<1|1)(1是读,0是写)
LM77接收到设备地址和读写位之后再第九个时钟周期给CPU一个有效的ACK信号
LM77将2子节数据中的高字节发送给CPU
CPU接收到数据后给LM77发送一个有效的ACK信号(第九个周期)
LM77将低字节字节发送给CPU
CPU接收到最后一个子节数据后,发送给LM77一个无效的ACK(高电平)
CPU发送一个STOP信号
例如:CPU读取MMA8653三周加速度传感器的ID为例,过程如下:
打开MMA8653芯片手册,得到MMA8653片内寄存器(设备ID)地址为0x0D,保存了MMA8653的ID(0x5A),读取即可
CPU向总线发送START信号
CPU向总线发送MMA8653得设备地址和读写位0(0x1D<<1|0)
MMA8653在第九个时钟周期给CPU发送一个有效的ACK
CPU向MMA8653发送要访问的片内寄存器地址0x0D
外设向CPU发送一个有效的ACK
CPU重新发送START,告诉外设,读写方向发生改变
CPU重新发送设备地址和读写位1(0x1D<<1|1)
外设给CPU发送ACK
外设将片内寄存器地址0x0D的内容发送给CPU
CPU发送无效ACK
CPU发送STOP信号
例如:CPU向HMC6352指南针传感器发送休眠指令‘S’,过程如下:
打开芯片手册,找到时序图:
CPU发送START
CPU发送0x21<<1|0
外设发送ACK信号
CPU发送休眠指令0x53('S')
外设发送ACK信号
CPU发送STOP信号
一张图讲透NVIC工作原理 #硬件工程师
一张图讲透 NVIC 工作原理。
1. 重点来了,NVIC 的工作原理。假如现在来了三个外部中断,它们都到达了 ISER 寄存器,每一位控制一个中断,只有被使能的才能通过,而外部中断 1 就没有被使能。
2. 接下来进入到了 IPR 寄存器,要进行优先级的比较了,要结合着优先级分组的设计来去看,后边优先级高的要先响应,这里外部中断 2 的优先级最高,它先响应,接下来是外部中断 3 响应。
3. 内核也是可以直接产生中断的,它的路径跟前面的外部中断不一样,会直接经过 SHPR,SHPR 和 IPR 是平级的,统一比较一下优先级,而它最后执行说明它的优先级最低。这就是 NVIC 的工作原理。
4. 真正编程的时候要找到对应的结构体的定义,对应上相应的寄存器。能够看到像 32 的代码当中有一个 NVIC 的结构体,这个结构体当中提到了 ISERICER IP,同时还能看到另外一个结构体 SCB,这里边有像分组寄存器包括 SHP。
5. 带大家简单的看一下,找一个跟中断相关的代码跟一下就可以了。这是设置有限级的,往里跟,它掉的是这样的一个神秘四的接口,继续跟,再跟,看到了 NVIC,终于找到了它的根源。
最后,给大家准备了 STM32 从环境搭建到项目实战的全套资料,还包括 5 种嵌入式经典总线协议的免费视频教程,需要的同学预约领取。
相关问答
视频如何通过CAN总线传输?
视频通过CAN总线传输的首要步骤是将视频数据分割成小包,并为每个包添加特定的包头信息,例如数据长度等。随后,将这些数据包发送到CAN总线上,其中每个数据包...
can芯片是什么意思?
can芯片也叫总线模块是一个比较模糊的概念,但凡是和CAN总线沾边,应用CAN总线进行通讯的设备,我们其实都可以称其为CAN总线模块。不过,一般情况情况下,我们更...
lvds通信接口详细介绍?
LVDS(LowVoltageDifferentialSignaling,即低电压差分信号)接口又称RS-644总线接口,是20世纪90年代才提出的一种数据传输和接口技术。LVDS接口是美国N...
电脑主板上的南北桥芯片作用?-Vvvvivian_rhyMe的回答-懂得
装模式最初采用BGA封装模式,到现在Intel的北桥芯片已经转变为FC-PGA封装模式,不过AMD处理器设计的主板北桥芯片到现在依然还使用传统德BGA...南桥...
blackberry8800插卡使用介绍
接口类型是指显卡与主板连接所采用的接口种类。显卡的接口决定着显卡与系统之间数据传输的最大带宽,也就是瞬间所能传输的最大数据量。不同的接口能...
中央处理器工作原理是什么?_其他_舒适100网触屏版
[回答]我来介绍CPU的工作原理浅析:一个完整的微型计算机系统包括硬件系统和软件系统两大部分。计算机硬件是指组成一台计算机的各种物理装置,它们是由各...
dsvb接口是什么?
你还可以上网玩游戏,很不错的海尔电视DSMB接口是模卡接口,模卡的接口界面是整个模卡系统最复杂的部分之一:它必须是高速总线接口,能够满足全高清信号传输的...
网络与总线技术?
总线技术就是将各部件连接到计算机处理器的一个元件。要连接的部件包括硬盘、内存、音响系统和视频系统等。例如,要查看计算机在做什么,一般是使用阴极射线管(...
汽车助力泵工作原理视频
[最佳回答]汽车助力泵的工作原理是汽车在转向时,转矩(转向)传感器会“感觉”到转向盘的力矩和拟转动的方向,这些信号会通过数据总线发给电子控制单元(查成交价...
英特尔HM77高速芯片组是什么?
尔HM75高速芯片组是移动式英特尔7系列芯片组家族的一个成员;它支持第二代和第三代智能英特尔酷睿处理器家族,目前用到的有HM77,HM76以及HM75.以下分别将...