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.

[参考译文] TMS320F280039C:实际 SCI 波特率与预期波特率明显不同

Guru**** 2803975 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1604317/tms320f280039c-actual-sci-baud-rate-is-significantly-different-from-expected-baud-rate

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

我正在使用 LaunchPad 上可用的 SCI 模块。
我设置了特定的波特率、并通过 LaunchPad 上的 SCI-TX 引脚发送数据、以便在逻辑分析仪中查看该数据。
我看到预期波特率与实际波特率有很大不同。

例如、假设我已将波特率设置为 9600 (SCIHBAUD 和 SCILBAUD 分别设置为 0x5 和 0x15)、SYSCLK 设置为 100MHz、LSPCLK 设置为 SYSCLK/1、从而使其为 100MHz、每帧字符长度为 8 位。

波形如下所示:(此处显示了标题's')
image.png
第一个位是起始位 (0)、后跟从 LSB 首先发送到 MSB 的位形式 (01010011) 的“S",“,然后、然后是停止位 (1)。 未设置奇偶校验位。

一位的宽度决定了波特率、如上所示为 115us、当转换为波特率时、波特率变为 8695、而不是 9601(9%误差)。  

当我使用该实际波特率 (8695) 转换回 SCI 模块中使用的 LSPCLK (8695 =(LSPCLK)/(BRR+1)/8、BRR 为 1301) LSPCLK 作为 90.5671MHz 输出、而不是 100MHz 集。

我知道实际 SCI 波特率不会与预期波特率完全相同、但这种大误差不符合预期。
即使 F28003x 的 TRM 规定、对于处于 100MHz 的 LSPCLK、如果波特率设置为 9600、预期波特率也是 9601、误差为 0.01%、如下所示:
image.png
我也检查了其他波特率的相同值、其中每个波特率的误差都明显大于预期。

我开始想知道 LSPCLK 本身是否有问题、LSPCLK 本身是 SCI 模块用于发送数据的 CLK 源。 遗憾的是、我没有看到在 TRM 中查看其波形的方法(有一种方法可将 GPIO 用于其他时钟信号、例如 PLL 信号、但不能用于 LSPCLK)。  

请告诉我您的看法、因为在其他地方(如 PuTTY)接收此数据时、设置正确的波特率变得非常困难、因为差异很大。

谢谢。此致、
Sumukh.

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

    嗨、Sumukh、

    您能否验证逻辑分析仪的采样率是否设置为最高采样率、从而消除与采样带宽相关的任何问题。  

    有一个 XCLKOUT 可用于验证器件上的时钟频率。 如果配置了 INTOSC、则与外部晶体相比、其性能可能会有所下降、因此最好确保使用 XTAL 实现超高精度。 您是否使用我们的 DriverLib 来设置 BAUDRATE? 这将尝试根据您的输入分配最接近的波特率、我想看看这是否可以改善您的误差。 您可以参考我们的 C2000WARE SCI 示例

    此致、

    彼得

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

    您好、Peter:
    更改为 XTAL 后、波特率会按预期出现:

    采样率为 4ms /秒、波特率为 9600、所以我相信这样可以。

    由于 INTOSC 似乎可提供被降级的时钟、因此是否始终建议将 XTAL 用于 SCI?
    这应该是我想的一般性建议、因为我不知道它是否失败、因为 INTOSC 从未用于实现 SCI 或 INTOSC 性能会随着时间的推移而降低、并且不会在预期的速率下工作。

    谢谢
    Sumukh.

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

    嗨、Sumukh、

    在大多数情况下、SCI 的 INTOSC 应足够、尤其是在 9600 波特下、因为它相对较慢。 它还取决于您的器件版本、因为旧版本可能没有足够的测试/修整来更大限度地提高 INTOSC 性能。 如果您使用的是较早版本的电路板、这可能是原因。 也可能是您使用的代码需要 XTAL(如在 device.h 中所示)、但如果您没有在 main.c 中配置 XTAL、则会发生冲突

    此致、

    彼得