This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F2618:澄清有关USI-B I2C模块,主接收器模式的问题

Guru**** 2608425 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/654987/msp430f2618-clarifying-question-about-usci-b-i2c-module-master-receiver-mode

部件号:MSP430F2618

您好,

我正在为我的项目编写一个自定义I2C驱动程序,并且我正在尝试确保我完全理解MSP430 I2C模块的每个部分。  有几份文件在某一点上让我感到困惑,因为它们似乎对某些操作的确切顺序给出了相互冲突的描述-或者至少足够模糊,我不确定它们的含义。

特别是,我想知道当MSP配置为主接收器时,I2C模块何时发送ACK。  据我所了解,通用RX事务如下所示:

(1)初始化(主中继器发送启动条件及从中继器地址,从中继器的地址等) ->(2)[从属]传输字节->(3)[主]将收到的字节从移位寄存器移动到UCBxRXBUF,软件读取UCBxXBUF,主中继器发送ACK,可能时钟一直在等待软件进入其中->(4)[从属]传输下一字节。

但是,我不确定步骤3中会发生什么。  根据MSP430系列用户指南(SLAU144J),在17.3 .4.2 2节和图17-13的文本中,其外观如下所示

(1)初始化->(2)[从属]传输字节->(3)[主]将UCBRXIFG设置为移位寄存器中的字节立即->(3.5)[主]将字节从移位寄存器移至RXBUF ->(4)[主]模块保持总线低电平,直到读取XBUF ->(5)[软件]读取RXBUF ->(RX6)[主中继器->) (7)[MASTER]发送ACK ->(8)[SLAVE]传输字节

步骤4的含义是:"如果未读取UCBxRXBUF,则在接收最后一个数据位期间,在读取UCBxRXBUF之前,主控制总线。"  然而,在同一案文中,它似乎也暗示,顺序如下:

(1)初始化->(2)[从属]传输字节->(3)[主]将UCBRXIFG设置为在移位寄存器中的字节立即->(3.5)[主]将字节从移位寄存器移动到XBUF ->(4)[主]发送ACK ->(5)[主]模块保持总线低,直到读取XBUF? ->(6)[从]传输字节->(7)[软件]读取RXBUF ->(8)[主] RXIFG重置

步骤3,3.5 和4的位置由以下文本表示:"从从属设备确认地址后,从从属设备接收并确认第一个数据字节,并且设置UCBxRXIFG标志。"  其余步骤的顺序是围绕该步骤排列的,如果3和4是它们所在的位置,则考虑它们必须是怎样的。  芯片的勘误表文档(SAZ188L)似乎也支持这种顺序,错误为USI-30,指出“一旦第一个字节从接收移位寄存器移到接收缓冲区,该字节即被确认,状态机允许接收下一个字节。”

当我尝试让我的驱动程序功能强大以捕获所有可能的使用中错误(它位于操作过程中无法轻松访问以纠正错误的系统中)时,我想知道具体顺序是什么,以便我确切知道我的时间限制是什么, 等等

谢谢!

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    一旦整个字节转换到RXBUF且设置了RXIFG,主中继器将立即发送ACK。 但是,如果尚未从UCBxRXBUF读取前一字节(RXIFG仍设置),则主中继器将保持总线,直到其得到适当处理,然后RXIFG变低,并接收到最后一位(然后再设置RXIFG)。

    (1)初始化->(2)[从机]传输字节->(3)[主机]将RXIFG立即设置在移位寄存器中的字节上,并将字节从移位寄存器移动到RXBUF ->(4)[主机]发送ACK ->(5)[从机]传输字节,而[软件]读取XBUF ->(7)[主机]保持接收最后一个数据位 [software]读取RXBUF以清除RXIFG ->(8)[MASTER]重复步骤3或发送nack,后跟停止位

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复,Ryan。  这正是我想要的!