What standard UART rates are there?

  • I know 9600, 19200, 38400, 57600, 115200 and 1.8432 Mbaud, but no others. Why are these values used, and is it simply doubling each time or is there something more complex going on (for example, 38400 quadrupled is not 115200 baud?)

    The reason I ask this question is I'm designing something which may have to interact with a variety of different baud rates. It will initialise in 9600, and then switch to a specific baud rate. But I can't support arbitrary rates because the dsPIC33F I am using does not support arbitrary rates as it is limited to a 16-bit BRG down counter. It's similar in this regard to many other processors.

    In practice a 16 bit counter plus pre/post scalers is more than sufficient to get "close enough" to arbitrary baud rates. UART serial can tolerate slight baud rate mismatches.

    The uart starts in the middle of the START bit and must stay near the middle of the STOP bit after serializing 7-10 bits. Which makes a minimal clock precision of around 2-3%, preferably better to handle noise, jitter, deviations in the source frequency...

  • It started a long long time ago with teletypes — I think 75 baud. Then it's been mostly doubling ever since, with a few fractional (x1.5) multiples, for example 28,800, where there were constraints on phone-line modem tech that didn't quite allow it to double.

    Standard crystal values came from these early baudrates, and their availability dictates future rates. E.g.,

    \$\begin{align}{7.3728 \,\mathrm{MHz} \over 16} &= 460,800 \;\text{baud}\\\\{7.3728 \,\mathrm{MHz} \over 64} &= 115,200 \,\text{baud}.\end{align}\$

    Most UARTS use a clock of \$2^n \times 16\$ of the baudrate, more modern parts (e.g. NXP LPC) have fractional dividers to get a wider range by using non-binary multiples.

    Other common standards are 31,250 (MIDI) and 250K (DMX), both likely chosen as nice multiples of 'round' clocks like 1MHz etc.

    I don't think fractional dividers are for getting nonstandard bitrates, but rather standard bitrates from nonstandard MCU clock frequencies.

    I refurbished two year 1926 teletypes, back in college (1976) and yes they ran at about 75 baud. They were labeled baudot teletypes. Plugged into 110vac and a motor provided the timing, with electrical connection between them. I dunked them in gasoline to clean them. (Give me a break -- I was 18. But it worked!) Ctrl-G rang an honest to goodness bell at the other. Alas, I don't even remember who I gave them away to. :-( So, yeah, you'd type on the mechanical keyboard, it would mechanically serialize your keystrokes, and make-and-break a contact which the other side read.

    Yay, the Roaring '20's! What quality technology to last 50 years, and wind up in John Silva's shed in Hayward, California.

  • RealTerm, a freeware Windows terminal program, lists these UART rates in its Baud menu:

    110, 150, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600

    However these are actually bits per second (bps), not baud -- see below.

    110 baud was used by 8-level Teletypes like the ASR-33. I'm not aware where 150 Baud was used, but it is a doubling of 75 baud, commonly used (along with 60 baud) for 5-level TTYs.

    300 bps was the standard for the first widely-used telephone modems in the 1960's. A number of 30 character per second terminals appeared at the same time.

    Above 300 bps/300 baud, which used simple frequency shift keying (FSK), the figures for bps and baud (symbols or tones per second) are not the same. For example, a 1200 bps modem actually runs at 600 baud, and a 4800 bps modem runs at 1600 baud. Refer to the table under Bandwidths in this article. The difference is because in addition to using a certain number of tone pulses per second, phase-shift keying and other methods are used to extract additional bandwidth from the same baud rate to get higher and higher bps. (So a 56K modem is actually only running at 8000 baud.)

    As you can see, the list of UART rates essentially started at 75 and continually doubled (skipping 600), until getting to 38400, where it was multiplied by 1.5 to get 57600. 56K bps is the limit for an analog telephone line. The higher rates 115200 upwards (once again doubling starting at 57600) are used for hard-wired connections.

    As mikeselectricstuff mentioned, 14400 and 28800 bps were introduced as 1.5 x 9600 and 1.5 x 19200 when modems speeds couldn't be doubled at the time, but are seldom used anymore.

    Not to be pedantic, but the program can only support what speeds the hardware allows. It may not even bother asking and just list off the standard speeds. Asking my hardware, `zip(*serial.Serial('COM10').getSupportedBaudrates())`, it replies: `(50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200)`

    I used a 600 bit/s half duplex acoustic coupler in the eighties. 75 bit/s was used in the german BTX system in the upload direction for a long time, download was at 1200 bit/s.

    I've also seen 62.5 kbaud. Actually, it also depends on your main clock, you can calculate what baudrates will lead to a sufficiently low error.

  • For a long time, it has been common to use submultiples of 115,200 for communication--either power-of-two submultiples of 38,400 or else 57,600 or 115,200. Most PC hardware supports those rates. Some PC hardware can support 230,400 or 460,800. Note that many embedded controllers like data rates which are sub-multiples of their own clock speeds, and some USB-to-serial chips can support any integer submultiple of 3,000,000bps, so speeds like 1,000,000bps or 1,500,000bps will probably become more common for devices to connect to PCs via USB chips.

    BTW, one other rate worth mentioning: 31,250bps is the rate used for standard MIDI.

  • The original IBM PC had a 8250 UART. This took a 1.8432 MHZ clock and divided that by some integer to generate its internal clock, and that clock runs at 16 cycles to the bit.

    Setting 1 in the divisor register gets you 115,200, 2 gets 57,600, 3 gets 38,400, 6 gets 19,200, etc.

    Your best bet is using a clock that runs at some multiple of 1.8432 MHz with the DSPIC.

License under CC-BY-SA with attribution

Content dated before 6/26/2020 9:53 AM