导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    T113-i 小核 C906 使用 UART2 时 TX 引脚只有 3.3V 高电平、无数据波形,求助排查方向

    T Series
    1
    1
    19
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • N
      narrokhan LV 2 最后由 编辑

      各位好,我现在有一个项目,需要使用 T113-i 的小核 C906 来进行 UART2 的收发。
      目前遇到一个问题:UART2 的 TX 引脚虽然被拉高到 3.3V,但是无法发送出任何字符,PC 端也收不到数据,示波器上只有一条恒定的 3.3V 水平线。
      下面是我目前的配置和代码情况。

      一、板级 FEX 配置(UART2 使用 PB0 / PB1,复用功能为 <7>)

      我在板级 FEX 中的相关配置如下(节选):

      ;sunxi platform application
      ;---------------------------------------------------------------------------------------------------------
      ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
      ; 描述gpio的形式:Port:端口+组内序号<功能分配><内部电阻状态><驱动能力><输出电平状态>
      ;---------------------------------------------------------------------------------------------------------

      ;---------------------------------------------------------------------------------
      ; version:版本1.00
      ; machine:板级文件名
      ;---------------------------------------------------------------------------------
      [product]
      version = "100"
      machine = "fpga"

      ;----------------------------------------------------------------------------------
      ;twi configuration
      ;twi_used 0:关闭, 1:打开
      ;twi_port 0:twi0, 1:twi1, 2:twi2, 3:twi3, 4:twi4, 5:twi5, 6:r_twi0, 7:r_twi1
      ;twi_scl boot0 scl的GPIO配置
      ;twi_sda boot0 sda的GPIO配置
      ;----------------------------------------------------------------------------------
      ;[twi_para]
      ;twi_used = 0
      ;twi_port = 2
      ;twi_scl = port:PC0<3><1><default><default>
      ;twi_sda = port:PC1<3><1><default><default>

      ;----------------------------------------------------------------------------------
      ;uart configuration
      ;uart_debug_port |Boot串口控制器编号 |
      ;uart_debug_tx |Boot串口发送的GPIO配置 |
      ;uart_debug_rx |Boot串口接收的GPIO配置 |
      ;----------------------------------------------------------------------------------
      [uart_para]
      uart_debug_port = 2
      uart_debug_tx = port:PB00<7><1><default><default>
      uart_debug_rx = port:PB01<7><1><default><default>

      [uart2]
      uart_used = 1
      uart_port = 2
      uart_tx = port:PB00<7><1><default><default>
      uart_rx = port:PB01<7><1><default><default>

      ;[uart9]
      ;uart_tx = port:PM00<3><1><default><default>
      ;uart_rx = port:PM01<3><1><default><default>

      这里使用的是 PB0 / PB1 作为 UART2 的 TX / RX,
      <7> 的复用功能也已经在 T113-i 的 datasheet 中确认是 UART2 的配置。

      二、RTOS 侧 defconfig 配置(节选)

      在 RTOS 的 defconfig 中,目前和 UART2 相关的配置包括:

      CONFIG_ARCH_SUN8IW20P1=y
      CONFIG_DRIVERS_UART=y
      CONFIG_SUNXI_UART_REGISTER_UART2=y
      CONFIG_CLI_UART_PORT=2
      CONFIG_MULTI_CONSOLE=y
      CONFIG_MULTI_CONSOLE_DEBUG=y
      CONFIG_UART_MULTI_CONSOLE=y
      CONFIG_UART_MULTI_CONSOLE_AS_MAIN=y
      CONFIG_COMPONENT_CLI=y

      三、C906 上的 RTOS 程序代码

      在 C906(小核 RTOS)侧,我目前的测试代码大致如下:

      #include <stdio.h>
      #include <stdint.h>
      #include <string.h>
      #include <unistd.h>
      #include "interrupt.h"
      #include <portmacro.h>
      #include "FreeRTOS.h"
      #include <hal_uart.h>
      #include <hal_timer.h>

      void cpu0_app_entry(void *param)
      {
      (void)param;
      _uart_config_t uart_config;

          uart_config.baudrate    = UART_BAUDRATE_115200;
          uart_config.word_length = UART_WORD_LENGTH_8;
          uart_config.stop_bit    = UART_STOP_BIT_1;
          uart_config.parity      = UART_PARITY_NONE;
      
          hal_uart_init(2);
          hal_uart_control(2, 0, &uart_config);
          hal_uart_disable_flowcontrol(2);
          hal_uart_set_loopback(2, 0);
          hal_msleep(1000);
      
          uint8_t rbuf[10] = {0};
          const char *boot_message = "boot";
      
          while (1) {
                  hal_uart_send(2, (const uint8_t *)boot_message, strlen(boot_message));
                  hal_uart_put_char(2, 'Y');
                  hal_uart_receive_no_block(2, rbuf, 5, MS_TO_OSTICK(1000));
                  hal_msleep(1000);
          }
      

      }

      四、实际观测到的现象

      当前在板子上的现象如下:

      TX 电平被拉高到 3.3V:

      只要调用 hal_uart_init(2);,UART2 的 TX 引脚电位就会被拉高到 3.3V。

      如果不调用 hal_uart_init(2);,该引脚电位不会被拉高。

      因此可以确认:现在控制到的确实是 UART2 的 TX 引脚(PB0)。

      但没有任何数据波形:

      PC 端通过 CH340(USB 转串口)连接后,在终端里收不到任何字符。

      用示波器观察 UART2 TX 引脚,只看到一条恒定的 3.3V 水平线,看不到 UART 发送时应有的跳变波形。

      也就是说,现在 UART2 TX 这边的状态是:

      电平能被拉高到 3.3V,但发送数据时没有任何波形变化,PC 端也收不到字符。

      五、系统环境说明

      主核 A7 这边运行的是 Ubuntu(不是 Tina Linux)。
      有明確地將DTS裡面uart2的部分disable掉 也沒有在dts裡面有其他使用該腳位PB0 PB1的地方
      小核 C906 这边的 RTOS 部分,是从 Tina SDK 里的 RTOS SDK 单独编译出来的固件。

      然后通过 A7 侧的 Linux(remoteproc) 把 C906 的 RTOS 固件上传并启动。

      clock 和 reset 的部分,使用的是 Tina SDK 中 RTOS 相关的官方配置,理论上不应该有问题。

      六、目前卡住的问题 & 想请教的方向

      目前卡住的核心问题就是:

      在上述 FEX、defconfig 和代码配置下,
      UART2 的 TX 引脚可以被拉到 3.3V 高电平,
      但是发送字符串 "boot" 和 'Y' 时,
      示波器上看不到任何数据波形,
      PC 端 CH340 串口工具也收不到字符。

      想请教各位熟悉 T113-i / C906 / RTOS 的工程师:

      在已知 引脚、电压、电平变化 都符合预期(TX idle 高电平)的情况下,
      还可能有哪些配置或细节会导致 始终没有实际 UART 波形输出?

      非常感谢大家的时间,如果需要我补充更多信息(例如完整 FEX、更多 log、编译方式等),我也可以继续整理后再贴上来。

      再次感谢。

      1 条回复 最后回复 回复 引用 分享 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策