>> First, you're going to need to learn how to use systemd, and specifically, you're going to need to learn how to create, and use a startup service.
I happen to have used systemd startup services in a previous project so I can see how it would be useful for setting settings on startup. >> Second, you need a tool that is capable of working with serial devices at a "low level". Such as: https://manpages.debian.org/jessie/coreutils/stty.1.en.html and specifically this setting: This is the tool I was looking for and could not find, thank you. The default settings for the serial connection I am using are: root@beaglebone:~/reusable# stty --all 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 I can now use the stty command to set ixon on or off. root@beaglebone:~/reusable# stty -ixon root@beaglebone:~/reusable# stty --all 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 Unfortunately the data loss is the same regardless of whether ixon is enabled or disabled. Changing ixoff does not affect the data loss either. I tried setting crtscts and cdtrdsr but this is not permitted. root@beaglebone:~/reusable# stty crtscts stty: standard input: unable to perform all requested operations root@beaglebone:~/reusable# stty cdtrdsr stty: invalid argument `cdtrdsr' There is flow control regardless of what I do ============================================= There does appear to be flow control of some sort. I realised I can get debug information with the CPU LED. I can make the CPU light on the BBB light up for 2.4 seconds by running the following program on the PC. The fact that the CPU light turns off again indicates that there is some kind of flow control that pauses the computation when the buffer fills up. import time import serial.tools.list_ports # connect to the BBB serial port on Windows x = serial.Serial('COM9') x.read_all() x.write(b'python3.6 -c "while True: print(sum(i for i in range(1000)))"\n') # pause forever time.sleep(1_000_000) If I slow down the CPU wasting command like this: import time import serial.tools.list_ports # connect to the BBB serial port on Windows x = serial.Serial('COM9') x.read_all() x.write(b'python3.6 -c "while True: print(sum(i for i in range(10_000)))"\n') # pause forever time.sleep(1_000_000) Then the CPU LED stays lit for about 10x as long. This demonstrates that streaming on the beagle bone is stopped by a buffer filling up rather than a timer. Data loss only happens when the length of the data being written is not a multiple of 4 bytes ============================================================================================= As an example if I run the following program there is no data loss: import serial.tools.list_ports # connect to the BBB serial port on Windows x = serial.Serial('COM9') x.write(b'yes "123456"\n') while True: received = x.readline() if received != b'123456\r\n': print(received) But there is data loss if I run this: import serial.tools.list_ports # connect to the BBB serial port on Windows x = serial.Serial('COM9') x.write(b'yes "1234567"\n') while True: received = x.readline() if received != b'1234567\r\n': print(received) It prints: b'yes "1234567"\r\n' b'11234567\r\n' b'11234567\r\n' b'12234567\r\n' b'12334567\r\n' b'12345677\r\n' b'\n' b'\n' b'\n' b'\n' b'\n' b'\n' b'12345567\r\n' b'\n' b'12234567\r\n' b'\n' b'12334567\r\n' b'12344567\r\n' b'12344567\r\n' b'\n' b'\n' b'12344567\r\n' b'12234567\r\n' b'12345567\r\n' b'12345667\r\n' b'\n' b'\n' b'12234567\r\n' b'12334567\r\n' b'12234567\r\n' b'12345677\r\n' b'12334567\r\n' b'\n' b'12345677\r\n' b'1234567\r\r\n' b'\n' b'11234567\r\n' b'12234567\r\n' b'123234567\r\n' b'12234567\r\n' b'12334567\r\n' b'\n' b'12345677\r\n' b'1234567\r\r\n' b'12344567\r\n' b'\n' b'11234567\r\n' b'\n' b'12334567\r\n' b'12345667\r\n' b'12234567\r\n' Note that every error printed only contains single byte errors Conclusions =========== - The virtual serial port provided is a poor imitation of a real serial port. Every command to change any property of either end of the connection either fails or is ignored. - There is undocumented flow control somewhere behind the scenes outside my control. It is probably in a driver. - The flow control mechanism loses data if the data is not a multiple of 4 bytes long. -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/92aaee7e-c546-41a2-83e2-08ecfd7ed7e0%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
