While trying to setup PPP networking on my A3000, I noticed some odd behaviour from the serial port - it was sending a very short (one character-time) break before each transmission, which, depending on what serial device it was hooked up to, was getting interpreted as a NUL character, and/or causing the following character to get garbled - the attached oscilloscope trace is what I got when I tried to transmit a single lowercase 'a' at 1200 baud:CDP65C61 datasheet indicates that going directly from the "/RTS low, transmit interrupts disabled" state to "/RTS low, transmit interrupts enabled" may cause a break to be transmitted erroneously, and that to avoid this, software should transition through the "/RTS high, transmit interrupts disabled" state as an intermediate.
Looking at the SerialDeviceDriver module, it does not seem to implement this workaround, so I crudely patched it in and it seems to work as it should now, with no rogue breaks! I've attached a SparkFS archive of my patch code, with a pre-patched SerialDeviceDriver 0.22 module (the updated version recommended for RO3.10 and shipped with 3.11) included. Just in case it helps someone else in the same predicament![Smile :)]()
After a bit of puzzling, I think I found the problem: it's a bug/incompatibility specific to the RCA/Harris/Intersil CDP65C51, called out in the datasheet but not exactly obvious. Page 6 of the Looking at the SerialDeviceDriver module, it does not seem to implement this workaround, so I crudely patched it in and it seems to work as it should now, with no rogue breaks! I've attached a SparkFS archive of my patch code, with a pre-patched SerialDeviceDriver 0.22 module (the updated version recommended for RO3.10 and shipped with 3.11) included. Just in case it helps someone else in the same predicament

Statistics: Posted by rhalkyard — Tue May 28, 2024 2:58 am