Edit online

关键流程设计

初始化流程

I2C 模块驱动的初始化流程如下:

../images/design_1.png

传输流程

在 master 驱动中,数据的传输由 xfer 发起,可以完成多个 msg 的传输。传输流程如下:

../../images/design_21.png

I2C 模块总线信号

在 C 总线的数据传输过程,由 start/restart/stop 作为总线的控制信号。了解 C 模块中 start/restart/stop 信号的生成方式,有助于了解驱动的源码实现。
  • master transmitter

    ../../images/design_31.png

    对图中 3 个关键点的解释:

    1. I2C 作为 transmitter 时,当向 TXFIFO 中写入数据时,I2C 模块会自动发出 start 信号

    2. 若 stop 位未置位,则当 TXFIFO 中的数据全部发送,TXFIFO 为空时,会保持 SCL 为低电平,直到再次向 TXFIFO 中写入数据

    3. 再次向 TXFIFO 写入数据时,将 stop 位置 1,则在完成该字节的发送后,master 会自动发送 stop 信号

  • master receiver

    ../../images/design_41.png

    对图中 3 个关键点的解释:

    1. I2C 作为 receiver 时,当向 TXFIFO 写入读命令(即向 CMD 写入读命令)时,I2C 模块会自动发送 start 信号

    2. 当接收到 slave 端发送的数据后,只有再次发送一次读命令,才会对本次收到的数据恢复 ACK 确认信号

    3. master 在接收到最后一个数据后,回复 NACK,slave 端才会结束数据的传送。在发送最后一个读命令时,同时将 stop 位置位,则 master 在接收到 slave 发送的数据后,I2C 模块会自动发送 NACK 信号

注:

I2C 模块的数据传输,无论是 transmitter 还是 receiver,都会用到 TXFIFO,transmitter 时用来发送数据,receiver 时用来发送命令。所以,中断处理中,触发 EMPTY 中断的,可能是 msg,也可能是 write msg

中断流程

../../images/design_51.png