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.

[参考译文] LAUNCHXL-CC1352R1:UART 问题-并非所有字节的位都正确发送

Guru**** 2578945 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1133053/launchxl-cc1352r1-uart-issue---not-all-bits-of-byte-sent-correctly

器件型号:LAUNCHXL-CC1352R1
Thread 中讨论的其他器件:SysConfigTM4C123

你好、

我遇到了一个问题、即我通过 UART 以10753波特传输到器件。

我正在尝试发送0x79。 它从我的末端正确发送 但是、在器件侧、它以0x71的形式接收它。 从逻辑分析仪的图中可以看到、应该是高电平的位是低电平。 这是在1秒的间隔内测试的、因此它是重复行为。

顶部迹线是 Rx 侧。 底部迹线是 Tx 侧

代码摘录:

  const char bleh[4]={0xFF、0x11、0x97、0x79};

  UART_Handle UART;
   UART_Params uartParams;
   /*调用驱动程序初始化函数。 *
   UART_INIT();

   UART_PARAMS_INIT (uartParams);
   uartParams.writeDataMode = UART_DATA_BINARY;
   uartParams.readDataMode = UART_DATA_BINARY;
   uartParams.readReturnMode = UART_return_full;
   uartParams.readEcho = UART_ECHO_OFF;
   uartParams.baudrate = 10753;
   uartParams.parityType = UART_PAR_even;
   uartParams.stopbits = UART_STOP_ONE;

while (1)
   {
       睡眠(1);
       UART = UART_OPEN (UART_Tx、uartParams);
       UART_WRITE (bleeh、buffer、size);
       UART_CLOSE (UART);

 }

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

    您好 Krish、

    当使用 UART2驱动程序时、我的末尾确实接收到0x79


    这是我使用的代码、基于 uart2echo 6.20 SDK 示例。

    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        char input;
        UART2_Handle uart;
        UART2_Params uartParams;
        size_t bytesRead;
        size_t bytesWritten = 0;
        uint32_t status     = UART2_STATUS_SUCCESS;
        const char  bleh[4] = {0xFF,0x11,0x97,0x79};
    
        /* Call driver init functions */
        GPIO_init();
    
        /* Configure the LED pin */
        GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
        /* Create a UART where the default read and write mode is BLOCKING */
        UART2_Params_init(&uartParams);
        uartParams.baudRate = 10753;
        uartParams.parityType = UART2_Parity_EVEN;
        uartParams.stopBits = UART2_StopBits_1;
        uartParams.readReturnMode = UART2_ReadReturnMode_FULL;
    
        /* Turn on user LED to indicate successful initialization */
        GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
    
        while (1)
        {
            uart = UART2_open(CONFIG_UART2_0, &uartParams);
            if (uart == NULL)
            {
                /* UART2_open() failed */
                while (1) {}
            }
            status = UART2_write(uart, &bleh, 4, &bytesWritten);
            UART2_close(uart);
    
            sleep(1);
        }
    }
    


    请在 以下位置找到 UART2驱动程序的文档:https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_6_20_00_29/docs/drivers/doxygen/html/_u_a_r_t2_8h.html#a00d68ce47bb8b798f31c3338077d301a

    此致、

    Arthur

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

    尊敬的 Arthur:

    感谢您的回复。 最后、我要尝试通过 ISO7816-3协议与智能卡进行通信。

    我刚刚使用 UART1尝试过它、之前我使用的是 UART0。

    相同的问题:

    底部迹线在 Tx 引脚的微侧测量、顶部迹线在智能卡侧测量。 如您所见、有一个位应该为高电平、因此给出的值为0x71、而不是正确给出的值为0x79。

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

    您好 Krish、

    很抱歉、我的意思是您应该使用名为 UART2的驱动程序、如 SysConfig 中的此处所示:

    此驱动程序是一个更新的新 UART 驱动程序。

    此致、

    Arthur

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

    尊敬的 Arthur:

    很抱歉、我的回答很晚、我正在为 UART2使用此新驱动程序。

    不幸的是、我会得到相同的行为:

    仅在 Tx 线路连接到智能卡 IO 时才会出现这种情况。

    然后、我尝试了您的想法、从另一篇文章中连接 Rx 和 Tx、并使用建议的 fxn 禁用 Rx:

    同时也会看到两个引脚彼此短路时看起来不太正确的情况:

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

    您好 Krish、

    您是否看到我提供的代码的第一个行为?

    从第二个问题开始、您可以尝试将引脚配置为在非活动状态下悬空、方法是在 SysConfig 中单击该引脚:

    此致、

    Arthur

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

    尊敬的 Arthur:

    我已经测试了您的代码以及我的代码。 未连接到安全元件时、Tx 引脚上的数据符合预期。

    当我将 Tx 线路连接到智能卡/安全元件数据 I/O 线路时、前3个字节的数据正常、但最后一个字节应为0x79、始终读取为0x71。 因此、如下图所示、器件始终返回0xFF、表示出错:

    我现在甚至使用新的逻辑分析仪来尝试这一点、只是为了排除采样问题。

    我开始想、CC1352R1可能不支持 ISO7816 UART 通信。 从论坛的研究中可以看出、TM4C123仅支持它?

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

    您好 Krish、

    我们实际上没有对 ISO7816 UART 通信的专用支持。 但是、查看本文档中的时序:

    https://www.smartcardsupply.com/Content/Cards/7816standard.htm

    您可以通过以下任一方式与智能卡通信:

    _尝试使用两个停止位而不是一个停止位。

    _按字节发送数据包字节并相应地对其进行计时?

    我没有要测试的智能卡、但请告诉我结果。

    此致、

    Arthur

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

    尊敬的 Arthur:

    非常感谢。 我现在能够得到一个响应。 解决方案是将停止位设置为2。

    作为后续步骤、是否有办法允许 Tx 引脚和 Rx 引脚位于同一引脚上?、类似于 STM32 ISO7816 UART? 换句话说、在传输时、立即配置到 Rx 模式后、是否有一种简单的方法能够使引脚处于 Tx 配置中?

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

    不、您必须在硬件中执行它。 TX 和接收是独立的。 即、您可以同时发送和接收。