【干货】示波器扒串口数据
原文来自:24c01硬件电子
有时候没有逻辑分析仪,恰恰示波器也没买串口解析的功能,那么如何扒串口数据呢?(以下文章也适用于RS485,因为基本差不多)
首先介绍一下串口数据帧的组成:起始位1bit(低电平),数据位8bit,奇偶校验位(一般不加),停止位1bit(高电平)。
1bit起始位+8bit数据位+1bit停止位(大多数都是这样)
首先看第一位低电平,是起始位,通过读格子,大概可以看出是100us一个bit位,那么反推回去1s/100us≈9600波特率(实际上我设置的也就是9600波特率),9600波特率下的1bit时间为1/9600≈104us。
所以按照串口数据帧的格式,可以将数据大概扒出来,如下图:
然后串口数据格式一般是LSB,即低位在前高位在后,所以去掉起始位和停止位后,这两帧数据分别为:
然后再根据8421BCD码的编码方式,反推回去就是:
数据帧格式为:1bit起始位+8bit数据位+1bit奇偶校验位+1bit停止位比如数据位为 0011 0101 (35)总共有4个1,那么奇偶校验位就应该为1,这样才可以保证总共1的个数为奇数。
比如数据位为 0111 0101(75)总共有5个1,那么奇偶校验位就应该为0,这样才可以保证总共1的个数为奇数。数据帧格式为:1bit起始位+8bit数据位+1bit奇偶校验位+1bit停止位那么,这次不发送3574了,我使用串口发送3575,然后调到奇校验:
然后抓取示波器波形,可以看到和之前举的例子一样,第一帧8bit的数据位里有4个1,为了保证有奇数个1,所以校验位为1,这样8bit数据位+1bit校验位的1的总数就为5,是奇数了;第二帧数据里8bit数据里有5个1,所以校验位为0,也是保证最后有奇数个1:(偶校验类似,不在举例)