通信协议之IIC协议(eeprom)_通俗易懂篇!

1、IIC(Inter-Integrated Circuit),是IICBus简称,是一种串行通信总线

2、IIC协议:遵循主机master和从机slave的主从关系机制,区别于SPI通信协议,IIC协议存在应答机制,即当主机发送控制、地址、或数据时,需要从机回复ACK确认消息(在sda总线上回复)。

3、IIC协议:控制两根信号线SCL时钟信号线(一种理解方式)和sda数据总线,即可完成对从机的控制、输入、输出。

4、IIC协议访问eeprom为例(执行byte写命令):访问时存在“开始位”,“控制byte”,“应答位”, “高位地址位”, “应答位”,“低位地址位”, “应答位”,“数据位”, “应答位”,“停止位”。(byte写:eeprom的一种写入方式,一次写入一个字节的数据)

        “开始位”, “应答位”,“停止位”单拍。

        “控制byte”,“高位地址位”,“低位地址位”,“数据位”为8bit。

         “控制byte”:的组成是由control code操作码4位+cs片选3位+write/read命令位1位=8位

         control code: eeprom 为1010

         cs片选信号: 可以片选eeprom内的8个存储单元(片选即激活某个存储单元,可进行读写等)

         write/read命令:0表示写命令;1表示读命令。

          高+低地址位:共计16位,取低13位为有效位,高三位 don't care

           ACK:   从机的应答信号,当scl为高电平时,sda被从机拉低位0,表示从机确认,反之不确认NACK。(注意当发完8bit的数据后,三态门的控制,下面6说明三态门)

5、SCL时钟信号线的产生,是利用晶振时钟的上升沿或下降沿翻转产生,注意IIC使用的时钟的频率不要超过400khzHZ。(IIC高速模式下可达3.4Mbit/s,查看器件芯片手册是否支持),如果利用上升沿产生scl信号,那么电路驱动时钟采用下降沿有效,always @ (negedge clk)。

6、sda信号是主机和从机共用的一根数据总线,命令,数据、地址、等都在这根总线上传输,需要采用三态门,切换主机和从机对sda总线的控制权。无控制权的一方输出高阻态(即控制方发什么,总线sda就发什么,不会产生干扰)

7、开始位:当scl为高电平时,将sda拉低(sda初始是高电平,非工作时间保持高电平状态),表示开始,随即将在scl为低时,将控制位8bit信息发送出去。(注意主机数据的发送只能在scl为低电平时发送,实际就是并转串的过程),当发送完成后,在scl低电平时,将三态门使能拉低,将sda的控制(赋值主动权)给到从机。

8、ACK位:在scl为高电平时,对sda的状态做判断,为0时,表示从机ACK,为1时表示从机未确认。当ACK时,三态门的使能拉高,开始发送高位地址。

9、后续同理依次发送低位地址和数据,需要注意三态门的及时拉高和拉低切换sda的从机或主机的控制权。

10、当数据发送完成,并且收到从机反馈的ACK确认信息后,需要立即获得主机主动权,在scl为低时,拉低sda。

11、在scl为高时,拉高sda,这是stop停止位,结束操作的结束时序命令(在scl为低时,拉低sda,在scl为高时,拉高sda)。

附写仿真图,包含写的开始、控制byte、ack、高位地址位:

结束语:以上就是IIC协议的基本概念和在eeprom的应用实例。eeprom还可以实现page写,current read、random read,sequential read等命令,有兴趣的小伙伴可以私信。下面附一张读完后的结束仿真图,random read读完后进入stop状态的信号逻辑(注意:读完数据后反馈的是NACK)。

 

 

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值