iic 认知

sck
sda
IIC 总线规定了不同类型的从机拥有不同的 IIC ADRESS,主机访问从
机的时候需要提供从机的 IIC ADRESS
缺点: 半双工 需要上拉 容易受干扰 同扳级间芯片通信方便
1.https://blog.csdn.net/tianshiyalin/article/details/24504539
IIC 总线为很么要接收上拉电阻
2.1 主机向从机通信
在这里插入图片描述
PSELSCL、PSELSDA 为 IIC 总线的 SDA、SCL 引脚选择寄存器
通信过程:
开始条件—器件地址+写标志—从机 ACK—第一个字节—从机 ACK—第 N字节----从机
ACK-----停止条件。

启动startttx后,NRF51522 控制器产生开始条件: SCL = 1 SDA = 1–>0;
当发送完一个字节,会在下一个时钟脉冲 从机 会产生一个ACK 信号,SDA= 0 ,IIC 控制器检测到 ACK后产生一个 TXDSENT EVENT,表示这个自己已经发送完,继续发送写一个字节~
数据发完后,我们启动STOP任务,IIC 控制器会在总线上产生停止条件:SCL = 1 ,SDA = 0–>1;

2.2从机到主机通信
在这里插入图片描述
A:slave 开始条件-- 器件地址+写标志–从机ACK–从机发送第一个字节数据到 IIC 控制器 — 主机发送应答信号 – …-- 从机发送第N个字节到 IIC 控制器 – 停止条件。
当我们启动STARTTRX任务后,NRF51822控制器会在IIC总线上产生 开始条件:SXL = 1; SDA =1–>0
每接收到从机 一个字节, IIC 控制器 会产生一个 RXDRDY 信号,通知CPU 去RXD 取走 数据, 当数据接收完场,我们启动 SROP 任务,IIC 控制器会在总线上产生 停止条件:SCL = 1,SDA = 0–>1;

3.相关寄存器介绍
3.1 SHOTS 短接寄存器。NRF51822特有的一个功能,可以把 BB 跟 SUSPEND、STOP 联系起来。
3.2 INTEN 中断使能寄存器。写 1,对应位的中断被使能
3.3 INTENCLR 中断清除寄存器。写 1,对应位的中断被关闭。
3.4 ERRORSRC 当通讯过程中产生错误中断,我们可以通过读取该寄存器,获得错误产生的原因
3.5 ENABLE IIC 使能寄存器。值配置为 5的时候,IIC 控制器被使能;为 0 的时候,IIC 控制器被关闭。
3.6 PSELSCL IIC 时钟线 SCL 引脚选择寄存器,用来选择 NRF51822的哪个 GPIO作为 SCL 信号脚。
3.7 PSELSDA IIC数据线 SDA 引脚选择寄存器,用来选择 NRF51822 的哪个 GPIO作为 SCA 信号脚.
3.8 RXD IIC数据接收寄存器。从设备发给 NRF51822的数据会被存放在这里。
3.9 TXD IIC数据发送寄存器。当 NRF51822给从设备发数据之前,你把要发送的数据放到这个寄存
3.10 FREQUENCY IIC时钟频率配置寄存器,支持 100K 250K,400K 三种频率。
3.11 ADDRESS 从设备的器件地址寄存器,当 NRF51822写或者读从器件的时候需要把从器件的地址放
4.程序编写
4.1 写操作的流程
1)首先把器件的地址放入地址寄存器。
2)启动 STARTTX 启动写操作。
3)将要发送的数据放入 TXD 寄存器中。
4)等待 TXDSENT 信号
5)如果有数据,继续将后续数据放入 TXD 中,并回到步骤 4,否则到步骤 6。
6)设置 STOP 寄存器,并等待 IIC 停止。
4.2 读操作的流程
1)首先把器件的地址放入地址寄存器。
2)启动 STARTTX TASK 启动写操作。
3)将要发送的数据(寄存器地址)写入 TXD 寄存器中。
4)等待 TXDSENT 事件,以确定数据发送完毕。
5)判断是否只读取一个字节的数据,如果不是设置 SHORTS 将 BB event 和 SUSPEND task
短接 (BB evnet 产生时自动触发 SUSPEND task),否则设置 BB event 和 STOP task 短接。
6)启动 STARTRX TASK。
7)等待 RXDRDY 事件,提取数据。如果后续只有一个要读的数据了,则设置 BB event 和
STOP task 短接,并跳到 8,否则继续执行 7。
8)等待 STOPED 信号。

本例程演示的是 NRF51822通过 IIC 总线跟讯联电子 NRF51822EK_TM开发板上的
MPU6050通讯,读出 MPU6050的 WHO AM I寄存器的特征码,假如读取成功,开发板上的
LED1 亮,假如不成功,LED0 亮。
4.3 实例程序流程
1)配置 GPIO,用来点亮 LED1、LED0。
2)配置 PSELSDA、PSELSCL 选择用来 IIC 通讯的 GPIO。可以参考开发板的电路图。
3)通过使能 ENABLE,使能 IIC 控制器。
4)NRF51822发命令读取 WHO AM I寄存器的值。
5)接收 MPU6050发出的 WHO AM I 寄存器的值。
6)通过 LED 等显示读取成功与否。

猜你喜欢

转载自blog.csdn.net/weixin_40654382/article/details/91044122
IIC
今日推荐