Explaining a-, synchronous, SPI, I2C, TWI, 2/3 wire interface, Serial TX/RX

I have been reading about the different ways modules can connect to Arduino and then how those connections work, but must admit without professional training in microcontrollers and digital electronics I find the alphabet soup a bit confusing. Can someone help hash out the basics in a systemic table/bullet point format what the interfaces/links are and what of those acronyms are synonymous? So far my findings (perhaps incorrectly) are that:

  • The SPI is a synchronous 3 wire interface taking in fact 4 wires (SCLK - clock, MOSI - master to slave, MISO - back from slave to master [except in daisy chain option], SS - slave select line, pulled low when active) or more (+1 for each additional slave) to communicate, as well as +5 and GND. SPI requires assigning any of the Arduino digital pins in a sketch/code and can connect many devices on the bus. Examples of SPI modules that I have are:

  • SD card reader.

  • Daisy chaining / stringing MAX driver chips for 8x8 LED matrixes that don't use MISO wire back to Arduino. You can string up to four of those in line and have the MISO of Slave1 go to MOSI of Slave2 and so on.

  • The I2C is a synchronous 2 wire interface taking only two wires (SDA - data wire, SLC - clocking wire), as well as +5V and GND. I2C requires assigning addresses in a sketch/code of the device to communicate. The address can be found out with a utility code. Examples of I2C modules that I have are:

  • 1602, 16x2, 20x4, etc LCD controller module/breakout board

  • BMP180 barometric pressure sensor

  • MPR121 capacitive touch breakout board

  • COM port style TX/RX line pins that run at 5V while PC com port runs at 12V. There are TX0/RX0, TX1/RX1, TX2/RX2 pins on mega boards that allow connecting to other microcontrollers. I didn't get to use them yet.

The address can be found out with a utility code.

Can be found is correct, but usually you look that up in the datasheet.
I2C has the additional advantage that by design you’re able to connect devices with different voltage levels (5V and 3V3) to the same bus without destroying them because the lines are pulled up by resistors and not actively by the master or slave devices.

COM port style TX/RX line pins that run at 5V while PC com port runs at 12V.

PC (better RS232) has +/- 3-12V, the negative levels are usually the bigger problem than the voltage but you should never connect TTL UART devices directly to RS232, that’s correct. This interface is asynchronous which means that the timing is more critical. UART allows two way communication (bidirectional) with just two wires (they’re usually counted without the power wires Vcc and GND). Using chips as the MAX485 you can use these UART ports to communicate with RS-485 devices (used in ModBux for example).

I2C has two defined speeds (100kHz and 400kHz), SPI usually is much faster with speeds in the MHz range while the UART interface usually is the slowest variant with common speeds in the 1-100kHz range (although i can go higher up to some MHz).

The I2C is a synchronous 2 wire interface taking only two wires (SDA - data wire, SLC - clocking wire)

I2C is asynchronous as there is only one data line. You cannot transmit and receive data at the same time like you can with the SPI & UART interfaces.

I2C is asynchronous as there is only one data line. You cannot transmit and receive data at the same time like you can with the SPI & UART interfaces.

Synchronous is not the same as duplex or bidirectional. I2C is synchronous because the clock signal synchronizes the two communication partners but it's not fullduplex, it's a synchronous halfduplex communication.