☰
炬芯ATS308X的第二串口UART1配置实现
2026/10/14 10:10:13 网站建设 项目流程

# GPIO20 / GPIO21 UART1 测试

配置:GPIO20 = UART1 TX,GPIO21 = UART1 RX,115200 baud,8 数据位、1 停止位、无校验、无流控。原有 UART0 控制台用于输入下面的命令。

## 连接与循环输出

使用支持 3.3V TTL 电平的 USB 转串口工具,板上 GPIO20 接工具 RX,GND 共地;GPIO21 为板上的接收端,需要接收时接工具 TX。串口软件设置为 115200 / 8N1 / 无流控。

上电完成系统初始化后,自动每秒输出一次 `hello word\r\n`(12 字节),不需要先发送命令。这个独立串口目前输出测试文本;系统日志和 shell 命令仍使用原有 UART0 控制台。

在原有控制台可执行:

```text
app gpio_uart on
app gpio_uart status
app gpio_uart off
```

`status` 显示运行状态、成功发送行数、最后错误码,并在原控制台打印 GPIO20/21 复用、UART1 控制/状态/波特率寄存器、时钟和复位状态。`off` 等待当前发送结束,然后取消循环并释放休眠锁;`on` 恢复测试。也接受 `start` / `stop`。重复启停不会叠加任务或休眠锁,重新启动会清零计数。开关状态不保存,重启后再次自动发送。

正常启动时原控制台应显示 `[gpio_uart] boot-test v2`、`start=0`,两引脚均为 `MFP6`,`BR=0x01160116`(32 MHz 时钟、115200 波特率),`clk=1 reset_released=1`。发送任务遇到错误会打印 `[gpio_uart] test stopped` 和错误码。`lines` 增加仅表示 UART FIFO 发送完成,实际引脚连线还需串口接收或外部回环验证。

建议依次验证:连续接收 30 秒、重复执行 on、off 后无新数据、重新 on,以及熄屏后仍持续输出。测试运行期间允许熄屏,但阻止 CPU 进入会中断 UART 的休眠。

验证完成后执行 `app gpio_uart off`,释放测试持有的休眠锁;这版开机自动测试会增加待机功耗。

## 2026-10-08 无输出问题分析

更新后的 `log_26_9_29.txt` 在 11:22:35 显示 `Version Name: 1.00_2610081102`、`Board Name: ats3089p_dev_watch` 和 `z_sys_init dev(UART_1)`。该次启动至日志结束没有 `app gpio_uart on` 或测试启动信息。上一版 `test_running` 默认 false,且主程序没有启动测试的调用,因此仅连接 GPIO20/21 不会产生测试输出。

本次在系统初始化后自动启动测试,并增加启动标记、发送错误日志及硬件状态读取。日志未包含 GPIO20/21 实际复用值,不能据此证明物理接线或引脚电气输出正常;这部分需要新固件的状态输出和实板接收验证。

## TX / RX 外部回环

先执行 `app gpio_uart off`,断开工具 TX 与板子的连接,再短接板上 GPIO20 和 GPIO21,在原有控制台执行:

```text
app gpio_uart loopback
```

12 字节全部收发一致才打印 `loopback PASS (12 bytes)`;未接回环线会超时报错,不会一直阻塞控制台。测试结束后拆下短接线,再恢复正常接线。该命令检查实际引脚回路,不启用 UART 内部回环模式。

## 引脚占用

- UART1 从 SDK 默认的 GPIO16/17 改为 GPIO20/21;GPIO16/17 继续用于屏幕数据。
- 当前板级模板原先将 GPIO21 定义为屏幕电源控制。启用 UART1 后,屏幕初始化和休眠恢复不再操作 GPIO21。本配置按本次要求将这两个引脚作为专用串口;如果实物 GPIO21 实际连接了 LCD 电源使能,则这两种用途不能同时使用。
- 当前固件采用外部充电驱动,没有调用 GPIO20 的板级 NTC 切换接口。编译检查会拒绝同时启用占用这些引脚的 SPI3、MMC0、ADC 按键或内部充电 NTC 配置,避免运行时覆盖 UART 复用。

## 后续音频输出接口

`src/main/gpio_uart.h` 中的 `gpio_uart_write(data, len)` 提供线程上下文中的同步原始字节发送,不添加日志、换行或转义;测试运行时返回 `-EBUSY`,避免 hello 字符串混入音频数据。该接口暂未接入录音,持续音频输出时应使用独立发送线程及缓存,按需求增加 DMA。

115200 / 8N1 的理论有效载荷上限约为 11520 字节/秒;16 kHz、单声道、16-bit PCM 需要 32000 字节/秒,不能在此速率下实时无损输出,需要后续提高波特率或压缩音频。

## 验证记录(2026-10-08)

- ATS3089P bt_watch 全量编译、链接及固件打包成功。
- ELF 核对:UART1 的 GPIO20/21 均为 MFP6,波特率 115200;UART0 仍为 GPIO28/29。
- `python application/bt_watch/tests/gpio_uart/run_tests.py` 通过。测试将实际 gpio_uart.c 编译为 ARM 代码,在 Unicorn 上使用 UART/RTOS 替身验证重复启停、发送内容、错误回收、超时、回环匹配及失败路径;不替代实板电气及时序验证。
- 烧录文件位于 `outdir/ats3089p_dev_watch/_firmware/ats3089p_dev_watch_261008_debug.fw`,完整包为同目录 `ats3089p_dev_watch_261008.fw`。
- 未执行烧录或实板收发测试,未提交 Git。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询