Weetje nog dat printers, muizen en modems dikke kabels hadden met van die enorme lompe connectoren? Degenen die letterlijk in uw computer moesten worden geschroefd? Die apparaten gebruikten waarschijnlijk UART’s om met uw computer te communiceren. Hoewel USB die oude kabels en connectoren bijna volledig heeft vervangen, behoren UART’s zeker niet tot het verleden. UART’s worden in veel doe-het-zelf elektronica projecten gebruikt om GPS modules, Bluetooth modules en RFID kaartlezer modules aan te sluiten op uw Raspberry Pi, Arduino, of andere microcontrollers.
UART staat voor Universal Asynchronous Receiver/Transmitter. Het is geen communicatieprotocol zoals SPI en I2C, maar een fysieke schakeling in een microcontroller of een stand-alone IC. Het belangrijkste doel van een UART is het zenden en ontvangen van seriële gegevens.
Eén van de beste dingen aan UART is dat het slechts twee draden gebruikt om gegevens tussen apparaten te verzenden. De principes achter UART zijn eenvoudig te begrijpen, maar als u deel één van deze serie, Basisprincipes van het SPI Communicatie Protocol, nog niet hebt gelezen, is dat misschien een goed begin.
Inleiding tot UART-communicatie
In UART-communicatie communiceren twee UART’s rechtstreeks met elkaar. De zendende UART converteert parallelle data van een besturingsapparaat zoals een CPU in seriële vorm, zendt deze in seriële vorm naar de ontvangende UART, die vervolgens de seriële data weer converteert in parallelle data voor het ontvangende apparaat. Er zijn slechts twee draden nodig om gegevens tussen twee UART’s te verzenden. De data stroomt van de Tx-pin van de zendende UART naar de Rx-pin van de ontvangende UART:
UARTs zenden data asynchroon, wat betekent dat er geen kloksignaal is om de output van bits door de zendende UART te synchroniseren met de sampling van bits door de ontvangende UART. In plaats van een kloksignaal voegt de zendende UART start- en stopbits toe aan het datapakket dat wordt overgedragen. Deze bits definiëren het begin en einde van het datapakket, zodat de ontvangende UART weet wanneer hij moet beginnen met het lezen van de bits.
Wanneer de ontvangende UART een startbit detecteert, begint hij de binnenkomende bits te lezen met een specifieke frequentie die bekend staat als de baudsnelheid. De baudsnelheid is een maat voor de snelheid van de gegevensoverdracht, uitgedrukt in bits per seconde (bps). Beide UART’s moeten met ongeveer dezelfde baudsnelheid werken. De baudsnelheid tussen de zendende en ontvangende UART kan slechts ongeveer 10% verschillen voordat de timing van de bits te ver uit elkaar gaat lopen.
Beide UART’s moeten ook worden geconfigureerd om dezelfde datapakketstructuur te zenden en te ontvangen.
Hoe UART werkt
De UART die data gaat zenden, ontvangt de data van een databus. De databus wordt gebruikt om gegevens naar de UART te zenden door een ander apparaat zoals een CPU, geheugen of microcontroller. De gegevens worden in parallelle vorm van de databus naar de zendende UART gestuurd. Nadat de zendende UART de parallelle data van de databus heeft gekregen, voegt hij een startbit, een pariteitsbit en een stopbit toe, waardoor het datapakket ontstaat. Vervolgens wordt het datapakket in serie uitgevoerd, bit voor bit op de Tx-pin. De ontvangende UART leest het datapakket bit voor bit op zijn Rx-pin. De ontvangende UART converteert vervolgens de gegevens terug naar parallelle vorm en verwijdert het startbit, pariteitsbit en stopbits. Tenslotte geeft de ontvangende UART het datapakket parallel door aan de databus aan de ontvangende kant:
De door UART verzonden gegevens worden in pakketten geordend. Elk pakket bevat 1 startbit, 5 tot 9 databits (afhankelijk van de UART), een optioneel pariteitsbit en 1 of 2 stopbits:
Startbit
De datatransmissielijn van de UART wordt normaal gesproken op een hoog spanningsniveau gehouden als er geen data wordt verzonden. Om de dataoverdracht te starten, trekt de zendende UART de transmissielijn van hoog naar laag gedurende één klokcyclus. Wanneer de ontvangende UART de overgang van hoog naar laag detecteert, begint hij de bits in het dataframe te lezen met de frequentie van de baud-rate.
Dataframe
Het dataframe bevat de eigenlijke data die wordt overgedragen. Het kan 5 bits tot 8 bits lang zijn als een pariteitsbit wordt gebruikt. Als er geen pariteitsbit wordt gebruikt, kan het data frame 9 bits lang zijn. In de meeste gevallen worden de gegevens verzonden met het minst significante bit eerst.
Pariteit
Pariteit beschrijft de evenheid of onevenheid van een getal. De pariteitsbit is een manier voor de ontvangende UART om te zien of de gegevens tijdens de transmissie zijn veranderd. Bits kunnen worden veranderd door elektromagnetische straling, onjuiste baudsnelheden of gegevensoverdracht over lange afstanden. Nadat de ontvangende UART het dataframe heeft gelezen, telt hij het aantal bits met een waarde van 1 en controleert of het totaal een even of oneven getal is. Als de pariteitsbit een 0 is (even pariteit), zou het totaal van de 1 bits in het dataframe een even aantal moeten zijn. Als de pariteitsbit een 1 is (oneven pariteit), moet het totaal van de 1 bits in het gegevensframe een oneven getal zijn. Als de pariteitsbit overeenkomt met de gegevens, weet de UART dat de transmissie foutloos was. Maar als het pariteitsbit een 0 is, en het totaal is oneven; of het pariteitsbit is een 1, en het totaal is even, dan weet de UART dat bits in het dataframe zijn veranderd.
Stop Bits
Om het einde van het datapakket aan te geven, drijft de zendende UART de datatransmissielijn van een lage spanning naar een hoge spanning voor tenminste twee bitduren.
Stappen van UART Transmissie
1. De zendende UART ontvangt parallel data van de databus:
2. De zendende UART voegt het startbit, pariteitsbit en stopbit toe aan het dataframe:
3. Het volledige pakket wordt serieel verzonden van de zendende UART naar de ontvangende UART. De ontvangende UART bemonstert de datalijn met de vooraf geconfigureerde baudsnelheid:
4. De ontvangende UART verwijdert het startbit, pariteitsbit en stopbit uit het dataframe:
5. De ontvangende UART zet de seriële gegevens weer om in parallelle gegevens en stuurt deze naar de databus aan de ontvangende kant:
Voordelen en nadelen van UART’s
Geen enkel communicatieprotocol is perfect, maar UART’s zijn behoorlijk goed in wat ze doen. Hier volgen enkele voor- en nadelen om u te helpen beslissen of ze al dan niet aan de behoeften van uw project voldoen:
Voordelen
- Gebruikt slechts twee draden
- Er is geen kloksignaal nodig
- Heeft een pariteitsbit om foutcontrole mogelijk te maken
- De structuur van het datapakket kan worden gewijzigd zolang beide zijden er maar op zijn ingesteld
- Goed gedocumenteerde en veel gebruikte methode
Nadelen
- De grootte van het dataframe is beperkt tot maximaal 9 bits
- Ondersteunt geen meervoudige slave of meervoudige master systemen
- De baudrates van elke UART moeten binnen 10% van elkaar liggen
Ga verder naar deel drie van deze serie, Basisprincipes van het I2C-communicatieprotocol om meer te leren over een andere manier waarop elektronische apparaten communiceren. Of als u dat nog niet gedaan heeft, bekijk dan deel één, Basisprincipes van het SPI Communicatie Protocol.