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.

[参考译文] TMS320F28377S:I2C FIFO 容量

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/789965/tms320f28377s-i2c-fifo-capacity

器件型号:TMS320F28377S

在启用 FIFO 的非重复模式下使用模块时、可以将多少字节放入 I2CDXR 寄存器或从 I2CDRR 读取数据是否有限制?

从技术参考手册中可以看到 FIFO 为16字节长、但我问这个问题是因为驱动程序库的 I2C_putData ()和 I2C_getData ()函数只向外推/从 I2CDXR/I2CDRR 寄存器接收一个字节。 这些函数不会将发送的字节数置为有效或进行检查。

在 FIFO 模式下、是否由软件确保一次发送/接收最多16个字节?  

在 FIFO 模式下发送或接收超过16个字节时、预期情况是什么? 在我的驱动程序实现中、我不使用 FIFO 中断。 我只启用了 ARDY 和 SCD 通用中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在任何给定的点、您可以填充 TX FIFO 的最大字节数为16。 启用 FIFO 时,使用 I2C_putData()将开始填充 TX FIFO,并使用 I2C_getData()刷新 RX FIFO。

    是的、在 FIFO 模式下、软件应确保一次发送/接收最多16个字节。 如果您希望持续传输的数据深度超过 I2C TX FIFO 深度、请继续使用 DMA 填充 TX FIFO 缓冲区。

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

    感谢您的回复。

    如果软件不考虑16字节长的 FIFO、我也对硬件的行为很好奇。 软件不能将 FIFO 中断级别设置为16字节以上、但是 I2CCNT 寄存器用于指示要传输或接收的数据字节数量、可达到最大值65535。 我不希望该寄存器出现如此高的计数、但如果在 I2CCNT 上设置了一个非常高的值、那么该模块将如何工作?

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

    如果使用 FIFO 模式并且将 I2CCNT 设置为大于16、则必须重新填充 FIFO 缓冲区以发送所有需要的字节。 我相信 SCL (和 SDA、我认为...) 在 FIFO 缓冲区被重新填满时将保持低电平。

    在没有 FIFO 的情况下也可以使用 I2CCNT、其中缓冲区大小不是影响因素。

    最棒的
    Kevin