Articles

Seriële communicatie

Posted on
Bijdragers: jimblom

Favoriet Favoriet 88

Delen

Gebruik deze URL om te delen:

UARTs

Het laatste stukje van deze seriële puzzel is het vinden van iets dat zowel de seriële pakketten aanmaakt als de fysieke hardwarelijnen aanstuurt.

Een universele asynchrone ontvanger/transmitter (UART) is een blok schakelingen dat verantwoordelijk is voor de uitvoering van seriële communicatie. In wezen fungeert de UART als een intermediair tussen parallelle en seriële interfaces. Aan de ene kant van de UART zit een bus van acht of zo datalijnen (plus wat controle pinnen), aan de andere kant zitten de twee seriële draden – RX en TX.

Simplified UART
Super-simplified UART interface. Parallel aan de ene kant, serieel aan de andere.

UART’s bestaan als zelfstandige IC’s, maar ze zijn vaker te vinden in microcontrollers. U zult de datasheet van uw microcontroller moeten bekijken om te zien of deze UARTs heeft. Sommige hebben er geen, sommige hebben er een, sommige hebben er veel. Bijvoorbeeld, de Arduino Uno – gebaseerd op de “oude getrouwe” ATmega328 – heeft slechts een enkele UART, terwijl de Arduino Mega – gebouwd op een ATmega2560 – maar liefst vier UARTs heeft.

Zoals de R en T in het acroniem dicteren, zijn UARTs verantwoordelijk voor zowel het verzenden als ontvangen van seriële data. Aan de zendzijde moet een UART het datapakket samenstellen – met sync- en pariteitsbits – en dat pakket met een nauwkeurige timing (volgens de ingestelde baud-rate) over de TX-lijn zenden. Aan de ontvangstzijde moet de UART de RX-lijn bemonsteren met een snelheid die overeenkomt met de verwachte baudsnelheid, de sync-bits eruit pikken, en de gegevens uitspugen.

UART Intern
Intern UART-blokschema (met dank aan de Exar ST16C550 datasheet)

Meer geavanceerde UART’s kunnen hun ontvangen data in een buffer gooien, waar het kan blijven tot de microcontroller het komt halen. UART’s zullen hun gebufferde gegevens gewoonlijk vrijgeven op een first-in-first-out (FIFO) basis. Buffers kunnen zo klein zijn als een paar bits, of zo groot als duizenden bytes.

Software UARTs

Als een microcontroller geen UART heeft (of er niet genoeg heeft), kan de seriële interface bit-banged worden – direct bestuurd door de processor. Dit is de aanpak van Arduino bibliotheken zoals SoftwareSerial. Bit-banging is processor-intensief, en meestal niet zo precies als een UART, maar het werkt in een noodgeval!

Delen

Gebruik deze URL om te delen:

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *