软件I2C通信的设计要点

IIC设计要点:

  • 多多借助逻辑分析仪,可以快速定位和解决问题。
  • 注意当从机是芯片模拟的IIC时序,从机可能由于处理反应较慢的原因, 容易出现将总线stretch的现象, 就是从机会一直将总线的时钟线一直拉低。例如: 如果从机是内部自带MCU, 主机以400khz的频率进行读写的话,会造成从机无法响应, 并拉低时钟线。
  • 数据线在时钟线为低电平的时候进行改变,在时钟线为高电平,要一直进行保持, 因为数据线是边沿触发。
  • 在读完所有的数据之后,也就是读取完从机的最后一个字节之后,主机要进行发送NACK信号,以此来告诉从机读取结束, 然后发送停止信号。
  • 一般流程就是先写入设备地址,设备地址最后一个位表示接下来的动作是读还是写,然后发送要操作的寄存器地址,再进行读操作或者写操作。
  • 如果设备要从读动作变成写动作的话,主机不必发送stop信号,可以直接重新发送start信号以及设备地址。
  • 在没有发送stop信号前, 一开始发送的设备地址, 将会一直有效。
  • 有的芯片支持连续读,这样可以保证数据被一次性读取, 并且加快读写速度。
  • 注意: 读动作和写动作的时序, 最大的区别在于:
    1. 因为寄存器的地址是需要主机写入到设备的, 所以, 需要先执行设备地址(写)的操作, 然后再发送寄存器地址给从机。 寄存器地址一旦写入, 如果没有去改变, 就会一直有效。
       写动作: 开始信号 ---- 设备地址+写(0) ---- 寄存器地址 ----- 写数据
       读动作: 开始信号 ---- 设备地址+写 (0)---- 寄存器地址 ----- 开始信号 ---- 设备地址+读(1) ---- 读数据
    
    1. 写数据的时候, 每写入一个字节都要读对方ACK信号, 从机不知道何时结束, 没有NACK的动作; 读数据的时候, 每读取一个字节, 需要ACK从机以此, 直到最后一个字节, 要NACK从机。

你可能感兴趣的:(嵌入式软件开发,IIC)