串口波形分析
- 串行数据的格式
异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5、6、7、8位,停止位可以是1、1.5、2位。
起始位是一个值为0的位,所以对于正逻辑的TTL电平,起始位是一位时间的低电平;停止位是值为1的位,所以对于正逻辑的TTL电平,停止位是高电平。对于负逻辑(如RS-232电平)则相反。
例如,对于16进制数据0X5A的数据传输波形,数据格式是,波特率:115200,数据位:8,停止位1,校验:无。它在信号线上的波形如下图所示。
2. 7位数据传输
一般数据的传输都会定义成8位的格式,一些特殊的领域会用到数据位为5,6,7,位的格式;
比如:一些plc设备,会用到5位的数据格式,又如海用电子设备标准格式(NMEA-0183 协议)的数据位是6位;虽然真实用来显示的数据会合成8位,但是他们在数据传输的时候用的是5,6,7的数据格式;
我们从波形上来分析,特殊位的数据传输是什么样的格式;数据位不是8位的时候,从高位开始丢数据,比如5位数据格式,高3位丢掉,数据最大只能是 _ _ _1 1111;6位的数据格式,_ _ 11 1111;7位数据_111 1111;高位丢掉,丢掉的数据默认当做0;因此5位的数据最大数是0001 1111(0x1f),6位数据0011 1111(0x3f),7位数据0111 1111(0x7f); 用7位的数据抓个波,举个栗子;
完整的一帧数据是 0 0101 101_ 1 一头一尾表示起始结束,不当数据用;0101 101_ 是真实的数据;丢去的数据补零,合成0101 1010,那么数据是0x5a;注意高位在前,低位在后面;
我们换个数据来做测试;
比如用0XCA;发送到串口,数据变成了0x4A;
波形如下图
3. 6位数据传输
6位数据传输,丢去高2位;比如,传输0xCA;数据传输后得到的是0x0A
换个数据测试0X5A;数据发出去之后,接收到的数据是0x1A;
一般的串口助手,只能做到接收7位,8位的数据,配置成接收5,6位数据时候,软件打开错误,如下图提示;后来我自己写了个串口助手,当数据位配置成5,6位时也出错;不知道是不是微软不支持;
4. 5位数据传输
5位数据传输,丢去高3位;比如,传输0x5A;数据传输后得到的是0x1A
换个数据测试0X3c;数据发出去之后,接收到的数据是0x1c;