解码串口通信
本文关键字:通信 串口 解码 | 更新日期: 2023-09-27 18:37:07
我希望在尝试编写一个软件时得到一些帮助,该软件将允许我从我拥有的串行磁卡读卡器读取数据。
我们有这个读卡器,它是一种非常古老的设备,我们用它来在我们的场地捕获我们的会员会员卡详细信息。读卡器有一个软件,用于下载卡详细信息(存储在读卡器上),然后将详细信息放在C驱动器上的文本文件中。我想写一些可以做同样事情的软件。
我可能吠错了树或希望太多,但任何帮助都会很棒。
到目前为止,我已经将读卡器连接到机器的串行端口,并运行了旧版软件并使用com端口监视器来捕获通信。 这就是我有点卡住的地方,想知道是否有人可以告诉我 Ive 捕获是否有用,并希望能为我指明正确的方向。
当读卡器上没有存储卡信息时,我运行了下载序列并捕获了此信息。
[12/06/2012 18:28:55] - Open port COM4
[12/06/2012 18:29:02] - Written data
31 00 01 00 00 00 32 1.....2
[12/06/2012 18:29:04] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55 1..........U
[12/06/2012 18:29:04] - Written data
33 00 01 00 00 00 34 3.....4
[12/06/2012 18:29:05] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00 3.............B.
00 43 00 00 63 00 00 00 01 51 .C..c....Q
[12/06/2012 18:29:06] - Written data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:29:08] - Read data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:29:08] - Written data
35 00 07 00 0c 06 0c 12 1c 36 00 00 be 5........6..¾
[12/06/2012 18:29:10] - Read data
35 00 01 00 00 00 36 5.....6
[12/06/2012 18:29:11] - Close port COM4
然后我刷了 1 张卡,所以读卡器将其存储在其内存中并再次运行下载,这次我得到了这个
[12/06/2012 18:31:23] - Open port COM4
[12/06/2012 18:31:48] - Written data
31 00 01 00 00 00 32 1.....2
[12/06/2012 18:31:50] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55 1..........U
[12/06/2012 18:31:51] - Written data
33 00 01 00 00 00 34 3.....4
[12/06/2012 18:31:53] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00 3.............B.
00 43 00 00 63 00 00 00 01 51 .C..c....Q
[12/06/2012 18:31:55] - Written data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:31:57] - Read data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:31:57] - Written data
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1 5...........¡
[12/06/2012 18:32:01] - Read data
35 00 01 00 00 00 36 5.....6
[12/06/2012 18:32:01] - Close port COM4
最后我刷了 3 张卡并再次运行下载并捕获了这个
[12/06/2012 18:30:21] - Open port COM4
[12/06/2012 18:30:22] - Written data
31 00 01 00 00 00 32 1.....2
[12/06/2012 18:30:24] - Read data
31 00 06 00 0c 06 0c 00 03 00 00 58 1..........X
[12/06/2012 18:30:24] - Written data
32 00 04 00 03 00 01 00 00 3a 2........:
[12/06/2012 18:30:26] - Read data
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00 2.........X(T.3.
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00 ..X(S–•...X(T.2.
05 07 ..
[12/06/2012 18:30:27] - Written data
33 00 01 00 00 00 34 3.....4
[12/06/2012 18:30:29] - Read data
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00 3.............B.
00 43 00 00 63 00 00 00 01 52 .C..c....R
[12/06/2012 18:30:30] - Written data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:30:41] - Read data
34 00 01 00 00 00 35 4.....5
[12/06/2012 18:30:41] - Written data
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f 5...........Ÿ
[12/06/2012 18:30:43] - Read data
35 00 01 00 00 00 36 5.....6
[12/06/2012 18:30:43] - Close port COM4
我所知道的是,旧版软件会检查设备是否已连接到所选的 com 端口,然后下载数据,然后从读卡器中清除数据
万一有帮助..如果我没有连接读卡器并尝试下载,则会收到此错误
命令0x31未发送
谁能对此有任何了解?
提前谢谢你。
这是一个非常典型的串行端口协议。 字节顺序是最小字节序。 前两个字节是块号,这是响应与请求匹配的方式以及如何检测数据包丢失。 接下来的两个字节是消息的长度(以字节为单位)。 消息中的字节紧随其后。 最后两个字节是校验和,即在整个消息中将字节相加的结果。 大端序出于某种奇怪的原因,afaict。
这只是协议帧规范,对于一个来说并不完美,因为它没有显示数据被打乱时会发生什么。 真正重要的是消息中的数据字节。 如果不联系制造商并获取规格,就无法找出这些字节的含义。
非常熟悉这些协议,我能想到的唯一处理方法是:
- 联系制造商,为您提供其软件实用程序用于与卡通信的API(消息传递格式)
- 对 API 协议进行反向工程。这可能需要付出巨大的努力来计算出所有数据字节,这意味着这些数据字节可以随着卡提供的功能数量呈指数级增长。一个好的开始是刷一张卡并记录数据并重新启动硬件,刷第二张卡,记录并重新启动,第三张卡也是如此。然后在二进制消息之间进行二进制差异,以找出从一张卡更改为另一张卡的字节。