串口数据解析出错问题分析
2019-07-13 19:49发布
生成海报
项目开发过程中遇到的串口数据解析出错问题分析并提出解决方案
2. 问题现象描述
主控下发的开关波形数据下面驱动板有时候能解析正确,有时候解析不正确,而且主控下发某些数据时候就都能解析正确,下发其它数据比如0044的时候,就解析不正确。表现形式就是比如主控下发让驱动板一致开通A上管,驱动板解析出来的数据应该是一直是高电平,但实际情况是,间隔一段时间,A上管的开关就会出现一个低电平。
3. 问题分析
针对上述问题,第一阶段实验分析:
² 对驱动板串口原始程序进行功能仿真和时序仿真,结果正确。
² 驱动板程序自发自收(环回)测试,结果正确。
² 用示波器抓发现上面主控发下来的数据变换的时候,解析出来的数据变化正好延迟一组,波形看的很明显。
² 主控发送特定数据的时候,解析错误的时候,但用示波器抓出来,发现前面的数据没有明显的错误。
² 编写测试软件对驱动板接收的数据进行分析,确定接收的数据有错误。
² 驱动板的接收模块重新编写,进行收发验证测试。
² 继续分析串口模块。
² 主控重新编写发送模块,进行测试验证。
² 修改串口通信协议,使串口数据由16位变8位验证。
4. 实验结果
经过对串口接收模块分析和验证,发现设计上的一个缺陷。缺陷如下:串口波特率2M HZ ,系统时钟20MHZ,一个串口数据宽度是10个系统时钟周期,目前出错的程序,在接收串行数据时,是在数据的从开始位置起的第8个系统实战采样,如图:
上述采样的问题存在如下问题:如果实际波形上升时间和下降时间超过2个系统时钟周期,则导致硬件电路采样到亚稳态,从而导致CPLD驱动接收模块接收数据错误,引起数据解析错误。由于上面的问题在程序功能仿真和时序仿真不能确定,因为仿真的输入输出波形都是理想波形,不存在上升时间和下降时间,所以上述仿真不能发现该问题。由于实际器件的上升时间和下降时间不一致,所以在第一阶段验证时,出现主控有的端口发送数据,驱动程序能正确的解析数据;不能正确接收和解析数据的的端口丢包数目不同。
针对发现的问题:对驱动程序进行改进,串口接收数据解析时,数据采样如下图:(在从开始位置起的第6个系统实战采样,即在数据的稳定期开始采样,确保数据可靠):
5. 总结
² 数据采样一定要在数据的稳定期进行,否则采样进入亚稳态,采样结果不能预期。
² 光模块的驱动电流越大,则数据传递带宽越小,传递的脉冲的上升和下降时间越大。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮