linux - 在 Linux 中与 CashCode 账单接受器通信

标签 linux serial-port

我已经实现了 CCNET 协议(protocol),以便通过我在 Linux 上的软件与 CashCode 账单接受器进行通信。 最初我花了很多时间试图弄清楚为什么设备不响应​​我发送的命令。使用反复试验的方法,我找到了为串行端口设置以下选项的解决方案:

stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb clocal -crtscts -ixon -ixoff ignpar -icrnl -opost -isig -icanon -iexten -echo

它在开发机器和另外两台测试机器上工作(它们都有不同的主板)。但是,在第三台测试机(还有另一个主板)上,设备似乎没有再次响应。 但是,它在同一台机器上使用不同的软件在 Windows 上运行。

在“不响应”下,我的意思是在发送命令后的 10 秒超时期间无法从串口读取任何内容。整个代码已经过测试,可以在另一 block 主板上运行。 如 dmesg 中所述,内核正确检测到端口本身:

[    1.099382] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.127531] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

dmesg 中没有关于此串行端口的警告。 关于如何调试此问题的任何想法?

“stty -F/dev/ttyS0”的完整输出:

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

最佳答案

问题解决了。 该款钞票接受器以 19200 波特率工作。 将端口切换到 19200 即可解决问题。

关于linux - 在 Linux 中与 CashCode 账单接受器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26866654/

相关文章:

networking - Linux 2.4 中的 TCP/IP over Serial (slattach)

python - 我如何确保 Python while 循环需要特定的时间来运行?

linux - `/dev/ttyS0` 和 `/dev/ttys0` 之间的区别?

Linux串口1.5停止位

terminal - 使用并行/串行端口重定向将数据从终端桌面传输到本地计算机

linux - Ejabberd 将在线用户数限制为 64,464。描述符已经增加

linux - 你如何取消 crontab 中的 MAILTO?

linux - 从shell脚本中的目录获取文件名

linux - Flask、Nginx、Gunicorn Stack 启动 Selenium 实例

linux - 自动重启崩溃的 Linux 守护进程