linux下与CashCode票据接受器的通信

linux下与CashCode票据接受器的通信,linux,serial-port,Linux,Serial Port,我已经在Linux上实现了CCNET协议,通过我的软件与现金代码票据接受器通信。 起初,我花了很多时间试图弄清楚为什么设备没有响应我发送的命令。使用试错法,我找到了为串行端口设置以下选项的解决方案: stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb clocal -crtscts -ixon -ixoff ignpar -icrnl -opost -isig -icanon -iexten -echo 它在开发机器和另外两台测试机器上工作(它们都有不同的主

我已经在Linux上实现了CCNET协议,通过我的软件与现金代码票据接受器通信。 起初,我花了很多时间试图弄清楚为什么设备没有响应我发送的命令。使用试错法,我找到了为串行端口设置以下选项的解决方案:

stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb clocal -crtscts -ixon -ixoff ignpar -icrnl -opost -isig -icanon -iexten -echo
它在开发机器和另外两台测试机器上工作(它们都有不同的主板)。然而,在第三台测试机上(还有另一台mobo),设备似乎没有再次响应。 然而,它在同一台机器上使用不同的软件在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”的完整输出:

速度9600波特;第0行;第0列;直线=0;
intr=^C;退出=^\;擦除=^?;杀死你;eof=^D;eol=;eol2=;swtch=;开始=^Q;停止=^S;susp=^Z;rprnt=^R;werase=^W;lnext=^V;
冲洗=^O;最小值=1;时间=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-echok-echonl-noflsh-xcase-tostop-echoprt echoctl echoke
问题已解决。 这种型号的票据接受器工作在19200波特。 将端口切换到19200解决了这个问题

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