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.

[参考译文] TMS570LS3137:使用 MCU 内部 I2C 和 MibADC1模块时出现问题

Guru**** 2538955 points
Other Parts Discussed in Thread: TCA6424A, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/972195/tms570ls3137-problem-when-using-the-mcu-internal-i2c-and-the-mibadc1-modules

器件型号:TMS570LS3137
主题中讨论的其他器件:TCA6424A

大家好、

在我们的设计中、我们使用 TMS570LS3137 MCU 的内部 I2C 和 MibADC1模块。 根据设计、它们完全独立、这意味着器件信号不会在这两个模块之间交叉连接。 I2C 模块配置为与 400kHz 器 件(经 SCLK 验证)一起工作、即 TI I/O 扩展器 P/N TCA6424A、而 MibADC1模块配置为采集12个模拟通道、每个通道的采样时间为2us。

在启用 MibADC1之前、24位 I2C I/O 扩展器配置有2个输入端口和1个输出端口。 读回的配置寄存器值确认配置正确、预定义的输入端口状态也正确读回。 现在、由于 I2C 不运行、MibADC1被启动并且每50ms 正确地批量获取所有通道值。

MibADC1采集机制没有软件干预、配置如下:

  1. RTI 比较事件2以启动 MibADC1硬件采样序列(每50ms 一次)
  2. 完成采样(12x2us=24us)后、会触发预编程的 DMA、并将通道数据传输到软件 RAM
  3. 当 DMA 传输完成时、会调用软件 IRQ 以将通道二进制数据转换为模拟数据

但是、从指令 I2C 模块读取或写入的那一刻起(也是每50ms 一次)、所有 MibADC1通道的读数现在都包含完全相同但错误的24位二进制值、 这个值不会改变,即使只有一个位也不会改变,直到 I2C 总线出现问题(总线忙= 1并且不能释放主控模式= 1…… 我们还不知道原因)、通常在一到两秒内、MibADC1以正确的通道电压重新启动正常运行(I2C 总线从此时将不起作用)。

有人可以告诉我在哪里可以看到吗?

谢谢。

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

    你好、Chuck、

    I2C 模块和 ADC 模块是两个独立的模块。

    RTI 比较事件是否也用于 I2C 读取/写入? 错误的 ADC 数据是否与 I2C 数据(R 或 W)相关? 您能否共享用于 ADC 读取和 I2C 读取/写入的代码?

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

    QJ 的美好一天

    我已经为您提供了 PM 源文件。

    非常感谢你能抽出时间。

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

    您好 QJ、

    嗯、我发现了 I2C 模块和 MibADC1模块之间的双重性问题、在上面的第一个帖子中提供了它们的设置详细信息。

    由于我使用 DMA 将数据从 MibADC1组2 FIFO 缓冲器传输到 SW RAM、而两个模块都独立于 MCU 内部的另一个模块、因此我认为说它们在软件立场上的操作是独立的是不正确的、 出于这个原因、I2C 发送 DMA 源 与 MibADC1组2 DMA 源共享同一个请求线路、在这个情况下、MibADC1组2 DMA 源是 DMAREQ[11]。

    因此、当 I2C 正常工作时、MibADC1G2的运行会降低、因为后者也被编程为使用 DMAREQ[11]。 在 I2C 停止正常运行后、MibADC1G2恢复使用寿命。

    话虽如此、我的几个工作日生产率 损失是由于我无法猜测 I2CDMACR.TXDMAEN 和 I2CDMACR.RXDMAEN 在 TMS570LS3137 MCU 上默认为1 (启用)(TRM spnu499c 的第1603页)。

    这是怎么可能的?

    您能否解释一下此默认设置背后的逻辑、但没有明确说明?

    是否有其他模块的 DMA 默认为 on?

    或者、我可能错过了比这更重要的东西?

    此致。

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

    QJ、  

    为了供您参考、I2C 读取/写入没有在软件中编程为完全使用 RTI。

    谢谢。

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

    你好、Chuck、

    感谢您找到并分享这一重要信息。 很棒的侦探工作! 希望没有其他这样的例子!

    Joe

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

    你好、Chuck、

    是的、I2C DMA 发送/接收事件默认启用。 大多数模块(SCI、SPI 等)中的 DMA 默认处于禁用状态。

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

    您好 QJ、

    设计团队是否有理由说明为何这两个事件启用了 DMA?

    即使启用、用户仍需要配置相应的 DMA 通道才能使其正常工作、我在任何地方都看不到这一要求。  

    谢谢。