Our test software using the console port to interact with the processor and run various test scripts. I noticed several test failures that showed a single character had been dropped from the PC to the SOM. These are not long commands 3-10 bytes. The kernel is dropping a single character at random from incoming console data. This messes up our automated testing and is not expected. The failure rate seems to be about 2 failed lines over a total of 64k lines. It seems like there might be more failures if lines are sent slower, though I haven't been able to quantify this.
I created a stress test script to test for these dropped characters. The script generates a 32byte random alphanumeric character string and sends it over the UART, it then reads the echo from the command and verifies it matches. Test setup requires logging into linux and running cat - > /dev/null to avoid bash from getting confused by all the incoming text.
Through testing, I was able to rule out the PC and USB-UART converter by trying various hardware. I was also able to reproduce this on the AM62 EVM.
PSEUDO CODE:
string errors = ""; for (int i = 0; i < Count; i++) { string line = RandomString(32); line = $"{i} {line}"; deviceStream.WriteLineFlush(line); // Readback echo string echo = deviceStream.ReadLine(); if (line.Trim() != echo.Trim()) { string error = $@"Error: Echo did not match Sent: {line} Echo: {echo} "; errors += error; Console.WriteLine(error); } }
Test failure example output:
Echo didn't match Sent: 1189 o8zm75Tr6TLAHe1A1g0cGifbMrcPppmp Echo: 118 o8zm75Tr6TLAHe1A1g0cGifbMrcPppmp Echo didn't match Sent: 917 DMuwSyu4m6lTqjnrS6bxQWiQHYWISrwW Echo: 917 DMuwSyu4m6lTqjnrS6bQWiQHYWISrwW