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.

[参考译文] AM13E23019:有关 AM13E2x I2C driverlib 的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1631002/am13e23019-questions-about-am13e2x-i2c-driverlib

部件号: AM13E23019

在使用 am13e2x SDK 版本 01.00.00.eA2 中的 driverlib 模块处理 I2C 外设时、我们得到了有关以下方面的一些发现:

  • DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER
    此定义映射到不存在的  UNICOMMI2CC_DMA_TRIG1_IMASK_TXTRG_SET。 它似乎应该是 UNICOMMI2CC_DMA_TRIG 0 _IMASK_TXTRG_SET

  • DL_I2CC_enableDMAEvent
    此函数接受 DL_I2CC_EVENT_ROUTE DL_I2CC_DMA_INTERRUPT、我们发现这很难解析。
    这对我们来说不是一个错误或问题、而是我们花了一些时间来连接所有端点的反馈:
    在 SDK 中、路由被枚举为 1 和 2、并相应地固定为 DMA_TRIG1 和 DMA_TRIG0、而在 TRM 中、并未明确枚举这些路由。 同时、每个 DMA_TRIGx 都有自己的 IMASK 寄存器(在 TRM 说明中也未明确收紧)、该寄存器具有特定用途:TX 或 RX IRQ。
    对于 SW 开发人员、最好改进 TRM 中的命名(例如 route_tx、而不是 route_rx)或关系描述、并/或在 driverlib 中进行一些映射以简化工作

  • DL_I2CC_getRXFIFOCounter/DL_I2CC_getTXFIFOCounter
    1.这些函数应返回可从 FIFO 读取的字节数、但返回 SR_BCNT 的值、其作用似乎不同
    2.在 DL_I2CC_getRXFIFOCounter 中UNICOMMI2CC_SR_BCNT_OFS 不会移位该值

BR、
Oleksandr

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

    尊敬的 Oleksandr:

    DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER
    此定义映射到不存在的  UNICOMMI2CC_DMA_TRIG1_IMASK_TXTRG_SET。 它似乎应该是 UNICOMMI2CC_DMA_TRIG 0 _IMASK_TXTRG_SET

    3 月中旬发布的 SDK 中已修复此问题。 v26.00.00.06 版本具有参考引用  

    DL_I2CC_enableDMAEvent
    此函数接受 DL_I2CC_EVENT_ROUTE DL_I2CC_DMA_INTERRUPT、我们发现这很难解析。
    这对我们来说不是一个错误或问题、而是我们花了一些时间来连接所有端点的反馈:
    在 SDK 中、路由被枚举为 1 和 2、并相应地固定为 DMA_TRIG1 和 DMA_TRIG0、而在 TRM 中、并未明确枚举这些路由。 同时、每个 DMA_TRIGx 都有自己的 IMASK 寄存器(在 TRM 说明中也未明确收紧),该寄存器具有特定用途 — TX 或 RX IRQ。
    对于软件开发人员而言、改进命名(例如 route_tx、而不是 route_rx)或在 TRM/quote 中更容易进行映射和引用说明[/driverlib]

    我将与软件和生产应用程序团队分享此反馈。

    DL_I2CC_getRXFIFOCounter/DL_I2CC_getTXFIFOCounter
    1.这些函数应返回可从 FIFO 读取的字节数、但返回 SR_BCNT 的值、其作用似乎不同

    BCNT 实际上是可以从控制器中的 RxFIFO 或 TxFIFO 读取的最大数据、在开始事务之前、我们设置 BCNT 值来指示“此事务将最后针对的字节数“、因此在该设计中返回 BCNT 是有意义的。

    [quote userid=“687908" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1631002/am13e23019-questions-about-am13e2x-i2c-driverlib 在 DL_I2CC_getRXFIFOCounter 中UNICOMMI2CC_SR_BCNT_OFS[/quote]不会移位该值

    这看起来像是一个有效的错误、我已经在内部报告了这个错误、在下一个 SDK 版本(内部跟踪链接:jira.itg.ti.com/.../MSDK-1788)中应该小心这一点  

    此致、
    Shaunak

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

     感谢您发送编修。我们会重新检视您的建议。

    • 此问题已在 3 月中旬发布的 SDK 中得到修复。 v26.00.00.06 版本具有参考引用
    • 我可以找到的最新版本是  01.00.00.eA2、从 2 月 18 日开始。 也许您可以分享我们可以得到的参考资料、请吧?
    • 您所附加的屏幕截图仍会将 DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER 映射到 UNICOMMI2CC_DMA_TRIG1_IMASK_TXTRG_SET、这似乎是错误的。 从 TRM 中、我们预计会映射到 TRIG0、或者我们是否误读了 TRM?
    • 我将与软件和生产应用程序团队分享此反馈
    • 非常感谢!
    • BCNT 实际上是可以从控制器中的 RxFIFO 或 TxFIFO 读取的最大数据、在开始事务之前、我们将 BCNT 值设置为“此事务将持续的字节数“、因此在该设计中返回 BCNT
    是有意义的。
    • 好的、谢谢、我想我们 错过了 当传输长度> 1 时、SR .BCNT 由硬件更新的信息。
  • [报价 userid=“534155" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1631002/am13e23019-questions-about-am13e2x-i2c-driverlib/6288455

    这看起来像是一个有效的错误、我已经在内部报告了这个错误、在下一个 SDK 版本(内部跟踪链接:jira.itg.ti.com/.../MSDK-1788)中应该小心这一点  

    [/报价]
    • 您对如何继续处理当前主题有何建议(例如,在您的内部 TT 解决之前保持其打开状态)?

BR、
Oleksandr

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

    关于  BCNT 的另一个问题:

    它最多保存 0xFFF 字节、在我看来、表示 传输的总长度、可能高于最大 FIFO 大小(16 字节)。

    因此、如果 我们要发送一条 20 字节长的消息、首先、TX 将填充 16 字节的数据、而 BCNT 将加载 20、这与实际的 FIFO 级别不对应

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

    尊敬的 Oleksandr:

    您可以在以下网址找到最新的 SDK: https://www.ti.com/tool/download/AM13E2X-SDK

    更新了产品页面: https://www.ti.com/product/AM13E23019

    将来、所有最新的 SDK 和 TRM 都将直接上传到产品页面和 SDK 页面

    关于 I2C 错误、我将使该线程保持打开状态、直到错误得到修复并且我可以提供补丁。

    此外、我检查了驱动程序、I2C DMA 集成尚未完成。 我现在看到的设计是 I2CT(目标)映射到 DMA_TRIG0、I2CC(控制器)映射到 DMA_TRG1。 如果在集成 DMA 支持时出现问题、则此设计可能会发生变化、目前的范围为 26.01 版本(6 月中旬)。

    此外、关于 BCNT 的问题:

    BCNT 将加载 20 个字节、仅在处理 20 个字节时才会发出停止条件。 一旦数据加载到 FIFO 中、计数将从 BCNT 减少、因此在 FIFO 填充 16 个字节后、 BCNT 将变为 4、依此类推、一旦填充 4 个字节、BCNT 将变为 0、并触发停止。

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

    你好 Shaunak!

    IRQ 触发的详细信息。 我们遵循了 TRM 中的下一个逻辑(在我们的驱动程序实现中有效):

    第二个发布者 (DL_I2CC_EVENT_ROUTE_1) 连接到 TRIG 1、第三个 (DL_I2CC_EVENT_ROUTE_2) 连接到 TRIG0:

    来自 TRM 表 25-20。 “UNICOMMI2CT_REGS 寄存器“我们看到中断相关寄存器有 3 组、我们预计第 2 组对应于 TRIG1、第 3 组对应于 TRIG0:

    第 3 组(偏移量 88h)对应于 TXTRG 标志:

    由此我们得出结论:

    TX 触发信号<-> TRIG0  <->第 3 个发布者 <-> DL_I2CC_EVENT_ROUTE_2

    RX 触发条件<-> TRIG1  <->第二个发布者 <-> DL_I2CC_EVENT_ROUTE_1

    *这种配置 在我们的测试中起作用

     

    此外、在 SDK v26.00.00.06 中、我看到 DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER/DL_I2CC_DMA_INTERRUPT_RXFIFO_TRIGGER 与 01.00.00.EA2 中的相同:

    1. 映射到 UNICOMMI2CC_DMA_TRIG1_IMASK_TXTRG_SET 的 DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER 、而 UNICOMMI2CC_DMA_TRIG1_IMASK_TXTRG_SET 不存在

     DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER 和 DL_I2CC_DMA_INTERRUPT_RXFIFO_TRIGGER 映射到相同的 TRIG1、根据 TRM、这似乎是无法实现的。

    我不确定您提到的设计是否可行、因为 RX 和 TX 必须具有单独的路由来触发单独的 DMA 通道、因此它们不能同时连接到一个 TRIG、或者我是否误解了该架构?

    ----------------------------------------------------------------------------------------

    关于 BCNT:

    是的、没错。 这意味着 BCNT 不包含“可从 RX FIFO 读取的字节数“/"可“可放入 TX FIFO 的字节数“、作为函数 DL_I2CC_getRXFIFOCounter/DL_I2CC_getTXFIFOCounter 的 SDK 文档。 对我来说、这听起来这些函数的行为与它们应该的行为不同。 同时、我看不到任何可能的 BCNT 替代产品(例如,MSPM0G 有用于此目的的单独 FIFO 状态寄存器)。

    目前、这不是我们的阻止程序、但我们希望您澄清这些函数的行为、并在无法实现功能时改进文档/删除它们

    BR、
    Oleksandr

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

    尊敬的 Oleksandr:

    是的、我同意关于 DL_I2CC_DMA_INTERRUPT_TXFIFO_TRIGGER 的注释。 它已重新映射到 内部 SDK 中的 UNICOMMI2CC_DMA_TRIG0_IMASK_TXTRG_SET、发布的最后一个公共 SDK 包含此错误。

    您的分析是正确的。

    关于 BCNT、与 MSPM0 不同、我们没有 FIFO 状态寄存器来提供 Tx/FIFO 中数据的确切计数 Rx、只需检查 FIFO/FIFO 中是否有数据为空。 一种变通方法是从配置为事务计数的已知值中减去 BCNT 返回的值。 例如、在这种情况下、如果配置了 20B、在传输的 16B 之后、您读回的 BCNT 为 4B、然后将计算处理为“20-4"以“以获取 FIFO 计数。 这有点古怪、但由于缺少像 MSPM0 这样的寄存器、这是一种实现 FIFO 读取函数的方法。 我同意该函数中的注释需要修改。

    让我与 SDK 分享这个反馈、以便重命名/删除/修改 API。

    此致、
    Shaunak

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

    谢谢你、Shaunak!

    我们将等待有关您修复的更新。

    BR、
    Oleksandr