初级会员

- 积分
- 179
- 金钱
- 179
- 注册时间
- 2026-1-29
- 在线时间
- 17 小时
|
一、硬件连接与电气特性排查
物理连接验证:
交叉接线确认:确保RS232/CH340的TXD与开发板RXD直连,RXD与开发板TXD直连,GND必须共地15。J15接口需对照开发板原理图确认引脚定义。
信号完整性测试:使用示波器抓取UART的TXD/RXD波形,确认在空闲状态下为高电平(3.3V),发送数据时存在明显的高低电平跳变。若波形异常,检查上拉电阻是否缺失或线路阻抗不匹配。
供电稳定性检测:测量VCCO_500(Bank 500)电压是否稳定在3.3V±5%,劣质SD卡或外设可能导致电源波动引发UART失效。
启动模式与MIO配置冲突:
拨码开关状态:检查SW1-SW3是否设置为011(SD卡启动)或其他非JTAG模式,错误的启动模式会导致PS端资源(包括UART)未初始化。
MIO复用冲突:在Vivado中核对MIO14/15是否被正确分配为UART0功能,且Bank 0电压配置为LVCMOS 3.3V。若误配为GPIO或其他功能,将导致串口无法工作。
二、驱动与协议层调试
CH340驱动兼容性:
驱动安装验证:在设备管理器中确认CH340被正确识别为USB Serial Port (COMx),无黄色感叹号。若显示“未知设备”,尝试更换USB线缆或重新安装驱动。
端口权限问题:Linux下访问串口设备需sudo权限或加入dialout用户组;Windows下检查安全软件是否拦截串口访问。
波特率与帧格式一致性:
XCOM参数配置:强制设定为115200 bps, 8N1(8位数据、无校验、1停止位),Flow Control设为None。部分开发板默认波特率可能为9600,需通过Xilinx SDK修改config.c中的baudrate参数。
回环测试:短接UART的TXD和RXD,本地发送数据应能自收发成功,排除硬件故障。
三、软件框架与中断处理优化
发送函数阻塞问题:
中断屏蔽机制:在调用XUartLite_Send()前关闭接收中断,防止AXI总线竞争导致的Data Abort错误。示例代码:
Xil_Out32(XPAR_PS7_UART_0_BASEADDR + 0x0C, 0x0); // 关闭中断使能寄存器
XUartLite_Send(InstancePtr, DataBufferPtr, NumBytes);
Xil_Out32(XPAR_PS7_UART_0_BASEADDR + 0x0C, 0x1); // 重新开启中断
非阻塞发送改造:使用DMA或轮询标志位替代中断驱动的发送逻辑,避免FIFO溢出。
内存映射与缓存策略:
禁用数据缓存:在关键发送路径上调用Xil_DCacheDisable(),防止CPU缓存与DDR内存数据不一致引发的异常。
缓冲区对齐要求:确保发送缓冲区的起始地址为16字节对齐,以满足AXI总线突发传输需求。
四、高级调试手段
JTAG在线仿真:
通过Xilinx SDK连接JTAG,单步执行至main()函数,观察UART控制寄存器(如XR_SR状态寄存器)的值变化,判断是否进入发送就绪状态。
读取BOOT_STATUS寄存器(地址0xF800025C),确认启动阶段是否因配置错误导致UART初始化失败。
日志追踪与断言定位:
在xuartps.h中启用调试宏#define XIL_PRINT_ERROR,捕获发送失败的具体原因(如超时、FIFO满等)。
使用逻辑分析仪抓取完整的UART帧序列,对比预期数据与实际波形差异。
总之,优先检查物理连接和驱动安装,随后通过JTAG单步调试定位软件阻塞点。若涉及PL端自定义IP核,需重点审查AXI总线仲裁策略。 |
|