一、串口通信测试的一个小技巧
1、工具
(1)Virtual Serial Port Driver,这是我网上下的一个虚拟串口产生工具。它每次可以在电脑上生产一对相互连通的虚拟串口。
其操作如下图所示:
点击 Add Pair,就可以新增一对串口,这对串口所表现出来的特性跟真实的串口差不多,只是每次在对串口2写入数据的时候,总是发送到串口3。而写入串口3的时候,串口2就会收到数据。这样一对串口,就跟两台PC串口直接连通一样。
(2)超级终端:可以对串口进行终端操作。
(3)串口调试器:可以监视串口所收到的所有数据。特别是能够十六进制显示,改善了超级终端特殊字符不能显示的缺点。
2、利用虚拟串口调试Ymodem协议
(1)首先利用Virtual Serial Port Driver在串口上生产了一对串口:COM2和COM3,我电脑上有一个物理串口COM1。在设备管理器中也可以看到这对串口。如下图所示;
(2)用超级终端打开串口2,设置波特率9600,8位数据,1位停止,无校验,无流控。设置这么低的速度主要是防止操作时超时情况的出现。
(3)用串口调试器打开串口3,设置与超级终端的一致。
(4)在超级终端选择发送文件选项,选择“一个小的txt文档”,“Ymodem协议”,点击发送。这个文本文档名为“abc.txt”,共20个字节,内容是“1234567890换行abcdefghij”。
(5)在串口调试器的十六进制输入模式下输入“43”,点击发送,实际发出去一个大写“C”,马上收到了超级终端送来的数据,如下图所示:
“01”表示“SOH”,一个128字节的数据包,“00”表示报的序号,“FF”是补码校验。“61-74”这段是文件名“abc.txt”,“32 32”表明文件的长度是“22”个字节,我的文件可见字符是20个,但是有一个换行符存在,根据windows的规则,该位置会存入“0D 0A”,表示“\r\n”回车换行。“32 16”表示这128字节的校验。
(6)串口调试器下,再次输入“6”,它就是“ACK”,然后再发一个大写字母C“43”,就会收到超级终端送来的第2个数据包,如下图所示:
“01”表示“SOH”,后面的“01”表示第一个数据包,“FE”是包序号的补码校验。接下来“31 – 39 30”表示数字,“0D 0A”表示换行,“61-6A”表示字母“从a到i”,后面“1A”是DOS系统里面文件结束符填充。“87 BA”是该数据包的“CRC校验”。
(7)串口调试器输入“6”表示“ACK”,然后,超级终端发来一个字符“04”,这个是Ymodem协议中的“EOT”,表明超级终端文件已经传输完,需要结束本次传输。串口调试器发一个“ACK”,再发一个“C”,开启新的传输,但是超级终端只有一个文件,所以接下来超级终端发了一个空的数据包。调试器输入“6”再次“ACK”,超级终端传输界面退出,表示文件传输完成。整个过程如下图所示:
“04”表示“EOT”,“01”表示“SOH”,“00”是新的一组数据包开始。最后两个“00 00”表示空数据包的“CRC校验值”中间正好128个字节。
(8)如果超级终端选择取消传输文件,则在超级终端里能够看到六个“18 18 18 18 18 18”,表明取消传输文件时,超级终端连发了六个“CANCEL”字符。
(9)同时我意外发现了,如果串口调试器发送“3”,会远程取消文件传输操作,这是在我看到的Ymodem协议里没有见过的。
再次测试,这“3”在第一次发“C”之前,和第二次发“C”之前是有效地,在文件传输过程中无效。
(10)观察接收方“NAK的情况。
由图可以看出,调试器向终端发送“15”,也就是“NAK”的时候,超级终端重发了数据。