【嵌入式学习笔记】---- IIC通信
1 IIC总线协议介绍
IIC:Inter Integreated Circuit,集成电路总线,是一种同步
、串行
、半双工
通信总线
1.1 IIC物理层
- 接入上拉电阻,确保总线空闲状态为高电平
- 支持多设备连接,挂载在IIC总线上的外设都有其唯一的地址
- 挂载在IIC总线上的外设不能无限多,外设挂载在总线上时会产生寄生电容,其总线上的电容不得超过400pf
- 数据传输速率:①标准模式100k bit/s;②快速模式400k bit/s;③高速模式3.4M bit/s
- 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线
1.2 IIC协议层
1.2.1 IIC通讯的起始和停止信号
起始信号
:当SCL线是高电平时,SDA线从高电平向低电平切换
停止信号
:当SCL线是高电平时,SDA线由低电平向高电平切换
1.2.2 数据有效性
当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备
1.2.3 地址及数据方向
I2C 总线上的每个设备都有自己的独立地址,主机发起通讯时,通过 SDA 信号线发送设备地址(SLAVE_ADDRESS) 来查找从机,紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位 (R/)。
数据方向位为“1”时表示主机由从机读数据,此时主机会释放对 SDA 信号线的控制,由从机控制 SDA 信号线,主机接收信号
数据方向位为“0”时表示主机向从机写数据,此时SDA 由主机控制,从机接收信号
1.2.4 响应
I2C 的数据和地址传输都带响应。响应包括“应答 (ACK)”
和“非应答 (NACK)”
两种信号
作为数据接收端时,当设备 (无论主从机) 接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据
若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输
传输时主机产生时钟,在第 9 个时钟时,数据发送端会释放 SDA 的控制权,由数据接收端控制SDA,若 SDA 为高电平,表示非应答信号 (NACK),低电平表示应答信号 (ACK)
本文来自博客园,作者:晚风也温柔,转载请注明原文链接:https://www.cnblogs.com/zxr-blog/p/17973692