1. 项目概述:串口更新PMON的工程意义
在嵌入式开发领域,PMON(Processor Monitor)作为龙芯处理器特有的引导加载程序,承担着硬件初始化、操作系统加载等关键任务。传统更新方式通常依赖JTAG或网络接口,但在工业现场、设备维修等特殊场景下,串口更新方案因其接线简单、可靠性高的特点成为工程师的备选方案。我曾在某工业控制器项目中,因设备网络模块故障,正是通过串口完成了PMON的紧急修复,避免了整机返厂的损失。
串口通信采用UART协议,只需TX、RX、GND三线连接,物理层兼容RS-232/RS-485标准。与USB或网络相比,其优势在于:
- 线缆成本低(普通杜邦线即可)
- 驱动兼容性强(CH340/PL2303等转换芯片通用)
- 传输距离远(RS-485最远可达1200米)
- 抗干扰能力好(差分信号设计)
2. 硬件准备与环境搭建
2.1 硬件选型要点
推荐采用CH340G芯片的USB转串口模块(市场价约5元),其优势在于:
- Windows/Linux免驱(内核原生支持)
- 波特率支持50bps~2Mbps
- 实测传输稳定性优于PL2303
连接示意图:
code复制PC USB口 → CH340模块 → 目标板UART0
(TX接RX)
(RX接TX)
(GND互联)
2.2 驱动安装验证
Linux系统下可通过ls /dev/ttyUSB*查看设备节点,Windows设备管理器应出现"USB-SERIAL CH340"条目。若识别异常:
bash复制# Ubuntu下手动加载驱动
sudo modprobe ch341
sudo chmod 666 /dev/ttyUSB0
2.3 终端软件配置
推荐使用picocom或minicom:
bash复制picocom -b 115200 /dev/ttyUSB0
关键参数说明:
- 波特率:必须与PMON源码中
include/mach/uart.h定义的CONFIG_BAUDRATE一致 - 数据位:8bit
- 校验位:None
- 停止位:1bit
- 流控:None
3. PMON源码修改与编译
3.1 串口驱动确认
检查Targets/LS2K/dev/uart.c中的初始化代码:
c复制void uart_init(int freq, int baud) {
uart_reg_write(UART_LCR, 0x80); // 使能波特率设置
uart_reg_write(UART_DLL, freq/16/baud & 0xff); // 分频系数低字节
uart_reg_write(UART_DLH, (freq/16/baud >> 8) & 0xff); // 分频系数高字节
uart_reg_write(UART_LCR, 0x03); // 8N1模式
}
3.2 更新功能激活
在pmon/common/cmd_load.c中添加串口传输支持:
c复制#ifdef CONFIG_LOAD_SERIAL
static int serial_load(char *addr, int xmodem) {
if (xmodem) return xyzModem_load(addr);
else return serial_lineload(addr);
}
#endif
3.3 编译配置
执行make cfg后选择:
code复制Device Drivers →
[*] Serial port support →
[*] Enable serial download
(115200) Default baudrate
4. 烧录实操流程
4.1 启动PMON命令行
上电后3秒内按任意键中断自动启动,出现PMON>提示符。输入load -r -f 0x80200000 -b 115200进入接收模式。
4.2 发送二进制文件
在主机端使用sz命令发送:
bash复制sz --ymodem pmon.bin > /dev/ttyUSB0 < /dev/ttyUSB0
或使用lrzsz工具包:
bash复制lrz -Y -b pmon.bin
4.3 烧录验证
传输完成后执行:
code复制PMON> flash write 0x80200000 0xbfc00000 ${filesize}
PMON> flash erase 0xbfc00000 +100000
PMON> reset
5. 故障排查手册
5.1 常见错误代码
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无响应 | 线序接反 | 交换TX/RX |
| 乱码 | 波特率不匹配 | 核对双方配置 |
| 传输中断 | 流控未关闭 | 添加-f参数 |
| 校验失败 | 信号干扰 | 缩短线缆/加磁环 |
5.2 信号质量检测
使用示波器测量UART信号:
- 正常波形:3.3V方波,上升沿<1μs
- 异常处理:
- 过冲:串联100Ω电阻
- 振铃:并联100pF电容
6. 进阶技巧
6.1 自动重试脚本
bash复制#!/bin/bash
while ! sz -Y pmon.bin; do
echo "传输失败,10秒后重试..."
sleep 10
done
6.2 传输速率优化
修改include/termdefs.h中的TTYDEF_SPEED:
c复制#define TTYDEF_SPEED (B1500000) // 1.5Mbps
需确保硬件支持高速模式(FT232H等芯片)
6.3 安全校验增强
在烧录前添加SHA256校验:
code复制PMON> sha256 0x80200000
PMON> setenv pmon_sha ${sha256sum}
通过三次实际项目验证,这套方案在龙芯2K1000、3A4000等平台均稳定可用,最远曾在30米长的RS-485线路上成功完成更新。建议工程师随身携带USB转串口模块作为应急维护工具。
