目录
写完回头一看发现字数还不少,如果你觉得文字太枯燥,那么可以跳到后面程序设计,直接动手做实验。如果想仔细了解关于IIC协议的细节,那么希望你能慢慢把看完,看完后一定有所收获。
概述:IIC BUS(Inter Integrated Circuit BUS,内部集成电路总线)是飞利浦公司推出的二线制串行扩展总线;在IIC总线上,只需要两条线——数据线SDA线和时钟线SCL;多个器件可连接到同一个IIC总线上,每一个器件有一个唯一的识别地址,可一对多、多对一、一对一通讯;标准模式下传输速度为100Kb/s,快速模式下为400Kb/s。优点:引脚少,硬件实现简单,成本低。
关于IIC的接口原理有些书可以描述出好几页,但有时候看完了可能未必能懂,虽然看的时候每句话都能理解,但是看完了之后,自己想描述出来却不知道从何说起,脑海里只是一些零散的概念。所以下面讲述一些关于IIC比较核心的东西。
1.物理层:
- 它是一种支持多个通信主机及多个通信从机的总线。“总线”是指多个设备共用的信号线。
- 一个
C总线只使用两条总线线路;一条双向串行数据线(SDA),一条串行时钟线(SCL)。
- 每个连接到总线的设备都有一个独立的地址,总线上任一设备可以利用这个地址对其他设备进行交互。
- 总线通过上拉电阻接到电源。总线上的任一设备,如果处于空闲状态时。会输出高阻态。所以在总线空闲的时候两条总线都呈现高电平。
- 具有3种传输模式,标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps,目前大多数不支持)。、
- 连接到相同总线的设备数受到总线的最大电容400pF限制。
2.协议层:
C的协议定义了通信的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。
- 通讯的起始和停止信号
因为设备发送数据的时候是连续字节的,接受端并不能提前知道发送者要发送的总字节,所以接收端是从起始信号开始接收,直到停止信号为止;而且这两种信号要与传输过程中的任何时间点的时序不能有冲突(独特性),iic在数据传输的过程中也保证了这一点。通讯的起始:当SCL线是高电平时SDA线从高电平向低电平切换。通信的停止:当SCL线是高电平时SDA线由低电平向高电平切换。可看出,这两种信号跟数据发送过程中的差异,在数据发送过程中,SDA线总是在SCL线在低电平的时候才变换。
- 数据的有效性
iic使用SDA信号线来传输数据,使用SCL时钟线进行数据同步。SDA数据线在SCL时钟线的每一个周期内传输一位,当SCL时钟线为高电平时,SDA数据线有效;即当SCL为高电平,若SDA为高电平表示数据“1”,若SDA为低电平表示数据“0”。当SCL时钟线为低电平时,SDA数据无线,一般这个时候SDA进行电平切换,为下一次表示数据进行准备。
- 应答位
从机每接收到一个字节时,都要作出应答;而主机这时候释放SDA线的控制权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号,低电平表示应答信号即传输成功。
3.数据的传输:
由上面介绍的协议基本理解了IIC通信的传输原理,在实际应用中,主机设备发送到从机设备的数据包括地址和数据。主机通过地址可找到对应的从机设备,而收到广播地址的从机做出判决,若地址与自身地址匹配则做出应答,若不匹配则忽略信息。
- 主机向从机写数据
上面是主机对芯片AT24C02存储芯片进行写操作时SDA的数据流,可以很清晰看出所发送的内容。
对照着图来说,"DEVICE ADDRESS"设备地址可以是7位或10位,图中所示为7位,加上R/W传输方向位(1为发送,0位接受)组成一个字节;图中所有的ACK是等待从机应答位,主机收到了应答后才继续发送后面的内容,从图中可明显看出,主机每发送一个字节都必须等待从机做出一个应答;
图中的"WORD ADDRESS"指的是主机往AT24C02存储芯片写入的首地址,后面DATA就是写入的内容。不是所有的iic从设备都有这个,比如是音频的设备那么就不存在写入地址。具体是要根据iic从设备的数据手册上的功能通信协议来定。
- 主机向从机读数据
上面是主机对芯片AT24C02存储芯片进行读操作时SDA的数据流。
对照着图来说,首先是发送从机地址"DEVICE ADDRESS",接着给从机发送"WORD ADDRESS"是所读取内容的地址,这是告诉AT24C02接下主机需要的内容,设置好地址之后,接着主机再发送一个起始位,紧接着发送"DEVICE ADDRESS",这时可以注意到传输方向是READ(读),那么主机释放SDA线的控制权,有从机给主机发送数据,可以连续发送多个字节数据,当主机期望停止接收时作出一个非