IIC协议学习笔记

  IIC总线(Inter-Integrated Circuit)即集成电路总线,是PHILIPS公司设计出来的一种简单、双向、二线制、同步串行总线。IIC总线是一个多向控制总线,多个器件(从机)能够同时挂载到一个主机控制的一条总线上。每一个链接在总线上的设备都是经过惟一的地址和其余器件通讯,主机和从机的角色可互换,html

  主机和从机的概念。主机就是负责整个系统的任务协调与分配,从机通常是经过接收主机的指令从而完成某些特定的任务,主机和从机之间经过总线链接,进行数据通信。咱们平时使用的我的电脑也就是这个概念。微信

  IIC协议为半双工协议。学习

  全双工指在发送数据的同时也可以接收数据,二者同步进行。目前的网卡通常都支持全双工。ui

  半双工就是指一个时间段内只有一个动做发生,早期的对讲机、以及早期集线器等设备都是基于半双工的产品。spa

  还有一种单工通讯是指通讯线路上的数据按单一方向传送.。设计

  数据有效传输在scl信号的高电平期间,sda数据线保持稳定,在scl为低电平时容许sda数据线变化。3d

  起始条件在scl为高电平期间,sda出现降低沿,则为起始信号。htm

 

  结束条件在scl为高电平期间,sda出现上升沿,则为结束信号。blog

 

  总结:当scl为高电平的时候,sda为出现降低沿为start位, sda出现上升沿为stop位,因此在scl为高电平的时候sda应该保持稳定不能随意乱动。这就又回到了数据传输有效的条件,只有在scl为低电平期间,才容许数据变化,在高电平期间,不容许数据变化,不然就会出现起始位或结束位。get

  应答(ACK,Acknowledgement)。即确认字符,在数据通讯中,接收站发给发送站的一种传输类控制字符。主机每向从机发送完一个字节的数据,主机老是须要等待从机给出一个应答信号,来确认从机是否成功接收到了数据,从机应答主机所须要的时钟也是由主机提供的,应答出如今每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。,须要应答时,数据发出方将SDA总线设置为3态输入,因为IIC总线上有上拉电阻,所以此时总线默认高电平,若数据接收方正确接收到数据,则数据接收方将SDA总线拉低,以示正确应答。

  IIC传输时时从MSB开始传输到LSB结束。MSB是Most Significant Bit的缩写,最高有效位。在二进制数中,MSB是最高加权位。与十进制数字中最左边的一位相似。一般,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。LSB,英文 least significant bit,中文义最低有效位。

IIC写时序

ID_Address, REG_Address, W_REG_Data

(1)   产生start位

(2)   传送器件地址ID_Address,器件地址的最后一位为数据的传输方向位,R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据(R)。ACK应答,应答是从机发送给主机的应答,这里不用管。

(3)   传送写入器件寄存器地址,即数据要写入的位置。一样ACK应答不用管。

(4)   传送要写入的数据。ACK应答不用管。

(5)   产生stop信号。

 

IIC读时序

{ID_Address + REG_Address} + {ID_Address + R_REG_Data}

(1)   产生start信号

(2)   传送器件地址(写ID_Address),ACK。

(3)   传送字地址(写REG_Address),ACK。

(4)   再次产生start信号

(5)   再传送一次器件地址,ACK。

(6)   读取一个字节的数据,读数据最后结束前无应答ACK信号。

(7)   产生stop信号。

  从时序图上能够看出,IIC读时序要写两次器件地址,刚开始接触的时候我也很疑惑 dummy write。我我的这样理解这里,首先传送器件地址到总线上找到器件,而后写入寄存器地址,也就是word address找到须要读取数据的地址,但并非真正的写入数据因此叫作dummy wirte(假写)。而后再传输一次器件地址后开始读数据。

  IIC协议在读写数据时,老是要发送器件地址,这里须要注意的是,不是主机给从机发送地址,而是主机给地址总线上发送地址,挂IIC总线上的全部从机都能收到地址,若是发过来的地址和本身的地址匹配上了,从机就会给主机一个应答,这样就创建起来了一个通信。因此我在想,若是从机的器件是彻底同样的,那么IIC协议就能够同时给多个从机,即对多个器件进行配置。这种理论上是可行的,但实际上是不行的,IIC协议就是经过地址不一样来判断给哪一个器件传送数据的,若是两个器件的地址彻底同样,器件会产生应答,那么两个器件就经过竞争判断给谁通讯了,有随机性。即IIC协议一次只能和一个设备/器件进行通信。

IIC读写时序补充

    双字节地址写时序,写入器件地址,写入寄存器地址高位、低位,而后写数据。

    多数据写时序,写入器件地址,写入寄存器地址,连续写入数据。

    双字节地址多数据写时序,写入器件地址,写入寄存器地址高位、低位,而后连续写入数据。

    双字节地址读时序,写入器件地址,写入寄存器地址高位、低位,而后再次写入器件地址,写入数据。读数据最后结束前无应答ACK信号。

  多数据读时序,写入器件地址,写入寄存器地址,,而后再次写入器件地址,连续写入数据。读数据最后结束前无应答ACK信号。

  双字节地址多数据读时序,写入器件地址,写入寄存器地址,,而后再次写入器件地址,连续写入数据。读数据最后结束前无应答ACK信号。

 

 转载请注明出处:NingHeChuan(宁河川)

我的微信订阅号:开源FPGA

若是你想及时收到我的撰写的博文推送,能够扫描左边二维码(或者长按识别二维码)关注我的微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/8595423.html

相关文章
相关标签/搜索