When Serial Isn't RS-232, Geocaching with the Garmin GPS 95
terinstock.com
terinstock.com
Egregious rent seeking grifters at TIA demanding $165 per half-assed scanned copy[1] of a near 3-decade-old document that they couldn't even be bothered to properly OCR, and somehow IBM gets to shoulder the blame for the interoperability clusterfuck that ensued as everyone and their mother was profiting off their innovation?
Oh, come off it.
[1] https://store.accuristech.com/tia/standards/tia-tia-232-f?pr...
The general public at large already pays huge amounts of money to various standardization organizations, be it ISO, IEC, DIN, UL, whatever. The resulting works should be public domain, similar to patents.
And remember, with whatever it’s called, in addition to sending characters of various bit lengths, you can send a “break”.
UARTs are called universal because they can be configured to work with "any" asynchronous serial protocol (within their bounds), which usually means
- 1 start bit
- 5-9 data bits
- even or odd parity
- 1-2 or sometimes 3 stop bits
per frame. Hardware UARTs also typically oversample 16x, which is why simple software UARTs are often somewhat glitchy.
Split each byte in 4-bit nibbles and used the remaining data bit for not-quite-in-band-signalling.
The Wikipedia article [0] calls this category “asynchronous start-stop signaling” but has no source.
I guess the best term is “UART protocol”, despite the limited size of the “universe”, since it’s really just a de facto convention established by decades of chips called “UARTs”.
[0] https://en.wikipedia.org/wiki/Asynchronous_serial_communicat...
Serial is usually ascii, not always but usually. The different types of serial depend on things like duplexity and line noise, or lack thereof.
232 is -15v to 15v, 422 is -6 to 6, and 485 is -7 to 12
Not sure what you have in mind by “usually” ASCII, but it’s not the layer that serial links operate at, they’re just a dumb pipe.
In RS232, to contrast, the voltage defines the values, +/- 12V is also common and I think you can go pretty low while still meeting the standard.
ASCII is orthogonal, you can send anything over the serial link.
EDIT: apparently 3V-15V are the defined voltage levels (-3V - -15V) and drivers should tolerate up to +/-25V.
Old R422 drivers would smoke if you got more than 7 tenths of a volt difference. Which would happen if you had a open ground. Or lighting hit. Or some big motor turned on. We had an RS422 based system with 50 units on one pair. One of them was holding the line. Coworker unplugged each one till he found it. And half of them didn't work after that.
I am guessing when GPS was originally designed the designers didn’t anticipate that the 10 but counter would be an issue and/or proliferation of these consumer devices.
Since they could control their own equipment, maybe they thought the LNAV 10 bit counter was fine.
Or maybe they just assumed that some other source of information could disambiguate the week number.
For example:
1. The week rollover interval is almost co-prime with the number of weeks per year. If the user is given a way to override just the current day-of-month, the full current date and time can probably be disambiguated to within a ~255-year window. If the user is given a way to override just the current year, the current date and time can be exactly calculated.
2. A receiver with non-volatile storage can keep track of the last week number it has seen. If the week number at the next power-up is less than the previous value, it is likely that at least one week rollover has occurred. If the receiver is powered on at least once every few years, this would be a fairly reliable way to count the number of rollovers.
3. (NV storage again) Leap seconds are added at a rate of roughly 10 per 1024 weeks. If the number of leap seconds suddenly jumps, that may be a sign that a large amount of time has passed. This might be used to augment #2 to estimate the number of rollovers that have occurred. There are some reliability concerns here, as the earth seems to be slowing somewhat.
4. (NV storage again) GPS satellites do not (as far as I know) really have enough fuel to change which orbital plane (of the ~6) they are in. If the set of PRN-plane assignments do not match the assignments from last power-up, it is likely that large amount of time has passed (because it means that some satellites were retired and others launched).
All in all, it's a relatively minor problem. Most receivers just hard-code a minimum date in software and assume that they are within 20 years of that. Most of the time, nobody cares.
The Arbiter suffers from this: https://users.ece.cmu.edu/~dbrumley/pdf/Nighswander%20et%20a...
And someone went to silly lengths to fix a Furuno: https://tomverbeure.github.io/2024/08/18/Fixing-the-Symmetri...
Fun trivia, the Unix epoch rolls over in January of 2038, but the next GPS WNRO happens in Novermber of that same year. So some systems, if you hiccup the epoch past that, may immediately suffer Y2038 problems.
Since with the GPS 95 at worse I can pull the battery cell and clear the memory, I should try to see if it's Y2038 compatible (I'm guessing not).
https://developer.garmin.com/downloads/legacy/uploads/2015/0...
The NMEA organization published version 4.30 of the 0183 standard in December 2023. I dumped the firmware of the (software upgraded) GPS 95, it might be a cool project to replace the proprietary extensions with standard sentences from later revisions.
As for NMEA 2000, it's a completely different beast: a binary protocol sent in frames over a CAN bus. But as evidenced by NMEA continuing to update the 0183 standard, some industry is still using it.
Good times.