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.

[参考译文] TMS320F280049:SCI 自动波特问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1469377/tms320f280049-sci-autobaud-issue

器件型号:TMS320F280049

工具/软件:

TMS320F280049上的 SCI 自动波特问题

您好、

我们在上的 SCI 自动波特率功能遇到问题 TMS320F280049 。 以下是我们用于配置 SCI 的代码:

SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ, 230400, 
              (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));

SCI_resetChannels(XXXXX_SCI_BASE);
SCI_clearInterruptStatus(XXXXX_SCI_BASE, SCI_INT_RXFF);
SCI_enableModule(XXXXX_SCI_BASE);
SCI_performSoftwareReset(XXXXX_SCI_BASE);

HWREG(XXXXX_SCI_BASE + SCI_O_FFRX) &= ~SCI_RXFF_RESET;
SCI_disableInterrupt(XXXXX_SCI_BASE, SCI_INT_RXFF);
SCI_enableFIFO(XXXXX_SCI_BASE);
SCI_setFIFOInterruptLevel(XXXXX_SCI_BASE, SCI_FIFO_TX16, SCI_FIFO_RX10);
SCI_enableInterrupt(XXXXX_SCI_BASE, SCI_INT_RXFF);

SCI_lockAutobaud(XXXXX_SCI_BASE);

uint16_t byteData = SCI_readCharBlockingFIFO(XXXXX_SCI_BASE);
SCI_writeCharBlockingFIFO(XXXXX_SCI_BASE, byteData);

Interrupt_register(XXXXX_INT_SCI_RX, sciRxISR);

问题描述:

问题是这样 SCI_lockAutobaud()效果不佳 。 如果失败、调用该函数后不会发出任何字符。

重要观察结果:

我们发现自动波特率可靠工作的两个特定条件:

  1. 已连接并运行时的示例。
  2. 当修改SCI_setConfig()为使用倍增 LSPCLK 频率时:
    SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ * 7, 230400, 
                  (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));
    
    • 有趣的是、乘法器、如*3、、*4*5等等、 也可以工作。

所采取的调试步骤:

  1. 已检查系统时钟:

    • 配置XCLKOUT为输出PLLSYSCLK
    • 与我们的系统时钟相同 100 MHz ,我们不断观察 12.5 MHz 与默认/8分频器匹配。
    • PWM 功能也可以在预期频率下正常运行。
  2. 自动波特率锁定前的已测试波特率:

    • 添加了要传输的代码 0xAA解决方案 SCI_lockAutobaud()
    • 无论SCI_setConfig()参数如何、波特率始终为 1.66Mbps
    • 例如、即使使用:
      SCI_setConfig(XXXXX_SCI_BASE, 25000000, 9600, 
                    (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));
      
      输出波特率保持不变 1.66Mbps
  3. 自动波特行为:

    • 使用时 LSPCLK 乘法器 测试设备固件 SCI_lockAutobaud()正常工作、数据按预期传输。 在看到波特率为1.66Mbps 的第二条消息后、我们将能够看到发送的波特率正确的第二条消息。

请求帮助:

我们尽力理解:

  • 为什么SCI_lockAutobaud()只在这些特定条件下工作?
  • 波特率卡住的原因 1.66Mbps 在自动波特率锁定之前、即使SCI_setConfig()在修改时也是如此?
  • 时钟配置或 SCI 内部时序可能会出现相关问题?

任何见解或建议都将非常感谢。 谢谢!

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

    "我是你的,我是你的,我不是你的,我不是你的。"

    SCI_setConfig ()函数的 lspclkHz 输入应该是实际的 LSPCLK 时钟值。 此外、SCI_setConfig ()函数在您使用 SCI_lockAutoBAUD ()函数后不应该实际相关:

    • SCI_setConfig ()
    • sci_lockAutobaud ()

    调试问题:

    • SCIHBAUD 和 SCILBAUD 寄存器的内容是什么  解决方案  自动波特率锁定? SCI_setConfig ()的调整是否在这些寄存器中正确显示?
    • 什么是  预期 最终波特率?

    此致、
    Jason Osborn

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

    SCIHBAUD = 0x0

    SCILBAUD = 0x5D

    这些是 SCIHBAUD 和 SCILBAUD 寄存器的值  解决方案  将以下参数传递给 SCI_setConfig 函数时的自动波特率锁定  

    SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ, 230400, 
                  (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));

    其中  

    DEVICE_LSPCLK_FREQ = 25MHz

     

    预期的最终波特率是  230400。

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

    嗯。 根据这些参数、SCILBAUD 的值应该为 0x0D。 对于230400的波特率、SCILBAUD=0x5D 要求 DEVICE_LSPCLK_FREQ 仅低于给定值的7倍。

    问题

    • 在 LSPCLK_FREQ 上使用乘法器时提供的值是否如上所述?
    • SCIHBAUD 和 SCILBAUD 寄存器的内容是什么  之后 是否完全自动波特率过程?

    此致、
    Jason Osborn

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

    1)你是正确的,我的坏。  SCILBAUD= 0x5D 在以下情况下发生

      SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ * 7, 230400, 
                  (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));

    and it is SCILBAUD=0x0C when

      SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ, 230400, 
                  (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));

    2) SCIHBAUD = 0x00 and SCILBAUD = 0x0C after the full autobaud process is successful. And this just happens when using
    DEVICE_LSPCLK_FREQ * 7 in th SCI_setConfig.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果结果为0x0C、自动波特率导致波特率为223214、这个波特率正好在预期目标之下、是正确的。 但是、你说自动波特在你原来的帖子中不起作用、我是否有误解?

    此致、
    Jason Osborn

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

    尊敬的 Jason:  

    正如我们在帖子中所说的、autobaud 是 只能正常工作 等于或等于两者之一  

    DEVICE_LSPCLK_FREQ * 7 in th SCI_setConfig



    调试器已连接并运行。


    为了澄清,在 SCI_setConfig ()中添加/删除乘数时,会更改 SCILBAUD 的值,当我们尝试在 SCI_setConfig ()之后发送消息时,没有什么区别。 消息的波特率始终为1.66Mbps、如示波器捕获所示。  

    只有当自动波特率工作时、才会校正"实数"波特率、这需要我们在 SCI_setConfig ()中放置一个乘数、并由示波器捕获确认。 如果没有乘数、自动波特率就好像没有看到任何消息、因此不会发出任何消息。  

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

    我看-所以当没有乘数, SCILBAUD 的值是正确的,但实际输出不正确-另外,自动波特不起作用。 好的、感谢您的澄清。

    我需要更多的时间来查看您提供的信息并返回给您。 同时、我想澄清我之前的一个问题、即自动波特率  失败 、SCILBAUD 和 SCIHBAUD 的内容是什么?

    此致、
    Jason Osborn

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

    自动波特函数没有超时、因此我们知道它失败的方式是因为它卡在自动波特函数中。 在无限循环中发送0x0A 的另一个微控制器也会卡在中  TMS320F280049 n 始终成功完成自动波特。

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

    Alberto、

    我以前误解过你,然后。 感谢您的澄清和耐心解释此问题。

    我将在内部进一步讨论这个问题、我看到的任何内容都不会导致这个问题。 这是非常奇怪的。 我有一些想法,但没有什么是相当有意义的,考虑到整个背景的问题。

    要阐明我当前的思维过程:

    • 第23.13.3节:器件 TRM 的自动波特检测序列有一条关于自动波特性能的说明:
      • 给定所需的230k 波特率、这是相关的。
      • 不过 ,如果这是问题,那么两个修正-调整 SCI_setConfig ()和简单地连接到 JTAG-不应该有任何影响-这就是我之前没有明确提到它的原因。

    • SCI_setConfig ()中 LSPCLK 值的调整不应影响自动波特率。 在 BAUD SCI_LOCKAutoBAUD()函数开始时、波特寄存器中的任何值都将被覆盖。 LSPCLK 值的调整产生了影响这一事实非常奇怪、这让我认为还有其他问题正在发生。

    • 值得指出的是、图4-5中描述了自动波特率过程。 器件 TRM 的 SCI 引导功能概述(旨在用于 SCI 引导、但也明确描述自动波特率用例)在使用自动波特率之前禁用 SCI FIFO 和中断。 由于这仅在 SCI 引导模式的上下文中提到、并且在某些情况下您可以成功执行自动波特率、因此这不太可能有意义、因此我之前没有提到它的原因。

    正如我所说的、我将继续在内部讨论这一问题、以尝试根据我们迄今为止的讨论确定根本原因。 如果您能提供任何其他信息、请告知我。 根据我们能够确定的内容、以下信息可能最终有用:

    • 本文档中提到的旧板与新板之间的任何相关硬件差异。 有关此主题的主题、例如接线差异、器件更改、引脚排列更改等
    • 正在使用哪个 SCI 外设(-A 或-B)
    • 是为每个 SCI 引脚分配什么 IO
    • JTAG 配置详细信息
    • 器件引导模式

    此致、
    Jason Osborn

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

    尊敬的 Jason:  

    很抱歉迟到了。 我们的软件工程师本周已下班、但我将回答我知道的问题。  

    问:您的预览中提到的旧板与新板之间的任何相关硬件差异。 有关此主题的主题、例如接线差异、器件更改、引脚排列更改等
    答:我们认为不存在任何重大的硬件差异、特别是与 SCI 相关的差异、这就是我们有点困惑的原因。 我们使用相同的外部振荡器、并且对 SCI 使用相同的引脚排列。 DSP 的主要变化是我们交换了一些 ADC 引脚周围、但我没有想到会影响 SCI。 布局确实改变了一位、但与之前一样、与另一个微控制器的 SCI 连接仅为2条布线、中间没有任何连接。  

    问:正在使用哪个 SCI 外设(-A 或-B)
    答:我不是很确定。

    问:为每个 SCI 引脚分配什么 IO
    答:我们将  GPIO22 VFBSW  用于 SCITX 和  GPIO13 SCIRX  

    问:JTAG 配置详细信息
    答:我不确定软件配置。 根据硬件、我们使用14引脚 JTAG、并采用 与数据表示例相同的设置。

    问: 器件引导模式
    答:我们有上拉电阻以及 GPIO 24和32、因此引导模式=闪存。  

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

    根据引脚选择、您使用的是 SCIB。

    请注意、IO22在数据表中具有以下引脚排列说明:

    如果 SCI 引脚与工作版本相比没有变化、这不太可能是根本原因、但绝对值得检查。

    感谢您提供的所有信息。 我仍在内部讨论、希望尽快与您联系、提出一个更可能的原因。

    此致、
    Jason Osborn

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

    您好 Jason、想跟进、看看您是否发现与此问题相关的任何问题?  

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

    尊敬的 Jason:  

    想检查是否有任何更新。

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

    "我知道,我不会介意的,我想要的只是要和你在一起。"

    根据提供的信息、我无法找到任何明显的根本原因、假设您还在检查我的调试建议、例如我上次发布的 GPIO22注释、则任何指示都不应该是导致这些问题的原因。

    我想跟进我提出的其他问题、然后再提出更多调试建议:

    1. 我在 prev 中提到的。 宣布在我们的自动波特率示例中禁用 FIFO 和 SCI 中断。 在您的案例中、是否已验证此情况属实?

    2. 我在 prev 中提到的。 然后可以尝试在较低速度下自动波特锁定并提高速度。 是否尝试过此操作?

    3. SCI 和 JTAG 信号旁边的信号引脚排列是否发生了变化? 如果是、从什么到什么?

    4. 您是否拥有此系统的多个单元? 如果是、请:
      1. 验证两台设备上是否存在问题
      2. 如果问题仅出现在一个器件上、请执行 A/B 交换测试、以确定问题是由 MCU 还是硬件引起

    5. 是 prev。 MCU 与新实施引脚对引脚兼容?  如果是、请使用旧的 HW +旧的 MCU 和新的 HW +新的 MCU 执行 A/B 交换测试。 理想情况下、这会告诉我们问题是由 MCU 还是硬件造成。

    6. 如果使用上述任一/两项测试可以验证问题是否是新 MCU、我的下一个调试 建议是:
      1. 设置未使用的 GPIO 以触发中断。 如果没有引脚可用、请使用 TDI 引脚、因为必须断开调试器才能使问题发生、因此该引脚在这种情况下可供使用。
      2. 为 SCI-配置第二个未使用的 GPIO A TX 以预设的波特率运行。 (我将在这里使用 GPIO37/TDO/SCIA_TX)
      3. 设置新中断以 写入 SCILBAUD、SCIHBAUD 和 SCIRXBUF 的值 B 再到输出引脚。
        1. 或者、如果您熟悉 DMA、可以使用输入引脚来触发 SCI-B 寄存器的 DMA 读取和 SCI-A Tx 缓冲区写入。
      4. 将系统运行至失败状态(即无法达到自动波特率锁定)
      5. 驱动输入引脚以触发中断并观察输出。
      6. 这将让您确定 SCILBAUD、SCIHBAUD 和 SCIRXBUF 寄存器在故障状态下的状态、尽管没有调试器。
      7. 报告这些寄存器的值、以及您认为任何其他 SCI 或 IO 寄存器可能会有所帮助。

    很抱歉、我无法确定此问题的来源。

    此致、
    Jason Osborn

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

    你(们)好  

    感谢您的答复。 很抱歉、我们的软件团队目前还没有带宽来帮助您检查其中的一些功能。 我们会尽快回复您。