Hopefully the title isn’t too misleading. In-case you’re wondering, we’re not going to talk about implementing a 10,000 Ft serial line.. But we are going to look at serial protocols from quite a broad perspective.
Whats the difference between RS232, USART, UART, Serial, USB, CAN, SPI, I2C, JTAG, and 1-Wire protocols..?
First of all, lets clear up some confusion: They’re not all protocols. UART and USART are hardware modules that let you implement other serial protocols.
USART modules (Universal synchronous and asynchronous receiver-transmitter) are exactly as the name implies – its a module that Transmits and Receives serial data, so you don’t have to bit bang every time you want to implement a common serial protocol.
UART modules (Universal asynchronous receiver-transmitter) are exactly the same of USART modules, except they can’t handle Asynchronous (clockless) serial protocols.
As seen in the diagram above, serial communications broadly fall into one of two categories: Synchronous and Asynchronous. Here’s a table broadly classifying the most common serial protocols. Does this mean that all the protocols below implement a USART/UART module on an embedded system? Yes and No. You could probably implement most of the common protocols on a UART/USART module, but most embedded systems already come with specialized hardware (peripheral) to support the most common serial protocols, such as I2C, JTAG, USB, Etc, so you don’t have to worry about all the nitty-gritty of implementing the protocol, (as you would if you were to bit-bang the protocol), and they can run independently in the background on your device, so you’re application is free to continue processing until the peripheral needs more data.
How’s that for 10,000 Ft? If you have more questions, leave them in the comments below, with “serial” in the message (so i can filter them among the spam).
Cereal, from 10,000 ft..