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.

[参考译文] TMS320F28034:SCIA 问题

Guru**** 2540600 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/964398/tms320f28034-scia-issue

器件型号:TMS320F28034

您好专家、

这是 SCI 接收问题。 发送数据的主机是另一个 MCU、也通过 PC 进行检查。 问题始终存在。

加电后初始化 SCIA 配置后、我们将遇到数据有时无法正常接收的情况。 此时、可以在重新初始化配置后正常接收数据。 这种现象并非在每个电路板上都发生。 有时会出现一些电路板、这非常令人困惑。
我们在200us 的时间内检查 SciaRegs.SCIFFRX.bit.RXFFST 标志、以确定是否要接收数据。
DSP 上电后、在200us 周期内检查 SciaRegs.SCIFFRX.bit.RXFFST、有时无法检查"if (SciaRegs.SCIFFRX.bit.RXFFST!= 0)"。

我在这里附加了初始化代码。

e2e.ti.com/.../3513.SCI.c

下面是正常条件寄存器状态

对于异常状态、 SCIRXST 更改为 0x00B6或0x00B2。

请您仔细阅读并发表评论吗?

BR

Emma

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

    尊敬的 Emma:

    首先需要注意的是 SCIRXST 更改为 0x00B6或0x00B2。 这表明当 SCIRXST 的任何标志5-2被置位时、一个接收器错误标志(RXERROR)被置位。 由于中断检测(SCI 接收器数据线(SCIRXD)持续保持低电平至少10位)、帧错误(未找到预期的停止位)和奇偶校验错误(奇偶校验不匹配)、导致错误。

    使用的波特率是多少? 是否在发送端配置了奇偶校验?

    检查 GPIO 上拉配置是否在电路板上正常工作。

    这可能是由一些外部噪声造成的。 系统是隔离式的吗?

    要从接收器错误中恢复、只要程序检测到 RXERROR、就可以使用软件复位。  

    SciaRegs.SCICTL1.bit.SWRESET = 0;

    SciaRegs.SCICTL1.bit.SWRESET = 1;

    谢谢、

    Yashwant  

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

    Yashwant、

    [报价用户="Yashwant Temburu1]\n 使用的波特率是多少? 是否在发送端配置了奇偶校验?[/报价]

    是的、19200

    [报价用户="Yashwant Temburu1"]检查 GPIO 上拉配置是否在电路板上正常工作。

    是的

    [引用 user="Yashwant Temburu1">]这可能是由于一些外部噪声造成的。 系统是否隔离?[/quot]

    它也可能发生在实验中、因此它不是根。 原因。

     奇怪的是、如果它们无法在 FIFO 中接收数据600次、它们会使用相同的初始化函数重新启动 SCI。

    那么问题就很清楚了、所以客户想知道根本原因。

    判断是否存在数据
    
    空 SCIARxStatus0Prc (空)
    {
    if (SciaRegs.SCIFFRX.bit.RXFFST!= 0)
    { //接收有效数据
    SCIAStatus = 1;
    SCIAFrameEnd = 0;
    SCIAIdleCnt = 0;
    
    while (SciaRegs.SCIFFRX.bit.RXFFST!= 0)
    {
    if (SCIAIntRxCnt >= SCIARXMAX)
    防止接收异常,异常处理后下一帧正常/μ s
    SCIAIntRxCnt = 0;
    SCIAStatus = 0;
    返回;
    }
    其他
    {
    SCIAIntRx[SCIAIntRxCnt]= SciaRegs.SCIRXBUF.bit.RXDT;
    SCIAIntRxCnt++;
    }
    }
    
    其他
    {
    SCIAIntRxCnt = 0;
    SCIAFrameEnd = 0;
    SCIAIdleCnt++;
    if (SCIAIdleCnt >= SCIAIDLE)
    {
    SCIARxInit();
    SCIAIdleCnt = 0;
    SCIARxErrCnt++;
    if (SCIARxErrCnt >= 100)
    {
    SCIARxErrCnt = 100;
    }
    }
    
    } 

    SCIADLE 等于600。

    提前感谢!

    BR

    Emma

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

    Emma、

                 显然、存在错误。 换言之、并不是接收突然停止而没有标志任何错误条件。 如果不识别导致错误条件的原因、则无法调试该问题。

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

    尊敬的 Emma:

    客户是否仅 重新初始化 SCI 一次、之后继续运行而不会出现错误?  

    还想知道当您以较低的波特率运行时是否会发生同样的情况、比如9600?   

    请注意、如果 RX/BK INT ENA 位为1、则发生中断(BRKT)会导致产生接收器中断、但不会导致接收器缓冲区被加载。 这可能是为什么在再次执行初始化并清除 BRKT 位之前、您不会看到数据600次的原因。

     我建议您监控  SCIRXST 寄存器中的 RXERROR 位、如果该位被置位、则检查同一寄存器中的奇偶校验错误位(PE)、组帧错误位(FE)和 SCI 中断检测位(BRKT)。 这将帮助我们缩小您在通信周期中遇到的错误类型以及在什么时间遇到的错误。

    此致、

    Marlyn

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

    Hareesh、

    实际上、主机 MCU 将在 F28034完成启动前发送数据。

    但在大多数测试中、一切都是正确的。

    它是否会导致 SCI 接收错误?

    BR

    Emma

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

    尊敬的 Emma:

    这可能是一个令人担忧的问题。 您是否会尝试在主机端添加延迟、以便在接收器件有时间完成初始化之前不会传输?

    此致、

    Marlyn