Epson 打印机的 4 字节校验和、sum32 算法

BVJ*_*BVJ 4 checksum low-level epson

我正在 Linux 设备上编写与 Epson tm-t88iv 热敏打印机的低级通信,该打印机仅接收十六进制包。我已阅读手册试图了解校验和是如何构建的,但我无法重新创建它。

手册上说校验和是 4 个字节,表示发送的包中所有数据的 2 个字节之和。

我目前有四个工作示例,是通过使用不同的程序监听 Windows 计算机上的端口而找到的。最后 4 个十六进制是校验和(根据手册,03 标记数据的结束并包含在校验和计算中)。

02 AC 00 01 1C 00 00 03 30 30 43 45
02 AC 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 31
02 AD 07 01 1C 00 00 1C 31 30 03 30 31 35 33
02 AD 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 32
Run Code Online (Sandbox Code Playgroud)

我在某处读到有一个 sum32 算法,但我找不到它的任何示例或如何对其进行编程。

BVJ*_*BVJ 6

哇,这是一个糟糕的算法!如果其他人发现自己试图理解爱普生糟糕的低级通信手册,那么校验和是这样完成的:

  1. 校验和基数为 30 30 30 30
  2. 对所有数据包进行十六进制求和(例如,02+89+00+00+1C+80+80+1C+00+01+1C+09+0C+1C+03 = 214)
  3. 然后将结果逐位分开,如果是字母,则在值上加 1(例如 B2 将是 2|1|4)。
  4. 按从右到左开始的数字将其与校验和基数相加(这将是 30 32 31 34 的校验和)。

注意:它工作得很好,但由于某种原因,我上面发布的示例似乎不太匹配。它们都是打印机的响应,但不久后出现硬件问题,必须由技术支持人员重新格式化,所以也许它得到了修复。

我希望它能帮助某个地方的人。