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.

[参考译文] TMS320F280025C:在 F28002x Launchpad 上使用20MHz 晶体时 SCI 波特率出现巨大错误

Guru**** 2440970 points
Other Parts Discussed in Thread: TMS320F280025C, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1012967/tms320f280025c-huge-errors-in-sci-baud-rates-with-20-mhz-crystal-on-f28002x-launchpad

器件型号:TMS320F280025C
主题中讨论的其他器件: C2000WARE

我想将 TMS320F280025C 与单板计算机通信、该计算机允许标准和高波特率、包括:1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600。我已经使用20MHz 外部晶体和100MHz 系统时钟在 TMS320F280025C 上进行了可实现的波特率计算。 在尝试实现 115200 或更高波特率时、计算结果显示出较高的百分比误差:

波特率 LSPCLK (MHz) 计算出的 BRR 实际波特率 %ERROR
1200 100 10418 1200 0
2400 100 5209. 2399 0.041667
4800人 100 2604. 4798 0.041667
9600 100 1302. 9593. 0.072917.
19200 100 651. 19172. 0.145833
38400 100 326 38226 0.453125
57600 100 217. 57339 0.453125
115200 100 109. 113636 1.357639
230400 100 54 227273 1.357205
460800 100 27. 446429 3.118707
921600 100 14. 833333 9.577582

以下公式用于计算 BRR 和实际波特率:

BRR = LSPCLK /(SCI 异步波特* 8)- 1
实际波特率= SCI 异步波特率= LSPCLK /((BRR + 1)*8)

我期待一些专家意见和可能的解决方案、以在不影响主 CPU 时钟(即100MHz)的情况下实现低误差的高波特率。

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

    您好、Asad、

    感谢您的提问! 关于这一点、您注意到、波特率越高、由于波特频谱高端的 BRR 粒度越小、误差就越大。

    目前、如果 SYSCLK 必须锁定到100MHz、则只有2个可修改变量:BRR 和 LSPCLK。

    因此、如果可能、我建议修改 LSPCLK、以便在您所需的波特率下实现低百分比误差。

    例如、SYSCLK 为100、LSPCLK 为100 (分频器=/1)、BRR 为26时、可实现约462963的波特率。 与所需460800波特率(可能可以接受)相比、这大约是0.47%的折扣。

    另请注意、与任何缺少时钟线的高速通信一样、通信两侧的振荡器容差变得重要、并在误差中发挥作用。 此外、必须遵循出色的噪声隔离(通信线路的噪声隔离)和高质量电路板布局布线、以防止会导致高误差率的偏差。

    此致、

    Vince

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

    尊敬的 Vince:
       非常感谢您提供了有用的技术指导。 同时、我们还将考虑 SPI 选项。 你在这方面的专家意见将是有益的。 我知道、我们可以使用具有 DMA 控制器的 SPI 在单板计算机(Jetson Nano)和 TMS320F280025C 之间进行直接通信。 这种方法的预期结果是:
    1-主 CPU 带宽可用于其它任务。 除了在可用时间更新数据外、主 CPU 应该最少或者无需交互。
    2-由于同步时钟和相对较低的通信延迟而产生的最小通信错误。
    请告诉我上述理解是否正确。 另外、请告诉我、除了技术参考手册 之外、是否还有任何相关文献可以帮助我了解 DMA 和 SPI 集成。 目前、我将深入了解 C2000Ware 库中的示例 SPI 项目。

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

    您好、Asad、

    很高兴我能在 SCI 方面提供帮助! 我已联系我们的 SPI 专家、提供有关 SPI 入门的一些指导、尤其是有关示例、中断和 DMA 访问的指导。

    此致、

    Vince

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

    阿萨德

    您应该能够使用具有 DMA 的 SPI 来实现最小的 CPU 干预。 请查看以下 C2000Ware 示例

    路径      :        driverlib\f28002x\examples\SPI

    示例:  SPI_ex4_loopback_DMA

    此致、

    曼诺伊

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

    非常感谢您的反馈和示例推荐。 该示例是基本设置的良好参考。 在我们的应用中、信息交换将具有可变长度、并且来自不同的存储器位置。 我知道、这需要一些协议来实现基本 SPI 通信。 此协议可以包含指定 读取/写入、起始地址、长度等的字段 这意味着每次主 CPU 都需要配置 DMA 来执行所需的传输。 因此、初始中断可能需要由主 CPU 处理、然后由 DMA 执行后续传输。 是否有更好的方法来实现此目的? 您能否将任何开放源码协议用作设计指南?

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

    阿萨德

    很遗憾、我没有具体的示例可以分享您提到的用例。 DMA 有6个通道、如果您有不同的存储器位置和可变长度、则可以考虑使用这6个通道中的每一个通道、以使您受益。 但是、如果您更喜欢使用一个 DMA 通道、则需要使用 CPU 来更改 DMA 配置。 没有其他选项。

    此致、

    曼诺伊

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

    请告诉我以下理解是否正确:使用 TMS320F28002x 作为 SPI 从器件、我可以为不同的存储器位置配置多个 DMA 通道。 接收到来自主机的 SPI 命令后、CPU 需要处理 FIFO 中断、以检查和触发相应的 DMA 通道、以便读取/写入相关的存储器位置。 来自 CPU 的这个初始中断处理是不可避免的?

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

    阿萨德

    是的、需要使用 SPI FIFO RX 中断来了解接收到的命令、然后对命令进行解码以触发适当的 DMA 通道。 此部件不可避免。

    此致、

    曼诺伊