我已经实现了 CCNET 协议,以便通过 Linux 上的软件与 CashCode 纸币接受器进行通信。
最初,我花了很多时间试图弄清楚为什么设备不响应我发送的命令。使用反复试验的方法,我找到了为串行端口设置以下选项的解决方案:
stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb clocal -crtscts -ixon -ixoff ignpar -icrnl -opost -isig -icanon -iexten -echo
它正在开发机器和另外两台测试机器上运行(它们都有不同的主板)。然而,在第三台测试机(还有另一个主板)上,设备似乎不再响应。
然而,它可以在同一台机器上使用不同软件的 Windows 上运行。
“不响应”是指发送命令后 10 秒超时期间无法从串行端口读取任何内容。整个代码已经过测试并可以在另一块主板上运行。
内核正确检测到端口本身,如 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即可解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)