========================================================== 試験機 G3-M1 -- カーネル 4.9-at3 ========================================================== ------------------------------ テストソース rs232c.py ------------------------------ #!/usr/bin/python # -*- coding: utf-8 -*- import serial import time import datetime ser = serial.Serial('/dev/ttymxc0', 115200, timeout=None, rtscts=True, parity=serial.PARITY_EVEN) while(1): line = ser.read(20) print(datetime.datetime.now()) print(line) time.sleep(1) ser.write(b'12345678901234567890\n') time.sleep(0.5) ser.close() ------------------------------ ------------------------------ テストソース rs485.py -- '&'を付けてバックグラウンドで実行 ------------------------------ #!/usr/bin/python # -*- coding: utf-8 -*- import serial import time ser = serial.Serial('/dev/ttymxc1', 38400, timeout=None, rtscts=True, parity=serial.PARITY_EVEN) while(1): ser.write(b'12345678901234567890\n') time.sleep(2) ser.close() ------------------------------ ※ RS=485で"rtscts=True"にしているのは問題ありかも・・・? コンソール表示 ※ 左端のタイムスタンプはTeraTermのログによるもの [Fri Dec 07 01:52:04.461 2018] 2018-12-07 01:51:55.252796 [Fri Dec 07 01:52:04.461 2018] 1234567890abcdefghij [Fri Dec 07 01:52:04.470 2018] 2018-12-07 01:51:57.253776 [Fri Dec 07 01:52:04.470 2018] 1234567890abcdefghij [Fri Dec 07 01:52:04.470 2018] 2018-12-07 01:51:59.256107 [Fri Dec 07 01:52:04.470 2018] 1234567890abcdefghij ... [Fri Dec 07 03:12:53.351 2018] 2018-12-07 03:12:57.435422 [Fri Dec 07 03:12:53.351 2018] 1234567890abcdefghij [Fri Dec 07 03:12:55.358 2018] 2018-12-07 03:12:59.437786 [Fri Dec 07 03:12:55.358 2018] 1234567890abcdefghij [Fri Dec 07 03:12:57.353 2018] 2018-12-07 03:13:01.439999 [Fri Dec 07 03:12:57.353 2018] 1234567890abcdefghij [Fri Dec 07 03:12:59.364 2018] 2018-12-07 03:13:03.442198 [Fri Dec 07 03:12:59.364 2018] 1234567890abcdefghij ここで表示停止。 しばらく放置後、CTRL-Cで停止 ^CTraceback (most recent call last): File "./rs232c.py", line 8, in line = ser.read(20) File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 483, in read ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left()) KeyboardInterrupt ※ タイムアウトなし設定のread()で停止していた ※ 相手機が送信しなくなったので、read()でブロックしたものと思われる バックグラウンドのrs485.pyをフロントに戻して、CTRL-Cで停止 # fg ./rs485.py ^CTraceback (most recent call last): File "./rs485.py", line 8, in ser.write(b'12345678901234567890\n') File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 556, in write abort, ready, _ = select.select([self.pipe_abort_write_r], [self.fd], [], None) KeyboardInterrupt ※ write()で停止していた この時刻のころの/proc/tty/driver/IMX-uartを1秒ごとに記録したもの: Fri Dec 7 03:12:59 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67311 rx:64470 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65835 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185475 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:00 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67332 rx:64470 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65835 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185475 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:01 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67332 rx:64490 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65856 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185525 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:02 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67353 rx:64490 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65856 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185525 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:03 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67353 rx:64510 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65877 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185575 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:04 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67374 rx:64510 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65877 rx:0 CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185575 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:05 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67374 rx:64510 RTS|CTS|DTR|DSR|CD <=== rxが増えていない 1: uart:IMX mmio:0x30890000 irq:286 tx:65877 rx:0 RTS|CTS|DTR|DSR|CD <=== txが増えていない、RTS=ON 4: uart:IMX mmio:0x30A70000 irq:45 tx:185575 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD ※ '0:'のRTSがONのまま変化していないが、相手機のCTSが落ちていて、 相手機の送信が停止してる(本機のrxが増えていない)ので、 実際にはRTSはOFFになっているのかもしれない。 ※ '1:'の送信が停止し、RTSがONになっている Fri Dec 7 03:13:06 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67374 rx:64510 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65877 rx:0 RTS|CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185575 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD Fri Dec 7 03:13:07 JST 2018 serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:67374 rx:64510 RTS|CTS|DTR|DSR|CD 1: uart:IMX mmio:0x30890000 irq:286 tx:65877 rx:0 RTS|CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:185575 rx:692 brk:1 RTS|CTS|DTR|DSR|CD 6: uart:IMX mmio:0x30A90000 irq:46 tx:0 rx:0 CTS|DSR|CD ========================================================== 相手機 G3(旧) -- カーネル 4.9-at2 ========================================================== ------------------------------ テストソース rs232c.py -- timeout=0に設定 ------------------------------ #!/usr/bin/python # -*- coding: utf-8 -*- import serial import time import datetime ser = serial.Serial('/dev/ttymxc0', 115200, timeout=0, rtscts=True, parity=serial.PARITY_EVEN) while(1): time.sleep(2) print(datetime.datetime.now()) print(ser.read(64)) ser.write(b'1234567890abcdefghij') ser.close() ------------------------------ コンソール表示 ※ 左端のタイムスタンプはTeraTermのログによるもの [Fri Dec 07 01:52:35.403 2018] 2018-12-07 01:52:27.204101 [Fri Dec 07 01:52:35.403 2018] 12345678901234567890 [Fri Dec 07 01:52:35.403 2018] [Fri Dec 07 01:52:35.409 2018] 2018-12-07 01:52:29.206445 [Fri Dec 07 01:52:35.409 2018] 12345678901234567890 [Fri Dec 07 01:52:35.409 2018] [Fri Dec 07 01:52:35.409 2018] 2018-12-07 01:52:31.208782 [Fri Dec 07 01:52:35.409 2018] 12345678901234567890 [Fri Dec 07 01:52:35.409 2018] ... [Fri Dec 07 03:12:53.351 2018] 2018-12-07 03:12:57.241236 [Fri Dec 07 03:12:53.351 2018] 12345678901234567890 [Fri Dec 07 03:12:53.351 2018] [Fri Dec 07 03:12:55.344 2018] 2018-12-07 03:12:59.243820 [Fri Dec 07 03:12:55.344 2018] 12345678901234567890 [Fri Dec 07 03:12:55.360 2018] [Fri Dec 07 03:12:57.353 2018] 2018-12-07 03:13:01.245951 [Fri Dec 07 03:12:57.353 2018] 12345678901234567890 [Fri Dec 07 03:12:57.353 2018] [Fri Dec 07 03:12:59.345 2018] 2018-12-07 03:13:03.248124 [Fri Dec 07 03:12:59.364 2018] 12345678901234567890 [Fri Dec 07 03:12:59.364 2018] [Fri Dec 07 03:13:01.357 2018] 2018-12-07 03:13:05.250308 [Fri Dec 07 03:13:01.357 2018] 12345678901234567890 [Fri Dec 07 03:13:01.357 2018] [Fri Dec 07 03:13:03.350 2018] 2018-12-07 03:13:07.252487 [Fri Dec 07 03:13:03.367 2018] [Fri Dec 07 03:13:05.362 2018] 2018-12-07 03:13:09.254662 [Fri Dec 07 03:13:05.362 2018] [Fri Dec 07 03:13:07.355 2018] 2018-12-07 03:13:11.256959 [Fri Dec 07 03:13:07.372 2018] [Fri Dec 07 03:13:09.366 2018] 2018-12-07 03:13:13.259108 [Fri Dec 07 03:13:09.366 2018] [Fri Dec 07 03:13:11.359 2018] 2018-12-07 03:13:15.261209 [Fri Dec 07 03:13:11.375 2018] [Fri Dec 07 03:13:13.369 2018] 2018-12-07 03:13:17.263323 [Fri Dec 07 03:13:13.369 2018] [Fri Dec 07 03:13:15.362 2018] 2018-12-07 03:13:19.265400 [Fri Dec 07 03:13:15.379 2018] [Fri Dec 07 03:13:17.373 2018] 2018-12-07 03:13:21.267467 [Fri Dec 07 03:13:17.373 2018] [Fri Dec 07 03:13:19.365 2018] 2018-12-07 03:13:23.269541 [Fri Dec 07 03:13:19.382 2018] [Fri Dec 07 03:13:21.377 2018] 2018-12-07 03:13:25.271599 [Fri Dec 07 03:13:21.377 2018] [Fri Dec 07 03:13:23.386 2018] 2018-12-07 03:13:27.273710 [Fri Dec 07 03:13:23.386 2018] [Fri Dec 07 03:13:25.379 2018] 2018-12-07 03:13:29.275845 [Fri Dec 07 03:13:25.379 2018] [Fri Dec 07 03:13:27.388 2018] 2018-12-07 03:13:31.278030 [Fri Dec 07 03:13:27.388 2018] ここで表示停止。 しばらく放置後、CTRL-Cで停止 ^CTraceback (most recent call last): File "./rs232c-peer.py", line 14, in ser.write(b'1234567890abcdefghij') File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 556, in write abort, ready, _ = select.select([self.pipe_abort_write_r], [self.fd], [], None) KeyboardInterrupt ※ write()で停止していた ※ CTSが落ちたために送信できなくなり、 送信バッファがいっぱいになってwrite()でブロックしたものと思われる # cat /proc/tty/driver/IMX-uart serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:64530 rx:67374 DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:192543 rx:1561 RTS|CTS|DTR|DSR|CD ※ CTSが落ちている ※ RTSも落ちてる -- なぜ? 試験開始直後は次のようになっていた。 # cat /proc/tty/driver/IMX-uart serinfo:1.0 driver revision: 0: uart:IMX mmio:0x30860000 irq:285 tx:120 rx:105 RTS|CTS|DTR|DSR|CD 4: uart:IMX mmio:0x30A70000 irq:45 tx:8054 rx:61 RTS|CTS|DTR|DSR|CD