IIC设计要点:
- 多多借助逻辑分析仪,可以快速定位和解决问题。
- 软件iic进行软件延时的时候, 其中使用的变量需要通过
volatile
进行修饰。volatile int delay = 100; while(delay --);
- 注意当从机是芯片模拟的IIC时序,从机可能由于处理反应较慢的原因, 容易出现将
总线stretch
的现象, 就是从机会一直将总线的时钟线一直拉低。例如: 如果从机是内部自带MCU, 主机以400khz的频率进行读写的话,会造成从机无法响应, 并拉低时钟线。 - 数据线在时钟线为低电平的时候进行改变,在时钟线为高电平,要一直进行保持, 因为数据线是边沿触发。
- 在读完所有的数据之后,也就是读取完从机的最后一个字节之后,主机要进行发送
NACK
信号,以此来告诉从机读取结束, 然后发送停止信号。 - 一般流程就是先写入设备地址,设备地址最后一个位表示接下来的动作是读还是写,然后发送要操作的寄存器地址,再进行读操作或者写操作。
- 如果设备要从读动作变成写动作的话,主机不必发送
stop
信号,可以直接重新发送start
信号以及设备地址。 - 在没有发送
stop
信号前, 一开始发送的设备地址, 将会一直有效。 - 有的芯片支持连续读,这样可以保证数据被一次性读取, 并且加快读写速度。
- 注意: 读动作和写动作的时序, 最大的区别在于:
- 因为进行iic通信的时候, 想要进行数据交换的数据寄存器的地址是需要主机写入到设备的, 所以, 在读之前, 需要先执行设备地址(写)的操作, 然后再发送数据寄存器的地址给从机。 然后,执行设备地址(读)的操作, 再进行读的操作。
数据寄存器的地址一旦写入, 如果没有去改变,就会一直有效。
写动作: 开始信号 ---- 设备地址+写(0) ---- 寄存器地址 ----- 写数据 读动作: 开始信号 ---- 设备地址+写 (0)---- 寄存器地址 ----- 开始信号 ---- 设备地址+读(1) ---- 读数据
- 写数据的时候, 每写入一个字节都要读对方
ACK
信号, 从机不知道何时结束, 没有NACK
的动作; 读数据的时候, 每读取一个字节, 需要ACK
从机以此, 读到最后一个字节的时候, 务必要NACK
从机。
- 因为进行iic通信的时候, 想要进行数据交换的数据寄存器的地址是需要主机写入到设备的, 所以, 在读之前, 需要先执行设备地址(写)的操作, 然后再发送数据寄存器的地址给从机。 然后,执行设备地址(读)的操作, 再进行读的操作。
文章来源地址https://www.toymoban.com/news/detail-486600.html
文章来源:https://www.toymoban.com/news/detail-486600.html
到了这里,关于软件I2C通信的设计要点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!