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.

[参考译文] CC2652P7:写入的 UART 字节和缓冲区长度不匹配#39;t 匹配

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1325156/cc2652p7-uart-bytes-written-and-buffer-length-don-t-match

器件型号:CC2652P7

您好!

我使用的是基于 CC2652P7芯片的定制设计电路板。

使用的 SDK:simplelink_cc13xx_cc26xx_sdk_7_10_00_98

使用的 API:uART2_write (uart、data、len、&bytesWritten);

串行终端上打印的数据不完整。 bytesWritten (50个字节)小于'len'字节(59个字节)。

为什么会发生这种情况? 我应该交叉检查什么?

谢谢

卡尔蒂克

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

    您好 Karthik、

    请提供其他信息:

    • 您能否通过 LP-CC1352P7-4硬件复制此行为?
    • 您是否连续操作射频堆叠解决方案?
    • 是否有从  UART2_WRITE 返回的错误代码?
    • 您能否将 UART TX 线连接到示波器或逻辑分析仪、以进一步评估传输的是哪些字节?
    •  写入的字节是否实际上与您要发送的字节长度成比例(即是否始终存在9个字节的差异)?  

    此致、
    瑞安

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

    您好、Ryan、

    以下是内联回复:

    (2) syscfg 中的自定义射频堆栈。

    (3)无错误代码。

    (5)没有这种9字节的模式。 "bytesWritten"总是被视为50个字节、而"len"增加。 我向 print 语句中添加的参数越多、就会出现问题。 看起来数据会被斩波。

    另外、UART 波特为230400。 也尝试使用较低的波特率、但未使用。

    谢谢

    卡尔蒂克

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

    请提供代码片段或简化的应用文件、您知道这些代码片段将复制该问题。

    此致、
    瑞安

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

    它是:

    以下 printf 在包含4次迭代的循环中运行。

    UART_printf ("\n\t:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:\n\r\xff"、
                                                                       无线电、
                                                                       lastPacket[radio].len、
                                                                       //lastPacket[radio].lastSeqNo、
                                                                       lastPacket[radio].seqNo、
                                                                       rxPktCount[radio]、
                                                                       otherPktCount[radio]、
                                                                       crcErrorCount[radio]、
                                                                       pristinePktCount[radio]、
                                                                       noiceInPktCount[无线电]、
                                                                       noiceOutPktCount[radio]、
                                                                       reflectionInPktCount[radio]、
                                                                       reflectionOutPktCount[radio]、
                                                                       InterferenceInPktCount[radio]、
                                                                       InterferenceOutPktCount[radio]、
                                                                       阻塞性 InPktCount[radio],
                                                                       阻塞性 OutPktCount[radio],
                                                                       lastPacket[radio].rssi、
                                                                       lastPacket[radio].lqi、
                                                                       lastPacket[radio].syncDelta、
                                                                       lastPacket[radio].missedAcks、
                                                                       (CHANNEL_NUMBER_TABLE_LAST[RADIO]- 11)* 5 + 2405,
                                                                       lastASN);

    void uart_printf (const char *格式、...)
    {
       va_list 参数;
       va_start (args、格式);

       char buffer [128];//根据需要调整缓冲器大小
       vsnprintf (buffer、sizeof (buffer)、format、args);

       va_end (args);

       uart_send_data ((const uint8_t *) buffer、strlen (buffer));

    void uart_send_data (const uint8_t * data、uint32_t len)
    {
       size_t bytesWritten = 0;
       int16_t RETURN_STATUS;
       return_status = UART2_WRITE (uart、data、len、&bytesWritten);

       //Karts[15-02-2024]:错误处理
       if (return_status == UART2_STATUS_EINUSE)
       {
           UART_printf ("\n UART 错误 UART2_STATUS_EINUSE \n\n");
           while (1);
       }
       否则
       {
           ;
       }

    谢谢

    卡尔蒂克

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

    Karthik、您好、

    您应该在  UART2_WRITE 中调试 UART_SEND_DATA、以确保参数始终正确并且没有被  vsnprintf 错误地更改。  您还显示了对退货状态的不完整监控、因为还有更多可用的信息。  同时监控 bytesWritten 的值以查看其是否与您的预期相符。  请确定是否将 UART_printf 与包含>50个字节(即字符串)的单个参数一起使用时显示类似的行为。  为了节省时间并解决当前的问题、您只需将 UART_printf 扩展到多个调用中、每个调用的参数更少。

    此致、
    瑞安

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

    您好、Ryan、

    bytesWritten 始终为50。

    字符串大于50字节的示例:

    uart_printf ("\r\n qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm");

    请查看快照:

    谢谢

    卡尔蒂克

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

    以下代码片段解决了该问题:

    void uart_send_data (const uint8_t * data、uint32_t len){
       int16_t RETURN_STATUS;

       针对(uint32_t i = 0;i < len;i++){
           return_status = UART2_WRITE (UART、&data[i]、1、NULL);

           // Karts[15-02-2024]:错误处理
           if (return_status == UART2_STATUS_EINUSE){
               UART_printf ("\n UART 错误 UART2_STATUS_EINUSE \n\n");
               while (1);
           }
           //如果需要,添加其他错误处理条件
       }

    此外、在 syscfg 中将 Tx 环形缓冲器配置为50。 导致了该问题。

    谢谢

    卡尔蒂克