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:SCI 响应下降停止位

Guru**** 2979400 points

Other Parts Discussed in Thread: TMS320F28388D, SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655580/tms320f28388d-sci-response-drops-stop-bit

器件型号: TMS320F28388D
Thread 中讨论的其他器件: SysConfig、 C2000WARE

我推出了一个具有 TMS320F28388D 器件的电路板、它使用 FTDI 芯片与 SCIA(引脚 GPIO8 和 GPIO9)通信。  以下代码支持读取字符并将其发送回终端 (9600 波特、8、N、1)。

image.png

当我发送一系列单个字符(例如“k“)时、返回在大约 30%的时间内损坏(见下文)。

image.png

我从 TMS320F28388D 监控了 GPIO9/19、并注意到停止位正在下降、从而导致该问题。  否则、信号是干净的、并且具有正确的时序和振幅。  它只是导致损坏的停止位。

我曾谘询该论坛、并获建议增加以下内容:

while (SCI_isTransmitterBusy (SCIA_BASE)));  
 
然而、这并没有改变结果。  如有任何其他建议、将非常感谢。
 
 

 

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

    尊敬的 Kent:

    您配置了哪个 LSPCLK 频率? 9600 波特率和 LSPCLK 组合可能会存在一些相关的错误。

    另外、在错误情况下、如果您观察 CCS 中的 receivedChar 变量、您是否看到正确读入了接收到的字符?

    此致、

    Delaney

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

    以下是如何配置 SCI 模块:

    我正在使用 DEVICE_LSPCLK_FREQ 配置 SCI 模块。   

    当器件正常工作时、“receivedChar“返回正确的 ASCII 十六进制值。  当它失败时、它是不正确的。  例如、我发送了“A“、收到了 0x41。  但是、当失败时、它返回 0xC2。  同样、如果我发送“B“、当它正常工作时会得到 0x42、但当它损坏时会得到 0xC3。  我也观察到了其他波特率下的相同行为。

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

    尊敬的 Kent:

    我看到、问题确实发生在 RX 侧。 存在问题时是否设置了任何 SCIRXST 寄存器标志? (您能否在打开 Continuous refresh 的情况下在 CCS 中打开寄存器视图并查看寄存器设置为什么?)。  

    此致、

    Delaney

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

    Delaney、

    当“A“的寄存器不存在问题时、报告以下内容:

    问题出现时、寄存器会报告(我再次键入“A“):

    谢谢、

    Kent

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

    尊敬的 Kent:

    我认为默认 DEVICE_LSPCLK_FREQ 为 50MHz、因为 SYSCLK/4 是默认设置。 在这种情况下、已知误差非常小 (~0.01%)。

    您是否直接检查 F2838x 上接收到的信号? 此信号是否缺少停止位? 正确接收的信号与错误接收的信号之间是否存在任何差异?

    此致、

    Delaney

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

    Delaney、

    以下是工作'a'的示波器轨迹.bmp:

    跟踪 D0 是从 PC 到 GPIO9 上芯片的输入 (RX)、D1 是从芯片到 GPIO8 上 PC 的输出布线 (TX)。  黄色迹线是连接到 GPIO8 的模拟通道、用于寻找噪声。  以下是在失败时的类似迹线、其中显示了工作不正常的“A“缺少停止位:

    在这两种情况下、停止位都来自 PC、但在非工作情况下、停止位不会由芯片发送回 PC。   

    我查看了 SysConfig 以验证 LSPCLK 是否为 50MHz 并且似乎设置正确。

    谢谢、

    Kent

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

    尊敬的 Kent:

    Delaney 将于下周下班。 同时,我可以尝试提出一个建议。

    您是否可以尝试重新排序 GPIO Init 、使其在 SCI 初始化之前出现、并仔细检查 GPIO 设置? 您可以按照 C2000Ware 中参考示例中的图形操作: {C2000Ware}\driverlib\f2838x\examples\c28x\sci。

    例如、 所有 GPIO 配置都在 SCI_setConfig/SCI_enableModule、 GPIO_setPinConfig(多路复用器到 SCI 功能)和 GPIO_setQualificationMode (ASYNC) 存在之前移动、TX 焊盘类型从上拉更改为 STD(标准推挽)

    我在发送的屏幕截图中看不到完整的 GPIO 初始化、因此只想排除这个问题。

    此致、

    Allison

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

    Allison、

    我检查了订单、从上拉更改为推挽。  但是、器件的行为没有变化。

    这是电路板的 InitSCI 函数。

    void initSCI(void)
    {
        // 1. Enable the SCI peripheral clock (example uses SCIA)
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIC);
    
        // 2. Perform a software reset to clear any prior states
        SCI_performSoftwareReset(SCIA_BASE);
        SCI_performSoftwareReset(SCIB_BASE);
        SCI_performSoftwareReset(SCIC_BASE);
    
        // 3. Configure the SCI module 
        // Parameters: Base address, LSPCLK frequency, Baud Rate, Configuration flags
        SCI_setConfig(SCIA_BASE, 
                      DEVICE_LSPCLK_FREQ, 
                      9600, 
                      (SCI_CONFIG_WLEN_8 | SCI_CONFIG_PAR_NONE | SCI_CONFIG_STOP_ONE));
        SCI_setConfig(SCIB_BASE, 
                      DEVICE_LSPCLK_FREQ, 
                      9600, 
                      (SCI_CONFIG_WLEN_8 | SCI_CONFIG_PAR_NONE | SCI_CONFIG_STOP_ONE));              
        SCI_setConfig(SCIC_BASE, 
                      DEVICE_LSPCLK_FREQ, 
                      9600, 
                      (SCI_CONFIG_WLEN_8 | SCI_CONFIG_PAR_NONE | SCI_CONFIG_STOP_ONE));              
    
        // 4. Initialize and clear FIFOs (Optional but recommended)
        SCI_resetChannels(SCIA_BASE);
        SCI_resetRxFIFO(SCIA_BASE);
        SCI_resetTxFIFO(SCIA_BASE);
        SCI_disableFIFO(SCIA_BASE);
    
        // 5. Enable the module
        SCI_enableModule(SCIA_BASE);
        SCI_enableTxModule(SCIA_BASE);
        SCI_enableRxModule(SCIA_BASE);
    
        SCI_resetChannels(SCIB_BASE);
        SCI_resetRxFIFO(SCIB_BASE);
        SCI_resetTxFIFO(SCIB_BASE);
        SCI_disableFIFO(SCIB_BASE);
    
        // 5. Enable the module
        SCI_enableModule(SCIB_BASE);
        SCI_enableTxModule(SCIB_BASE);
        SCI_enableRxModule(SCIB_BASE);
    
        SCI_resetChannels(SCIC_BASE);
        SCI_resetRxFIFO(SCIC_BASE);
        SCI_resetTxFIFO(SCIC_BASE);
        SCI_disableFIFO(SCIC_BASE);
    
        // 5. Enable the module
        SCI_enableModule(SCIC_BASE);
        SCI_enableTxModule(SCIC_BASE);
        SCI_enableRxModule(SCIC_BASE);
    
        // 6. Enable Pullups on GPIO8 and GPIO9
        GPIO_setPadConfig( GPIO_PIN_SCIA_RX, GPIO_PIN_TYPE_STD);
        GPIO_setPadConfig( GPIO_PIN_SCIA_TX, GPIO_PIN_TYPE_STD);
    
        // 6. Enable Pullups on GPIO11 and GPIO109
        GPIO_setPadConfig( GPIO_PIN_SCIB_RX, GPIO_PIN_TYPE_STD);
        GPIO_setPadConfig( GPIO_PIN_SCIB_TX, GPIO_PIN_TYPE_STD);
    
        // 6. Enable Pullups on GPIO13 and GPIO112
        GPIO_setPadConfig( GPIO_PIN_SCIC_RX, GPIO_PIN_TYPE_STD);
        GPIO_setPadConfig( GPIO_PIN_SCIC_TX, GPIO_PIN_TYPE_STD);
    
    }//initSCI
    

    谢谢、

    Kent

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

    尊敬的 Kent:

    感谢您分享 INIT。 请等到 Delaney 本周晚些时候再回来进行跟进。

    此致、

    Allison

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

    尊敬的 Kent:

    您能否将模拟示波器放在 RX 侧? 根据您之前展示的寄存器值、根据中读取的值、传输值的差异是有意义的。 问题应该与 RX 信号有关、因此我想确定 F2838x RX 引脚的输入端是否存在任何噪声。

    此致、

    Delaney

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

    Delaney、

    以下是发送到电路板的工作状态“A“的模拟示波器迹线:

    此处的设置与不工作的“A“相同。

    从 PC 向 F28388 发出无噪声信号。

    谢谢、
    Kent

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

    尊敬的 Kent:

    感谢您发送 RX 侧的模拟范围。 让我明天再回复您。

    此致、

    Delaney

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

    尊敬的 Kent:

    对延迟深表歉意。 这种行为非常奇怪、尤其是因为没有引发 SCI 错误标志、并且由于波特率很慢、已知错误可忽略不计、因此误差应尽可能小。

    您在 GPIO 级别具有哪些输入限定设置 — 请参阅此处的 TRM 部分 ?  

    您是否能够在多个器件上复制此行为?

    此致、

    Delaney

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

    Delaney、

    感谢你的帮助。 大约一周前、我将时钟树设置为 10MHz 的内部时钟 INTOSC2、而不是我需要使用的外部振荡器 (ASEGT-25.000MHZ-GC)。  这似乎立即解决了问题、导致我认为问题与时钟有关、而不是来自 SCI 硬件。  我认为不对的是时钟振幅为 2.8Vp-p、但从大约 0.6V 最小值开始到 3.4V、该值大于 3.3V 规格。  今天上午、我还在第二块电路板上确认了这个信息、因此我认为这不是 TMS320F28388D 器件。  随后、我在时钟的输出端添加了一个 50 Ω 电阻器、这似乎解决了问题、因为时钟信号的振幅在 25MHz 处现在约为 1.5V、似乎可以正常工作。  由于 STOP 位丢失以及我遇到的其他奇数问题、我不再发生 SCI 损坏。  再次感谢您的耐心和建议。

    Kent