T1_CHL日志打印串口 如何配成奇偶校验

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
lwq
Posts: 5

T1_CHL我在使用日志打印串口(串口一)初始不管配置成奇校验还是偶校验,出来的数据都是无校验的数据 导致无法与需要设置串口校验的芯片进行通信

Last edited by lwq on 2026年 Apr 20日 09:13, edited 1 time in total.
愚者千虑必有一得
Posts: 899

Re: T1_CHL日志打印串口 如何配成奇偶校验

您好!

关于 T1 (BK7231N) 日志串口(UART1)无法配置奇偶校验的问题:

日志串口(CHL/UART1)的波特率和数据位由 bootloader 固定,在 TuyaOS 运行时通过 tal_uart_init() 修改奇偶校验不会生效,这是因为:

  1. 日志串口被锁定为 8N1 格式
    UART1 在 bk7231n 的硬件配置中固定为 8 位数据、无校验(8N1),这是为了保证 bootloader 通信的兼容性,应用层无法动态修改。

  2. 解决方案 - 使用 UART2 进行带校验的通信
    如果您需要与外部芯片通过带奇偶校验的串口通信,建议改用 UART2(应用串口),示例代码:

    Code: Select all

    #include "tal_uart.h"
    
    UartConfig_t uart_cfg = {
        .baudRate  = 115200,
        .dataBits  = TAL_UART_DATA_BITS_8,
        .stopBits  = TAL_UART_STOP_BITS_1,
        .parity    = TAL_UART_PARITY_ODD,   // 奇校验,或 TAL_UART_PARITY_EVEN 偶校验
        .flowCtrl  = TAL_UART_FLOW_CTRL_NONE,
    };
    tal_uart_init(TAL_UART_ID_2, &uart_cfg);
  3. T1 UART2 引脚
    请参考 T1 芯片手册确认 UART2 的 TX/RX 引脚,并在 tuyaos_adapter_kv.h 中配置对应的 GPIO 复用。

请问您使用带校验串口的场景是什么?与哪种芯片通信?我可以提供更具体的配置建议。

lwq
Posts: 5

Re: T1_CHL日志打印串口 如何配成奇偶校验

您好 那为什么CBU_bk7231N 它是可以可以去配置日志打印串口的奇偶校验 是因为底层驱动不同吗
https://www.tuyaos.com/viewtopic.php?p= ... %A3#p13717

Last edited by lwq on 2026年 Apr 20日 09:13, edited 1 time in total.
lwq
Posts: 5

Re: T1_CHL日志打印串口 如何配成奇偶校验

lwq 2026年 Apr 17日 18:15

您好 那为什么CBU_bk7231N 它是可以可以去配置日志打印串口的奇偶校验 是因为底层驱动不同吗
https://www.tuyaos.com/viewtopic.php?p= ... %A3#p13717

Last edited by lwq on 2026年 Apr 20日 09:12, edited 1 time in total.
lwq
Posts: 5

Re: T1_CHL日志打印串口 如何配成奇偶校验

愚者千虑必有一得 2026年 Apr 17日 18:05

您好!

关于 T1 (BK7231N) 日志串口(UART1)无法配置奇偶校验的问题:

日志串口(CHL/UART1)的波特率和数据位由 bootloader 固定,在 TuyaOS 运行时通过 tal_uart_init() 修改奇偶校验不会生效,这是因为:

  1. 日志串口被锁定为 8N1 格式
    UART1 在 bk7231n 的硬件配置中固定为 8 位数据、无校验(8N1),这是为了保证 bootloader 通信的兼容性,应用层无法动态修改。

  2. 解决方案 - 使用 UART2 进行带校验的通信
    如果您需要与外部芯片通过带奇偶校验的串口通信,建议改用 UART2(应用串口),示例代码:

    Code: Select all

    #include "tal_uart.h"
    
    UartConfig_t uart_cfg = {
        .baudRate  = 115200,
        .dataBits  = TAL_UART_DATA_BITS_8,
        .stopBits  = TAL_UART_STOP_BITS_1,
        .parity    = TAL_UART_PARITY_ODD,   // 奇校验,或 TAL_UART_PARITY_EVEN 偶校验
        .flowCtrl  = TAL_UART_FLOW_CTRL_NONE,
    };
    tal_uart_init(TAL_UART_ID_2, &uart_cfg);
  3. T1 UART2 引脚
    请参考 T1 芯片手册确认 UART2 的 TX/RX 引脚,并在 tuyaos_adapter_kv.h 中配置对应的 GPIO 复用。

请问您使用带校验串口的场景是什么?与哪种芯片通信?我可以提供更具体的配置建议。

JSHANG
Posts: 107

Re: T1_CHL日志打印串口 如何配成奇偶校验

首先,系统初始化已经占用了日志串口,输出日志,不能再修改和配置;
要将日志串口用作和其它MCU进行串口通信,并且支持奇偶校验配置, 需要如下修改:

  1. SDK在3.11.31以上,找到文件vendor/T1/T1_os/T1/app/config/sys_config.h里面,增加宏
    #define SWITCH_LOG_UART_EN 1
    使日志串口默认不作为日志输出
    2.在系统启动tuya_app_main应用里,将该串口初始化成其它通信串口,示例代码如下:
    static void log_uart_test_thread(void *arg)
    {
    TUYA_UART_BASE_CFG_T uart_cfg = {0};
    uart_cfg.baudrate = 115200;
    uart_cfg.parity = TUYA_UART_PARITY_TYPE_EVEN;
    uart_cfg.databits = TUYA_UART_DATA_LEN_8BIT;
    uart_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT;
    uart_cfg.flowctrl = TUYA_UART_FLOWCTRL_NONE;

    UCHAR_T aaa = 7;
    tkl_uart_init(TUYA_UART_NUM_1, &uart_cfg);
    TAL_PR_DEBUG("log_uart_test_thread init finished");
    while (1) {
    tkl_uart_write(TUYA_UART_NUM_1, &aaa, 1);
    //TAL_PR_DEBUG("log_uart_test_thread sleep 1000");
    tkl_system_sleep(1000);
    }
    tkl_uart_deinit(TUYA_UART_NUM_1);
    }
    tkl_thread_create(&log_uart_test_thread_handle, "log_uart_test_thread", 1024, 4, log_uart_test_thread, NULL);

已测试确认奇偶校验生效,可以正常工作,详细见附件抓到的波形。

3.如果还需要模组的日志,可以通过GPIO模拟,输出日志,代码示例如下:
static void tuya_app_thread(void *arg)
{
TUYA_UART_BASE_CFG_T uart_cfg = {0};
uart_cfg.baudrate = 115200;
uart_cfg.parity = TUYA_UART_PARITY_TYPE_NONE;
uart_cfg.databits = TUYA_UART_DATA_LEN_8BIT;
uart_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT;
uart_cfg.flowctrl = TUYA_UART_FLOWCTRL_NONE;
uart_cfg.tx_pin = 23; 设置GPIO23作为日志输出
uart_cfg.rx_pin = 0;
tkl_gpio_simulate_uart_init(TUYA_UART_NUM_2, &uart_cfg);

Code: Select all

user_main();

tkl_thread_create(&log_uart_test_thread_handle, "log_uart_test_thread", 1024, 4, log_uart_test_thread, NULL);
tkl_thread_release(ty_app_thread);
ty_app_thread = NULL;

}
GPIO模拟串口日志输出,串口接收软件波特率设置460800

Attachments
偶校验
偶校验
奇校验
奇校验
lwq
Posts: 5

Re: T1_CHL日志打印串口 如何配成奇偶校验

好的 谢谢!

Post Reply