目录
一、IIC简介
IIC(Inter-Integrated Circuit)总线是一种由飞利浦(PHILIPS)公司开发的两线式串行通信总线结构,通常用于连接微控制器及其外围设备。IIC有着传输距离短,传输速率慢,适合在小数据量场合使用,支持多主多从等特性。IIC总线上可以连接多个主机和多个从机,任何一个能够进行发送和接收的设备都可以成为主机,能够控制信号传输和时钟频率。但任意时刻只能有一个主机和一个从机进行通信。
IIC通信的典型速率在100kbps,高速模式下可达400kbps,超高速模式下可达1mbps。
二、时序及通信
IIC每帧数据由9bit组成,包括8bit有用数据和1bit应答位。总线空闲时,SCL线和SDA线均被上拉电阻拉高,主机需要发送起始信号才可开始通信。起始信号即在SCL线为高电平的情况下拉低SDA线。在起始信号后通常需要发送7位从机地址加1位读写标志位用于寻找对应的从机和告知读写模式,称为方向位,“0”表示主机发送数据(写),“1”表示主机接收数据(读)。
![](https://i-blog.csdnimg.cn/direct/71c14f7b7ec34fb8a8e1579a6ac97b01.png)
从机的IIC通讯地址在生产时便已确定好,需查阅数据手册或询问制造商。如无需指定通信寄存器位置,在收到从机的应答信号后就可以开始传输数据了。在结束信号到来之前,都可以一直进行数据的传输,但是只能单向收发。如果想要转换数据传输的方向,则需要进行重启,重新设置读写标志位。
注:下文中,从机地址+读标志位称为读指令,从机地址+写标志位称为写指令
IIC写数据:
写数据时,需要先写入具体的寄存器地址,由于没有数据方向的转换所以不需要进行重启操作,写入寄存器地址后接需要写入的数据即可。写数据步骤:
起始位 + 写指令 + 寄存器地址 + 数据 + 结束位
IIC读数据:
不指定具体寄存器时,会读出从机当前指向的寄存器地址的数据,读出数据后地址位会自动增加,方便连续读数据的操作。此处的ACK信号由主机发送给从机,从机需要识别到应答位后才会继续发送数据进程。如果不需要继续读数据,只需在最后一个ACK位不拉低电平,再发送结束信号即可。读数据步骤:
起始位 + 读指令 + 数据 + 结束位
IIC读具体寄存器数据:
其中DUMMY WRITE操作称为哑写,这一步骤的目的是告诉从机要读取哪个寄存器的地址。读写方向转换时需要重启总线,从机才会被重新寻址和确定数据方向。因此读具体寄存器数据的步骤是:
起始位 + 写指令 + 寄存器地址 + 重启 + 读指令 + 数据 + 结束位
在通信过程中,起始位是必须的,用于启动寻址,告诉总线上的从机接下来的八位数据是在寻址,让从机与自身的地址对比,对应地址的从机发送应答位告诉主机已经准备好通信。
![](https://i-blog.csdnimg.cn/direct/57e15e90de704d5c8336735b15742dfa.png)
三、波形分析
下图中,主机发送的数据为0110_0111,从机在应答位时钟的下降沿后的低电平产生一个窄脉冲,表示成功接收该字节数据。应答位的波形可能根据设备的不同而不同。由于从机的IIC线存在上拉电阻,因此电平上升时间会根据电阻大小而不同,下拉则是直接到地,变化时间快。因此波形会呈现上升慢,下降快的特点。
![](https://i-blog.csdnimg.cn/direct/dcf942b3f4074b72ad589bf8c7d64e77.jpeg)
四、实验
对寄存器地址4000_66A8进行读—写—读的操作。
I2C通讯可以成功读写寄存器。
参考
Z小旋,《IIC原理超详细讲解——值得一看》,CSDN
岂有此李呀,《有线通信--一文弄懂IIC--(基础篇)》,CSDN