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.

[参考译文] TMS320F28388D:FSITX 寄存器 TX_FRAME_CTRL.START 的操作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1626031/tms320f28388d-operation-of-fsitx-register-tx_frame_ctrl-start

器件型号: TMS320F28388D

您好:

我正在尝试了解 TX_FRAME_CTRL.START 寄存器随时间变化的行为。

根据 TRM:

在第 32.4.2.3.1 节“软件触发帧“中、:

“将 TX_FRAME_CTRL.START 设置为 1 可以启动数据帧的传输。 [...]帧传输开始后、TX_FRAME_CTRL.START 将由硬件清除。“

在表 32-54 中。 TX_FRAME_CTRL 寄存器字段说明

'开始下一次传输。 此位将由硬件清除。“

我试图理解的是多快,在什么情况下,如果有,这个位被清除的硬件:

  1. 它是否在固定数量(一个或多个)的时钟周期后无条件清除?
  2. 在任何情况下、读回它可能会得到值 1 吗?
  3. 如果用 1 读回该数据、是否意味着帧传输处于挂起状态、但尚未开始?

此致、

Pierre

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

    您好、Pierre、

    开始位是 事件驱动、而非周期计数驱动 。 当帧传输实际开始时(而不是在固定数量的时钟周期之后)、由硬件清除该位。

    1.它在固定数量的时钟周期后是否无条件清零?

    编号 TRM 明确指出、该位“一旦帧传输开始“就会被清除。 这意味着清除取决于 FSI 模块实际启动帧传输 — 它与内部状态机事件相关联,而不是预定的周期计数。 实际时序取决于您的 FSI 时钟配置和模块的就绪状态。

    2.是否有回读可能产生值 1 的情况?

    是的。 如果在设置该位后快速轮询该位、则可以在硬件将其清除之前将其观察为“1"。“。 在写入和实际传输开始之间有一个窗口、位保持设置状态。 此外、在某些故障或错误恢复场景中、该位可能会保留其值、需要手动干预。 (请参阅 e2e.ti.com/.../tms320f28388d-fsi-error-recovery-and-soft-reset)  

    3、如果读回为 1、是否表示传输挂起、但未启动?

    完全正确。 读回“1"表示“表示传输请求处于挂起状态、但 FSI 模块尚未开始帧传输。 传输实际开始后、该位将自动清除。


    若要确认传输完成(而不仅仅是启动)、请轮询 TX_EVT_STS.FRAME_DONE 标记。 这样您就可以明确确认帧已完全传输。

    如果您使用的是时序敏感型运算(尤其是缓冲区指针复位或 DMA 触发的传输)、请注意开始位清除和传输启动具有严格的时序依赖性。 例如、FSI_setTxBufferPtr()在主循环中调用与 ISR 会因这些时序关系而导致数据不对齐(请参阅 e2e.ti.com/.../tms320f28388d-fsi-tx-and-rx-buffer-read-issue)  

    此致、

    Zackary Fleenor

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

    Zackary、

    我有几个后续问题:

    • 请让我指出您的报价的位置“一旦帧传输开始“、因为我在 TRM 中找不到它。
    • 我不理解您关于“开始位清除和传输启动具有严格的时序依赖性“的观点。 这句话意味着什么? 它与更改发送缓冲区指针有什么关系?
    • 我想知道的是在写入到开始、线路上的实际帧发送开始(前同步码)和硬件清除启动之间需要多少个时钟周期。 您提到了内部状态机事件。 这是什么事件? 延迟的可能原因是什么? 我试图了解序列的确定性。

    Pierre

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将努力查看我们的团队是否能够以周期为单位确认确切的状态机事件和最坏情况下的延迟、这将是最终的答案—这似乎是一个值得提高的差距。

    这是你的答案中对我很有趣的部分。 我将等待有关此内容的更新。  

    我真的不喜欢您的其余回答、我必须坦率地说:这类似于 LLM 生成的输出、而不是知道 FSI 模块内部时序规格的人的答案。 在这种情况下、TI 不接受“文档确实存在缺口“等表述。 你是记录它的人。  真正的答案是“我们在典型条件 X、Y、Z 下测量了 N 个周期“、这比我在 TRM 和 E2E 支持论坛中已经提供的信息摘要要有用得多。

    Pierre

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

    嗨、Pierre、

    您认为这是 LLM 协助的回答是正确的。 我提交了内部工单来获取有关状态机时序因素的这些详细信息、从而填补空白。

    此致、

    Zackary Fleenor

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

    您好 Zackary、

    您是否有关于帧传输开始的时间范围的新闻?

    此致、

    Pierre

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

    您好、Pierre、

    我很抱歉、这需要很长时间才能回到您的身边。 我已在内部上报此问题、以便从我们的设计团队获得一些反馈。 我希望在一周结束前得到答复。

    此致、

    Zackary Fleenor

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

    您好、Pierre、

    我想接触一下基座、让您知道我仍在等待设计团队的回复。 我没有忘记你,并将在今天再次与他们跟进,看看我是否能得到一个更新在一周结束前.

    我很抱歉等待时间过长—我想确保我返回的答案是明确的、而不是推测性的、这就是为什么我把这个问题推给了离硅设计最近的人。

    此致、

    Zackary Fleenor

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

    您好、Pierre、

    我已经从设计团队那里听到、现在可以提供更完整的答案。 很抱歉耽误你的时间。

    清除 TX_FRAME_CTRL.START 的硬件事件是什么?

    当发送器内核的仲裁块接受传输请求并且串行器开始驱动帧时、START 位由硬件清零。 具体而言、一旦发送器内核状态机接受传输(对应于线路上前导码序列的开始)、就会清除 START 位。

    时钟域关系和同步会受到什么影响?

    这是解释您所询问的非确定性的关键点。 FSI 发送器有两个不同的时钟域:

    CPU 寄存器接口、该接口依靠 SYSCLK 运行
    发送器内核依靠 TXCLKIN(通过预分频器从 PLLRAWCLK 获得)运行
    这两个域是彼此异步的。 当从 CPU 写入 start=1 时、该写入发生在 SYSCLK 域中。 在 TXCLKIN 域中运行的发送器内核必须先同步该请求、然后才能对其执行操作。 这种时钟域交叉会引入同步延迟、该延迟受 SYSCLK 和 TXCLKIN 之间关系的限制。

    生成 TXCLKIN 的预分频器将 PLLRAWCLK 除以一个可配置值 (TX_CLK_CTRL 中的 PRESCALE_VALUE)、然后在 FSI 模式下将 TXCLK(实际输出时钟)作为 TXCLK/2。 记录的约束条件是 TXCLK 不得超过 SYSCLK/2。

    鉴于此、从开始写入到发送器内核识别请求的最坏情况下的同步延迟约为 2 个 TXCLKIN 周期、这是从更快域过渡到更慢域的两级同步器的典型情况。 在配置的 TXCLK 频率下、可以计算相应的挂钟时间。

    同步后会发生什么情况—前导码何时开始?

    一旦发送器内核识别到启动请求、帧结构如下所示:

    4 个前导码时钟边沿在帧起始 (SOF) 模式之前驱动
    后跟 SOF 模式 (1001)、帧类型、用户数据、数据字、CRC 和 EOF
    随后会产生 4 个帧后时钟边沿
    当发送器内核开始该序列(即在前导码开始时)时、START 位被清除。 因此、从 CPU 写入到行上出现的第一个前导码时钟边沿的总延迟为:

    同步延迟(≈2 个 TXCLKIN 周期)+到下一个 TXCLKIN 边沿的任何剩余时间

    这意味着延迟是有界的但不是固定的、范围大约为 1 到 3 个 TXCLKIN 周期、具体取决于 SYSCLK 域写入在 TXCLKIN 周期中的位置。

    直接回答您的三个原始问题:

    • 在固定数量的时钟周期后、START 位不会清零。 它由 TXCLKIN 域中的状态机事件清除 — 特别是在发送器内核开始驱动前导码时。 该时序在写入后 1–3 个 TXCLKIN 周期的窗口内是确定性的。
    • 是的、如果在同步窗口内轮询、则读回从 1 开始完全正常。 在正常运行时、这种观察结果没有病态。
    • 是 — 读回 1 表示请求已在 SYSCLK 域中注册、但尚未同步到 TXCLKIN 域状态机并由其处理。


    实际影响:

    由于延迟很小、但不为零并受 TXCLKIN 周期的限制、因此不要依赖轮询开始作为传输开始的指示器。 继续使用 TX_EVT_STS.FRAME_DONE(或其中断)来确认完整帧发送。 如果您需要确认传输实际上已经在行上开始、而不是刚刚完成、则前导码结构意味着在任何数据位出现之前、您至少有 4 个 TXCLK 前导码周期 — 这为时间敏感型操作提供了很小但实际的裕度。

    我希望这能为您提供所需的详细信息。 如果您有任何其他问题、敬请告知。

    此致、

    Zackary Fleenor