IIC学习随笔
一、概念简介
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。
二、基本特点
2.1 双线制
一根为时钟同步线(SCL),一根为数据传输线(SDA)
2.2 半双工
只有SDA在进行数据传输,所以IIC能够实现双方双向通信,但不能同时
2.3 同步通信
有同步信号线SCL,通信协议时序严格,SDA在主从设备初步同步后,在SCL时序控制下,按位传输数据。
2.4 通信为主从机模式
一主多从的运行模式:一个主机和多个从机
SCL由主机控制,SDA可由主机控制,也可由从机控制
2.5 从属设备地址
由于IIC为主从机模式通信,故当主机想要和从机通信时,需要确定从机的地址才能进行通信,而主机不需要设备地址。
注意:
1.从设备地址是由生产设备的厂家确定的
2.只能由主机先发起通信,从机不能先发起通信
2.5.1 设备地址的组成
设备地址一般由7为组成,在IIC通信时,将其左移一位,将最低位作为读写位。即abcd efg(w/r)
读写位用来确定主机和从机的发送方和接收方
读写位为0 --> 主机作为发送方
读写位为1 --> 主机作为接收方
例如:
有一个从设备的地址为0x50,主机想要和该从机通过IIC进行通信,则有:
0x50 ---- 0101 0000
左移一位为: 1010 0000 ---- 0xA0
主机发送:(0x50 << 1) | 0x00 = 0xA0
主机接收:(0x50 << 1) | 0x01 = 0xA1
2.5.2 设备地址的作用
最主要的作用为确定地址,方便主机找到从机地址,同时确定IIC通信的收发方。
还有其他的作用,后续继续补充!
2.6 数据收发规则
传输数据时是高位先发,由于是串行通信,故接收方也是高位先收。
IIC在收发数据的过程中:
发送方只能在SCL低电平时可以发送数据
接收方只能在SCL低电平时可以读取数据
三、时序分析
(图源百度百科)
3.1 主机发送数据给从机
SDA先拉低,发送一个启动信号,后SCL拉低,开始数据传输,每次传输8位数据,传输完成后接收者会反馈一个应答信号(ACK/NACK),后继续传输数据,当数据全部传输完成后,会发送一个终止信号,表明此次数据传输已经结束。
总结即为:启动信号+从设备地址+R/W+应答信号+数据传输+应答信号+……+终止信号
3.2 主机读取从机数据
由于从机可能会将数据存储在特定的位置,故需要先确定数据存储在哪里,因此需要先进行写操作,在进行读操作。
总结即为:启动信号+从机地址+写模式+应答信号+从设备中要读取数据的存储位置+应答信号+重新启动信号+从机地址+读模式+应答信号+终止信号
3.3 通信过程
一次完整的IIC通信一般由以下三部分组成:
通信前:
空闲状态:SDA和SCL都位高电平,并保持一定时间
通信时:
1.启动信号,从空闲状态转到通信状态
2.主机发送信号给从机们,寻找想要通信的从机
3.从机发送给主机应答信号(主机发送数据给从机)
4.主机发给从机应答信号(主机读取从机数据)
5.数据的收发与接收
通信结束后:
发送终止信号,SDA和SCL回归为空闲状态
3.4 启动信号
启动信号为SDA和SCL不同步的一个体现,SDA先拉低,SCL为高电平,保持>=4.0us后再拉低。
3.5 终止信号
SCL先拉高,保持>=4.0us后,SDA再拉高,进入空闲状态。
总结
IIC通讯方式由于只有一条SDA数据线,故为半双工模式。工作原理简而言之其实就是是通过主机不断发出信号,从机接收信号并应答的方式,发出信号需要启动信号和终止信号来控制IIC传输的启动和结束。
写的不好,后面还会继续更新,欢迎大佬指点一下呀!