3.18. UART-grunder

En UART (Universal Asynchronous Receiver-Transmitter) är det äldsta och enklaste sättet att flytta byte mellan två mikrokontroller, eller mellan en mikrokontroller och en värd-PC. Två ledningar bär datan – en för varje riktning – och en gemensam jord returnerar signalen. Ingen av sidorna kör en gemensam klocka; de kommer överens om en baudhastighet i förväg och återskapar bittajmningen från själva dataledningen.

3.18.1. Bitramen

Varje tecken på ledningen är inkapslat i en bitram: en startbit, databitarna, en valfri paritetsbit och en eller två stoppbitar.

En vågform för en UART-bitram. Signalen ligger inaktiv och hög till vänster, faller låg under en bittid (startbiten), bär sedan åtta databitar i följd och återgår sedan till hög under en bittid (stoppbiten) innan den återgår till inaktivt läge.

En UART-bitram: en startbit, åtta databitar och en stoppbit, var och en en bitperiod (1 / baudrate sekunder) bred.

Ledningen ligger inaktiv och hög. Mottagaren bevakar en fallande flank, som markerar början på en ny bitram. Den samplar sedan dataledningen en gång per bitperiod – vanligtvis i mitten av varje bit – och sätter ihop bitarna till ett tecken. Stoppbiten återför ledningen till inaktivt läge så att nästa startbit kan upptäckas.

3.18.2. Baudhastigheten

Bitperioden – och länkens hastighet – bestäms av baudhastigheten, antalet bitar per sekund. 9600, 19200, 38400, 57600, 115200, 230400, 460800 och 921600 är standardvärdena; 115200 är den vanligaste standardinställningen. Båda ändarna måste komma överens om baudhastigheten inom några procent, annars samplar mottagaren bitarna på fel punkter och datan kommer tillbaka förvanskad.

Högre baudhastigheter flyttar mer data per sekund men är känsligare för kabellängd, kapacitans och precisionen hos klockorna i varje ände. För korta länkar mellan två kort på samma arbetsbänk fungerar 115200 till 921600 utan problem.

3.18.3. Kabeldragning

En UART-länk använder tre ledningar:

Två kort märkta A och B, sammankopplade med tre ledningar. Kort A:s TX-stift ansluts till kort B:s RX-stift; kort B:s TX-stift ansluts till kort A:s RX-stift; och båda kortens jordstift är hopkopplade.

UART-kabeldragning: TX på ett kort går till RX på det andra, och båda jordarna är hopkopplade.

  • TX → RX, åt båda hållen. Varje korts sändstift är det andra kortets mottagstift. Ett vanligt nybörjarmisstag är att koppla TX → TX – två utgångar som kämpar mot varandra, utan data på någon mottagare.

  • Gemensam jord. Signalnivåerna refereras till jord, så de två korten måste ha en gemensam jord, annars ser mottagaren fel spänning på ledningen.

3.18.4. Spänningsnivåer och fysiska lager

Signalnivåerna på kamerans UART-stift är 3,3 V CMOS: jord för en logisk nolla, 3,3 V för en logisk etta. Allt som talar 3,3 V CMOS UART – en annan mikrokontroller, en USB-till-seriell-adapter inställd på 3,3 V, en 3,3 V GPS-modul – kan kopplas direkt.

Anteckning

5 V CMOS UART-enheter (äldre mikrokontroller, vissa GPS-moduler, en del äldre sensor-breakouts) talar samma UART-bitramsformat på 5 V logiknivåer. Att koppla dem direkt till kameran är osäkert: en 5 V TX som driver kamerans RX överskrider den absoluta maximala inspänningen på kameror som inte är 5 V-toleranta, och kamerans 3,3 V TX når kanske inte 5 V-enhetens höga tröskel för en ren logisk etta.

Att översätta mellan de två spänningarna kräver en aktiv linjedrivare – en dedikerad dubbelriktad nivåskiftar-IC med egna drivtransistorer på båda sidor av varje ledning. De passiva MOSFET-och-pull-up-skiftarna från Nivåomvandling räcker inte här: deras stigande flanker bygger på att ladda ledningen genom ett motstånd, vilket är fint vid omkopplingshastigheter men alldeles för långsamt för UART. Vid 115200 baud varar varje bit ungefär 8 µs, och den passiva skiftarens RC-stigtid smetar ut en bit in i nästa.

En aktiv linjedrivare producerar rena flanker i båda riktningarna vid full UART-hastighet. Välj en komponent som är klassad för den baudhastighet som länken ska köra på, koppla kamerans TX och RX till skiftarens 3,3 V-sida, och koppla 5 V-enhetens TX och RX till skiftarens 5 V-sida.

Tre äldre fysiska lager använder samma bitramsformat men olika spänningar, och behöver en nivåomvandlare mellan dem och en 3,3 V mikrokontroller:

  • RS-232. Används av serieportar på stationära PC och en del industriell utrustning. Ledningen svänger mellan ungefär ±5 V och ±15 V, med inaktivt läge vid den negativa skenan. Inverterad polaritet och hög spänning jämfört med CMOS; ett chip från MAX232 / MAX3232-familjen (eller liknande) sköter omvandlingen.

  • RS-422. En differentiell signaleringsstandard för punkt-till-punkt-länkar (en drivare, upp till tio mottagare). Drivaren sänder på ett balanserat ledningspar; mottagaren ser skillnaden mellan dem och ignorerar gemensamt brus längs vägen. Fullduplexlänkar använder två par – ett för varje riktning. RS-422 når tiotals meter upp till en kilometer beroende på baudhastigheten, och ett RS-422-transceiverchip sitter mellan kamerans TX / RX och det balanserade paret.

  • RS-485. RS-422:s flerpunktskusin – samma differentiella signalering, men utformad för att placera upp till 32 drivare och mottagare på en buss. De flesta länkar är halvduplex på ett enda par, där varje nods drivare och mottagare delar samma ledningar och mjukvaran avgör vem som talar. Används i industriella automationsbussar (Modbus, DMX512, Profibus) där ledningarna går långt och bruset är besvärligt; ett RS-485-transceiverchip sitter mellan kamerans TX / RX och det differentiella paret.

Båda skickar fortfarande UART-bitramar på den underliggande bitnivån. Kamerans machine.UART-konfiguration (baudhastighet, bitar, paritet, stoppbitar) är densamma oavsett vilket fysiskt lager som bär signalen på andra sidan av transceivern.