SPI I2C UART- Communicatieprotocollen en gebruik
De ontwikkeling van microcontrollers is een kardinaal proces bij de assemblage van elektronica. Maar de invoer van seriële protocollen en communicatie-interfaces vergemakkelijken deze onderneming. In dit artikel willen we seriële communicatieprotocollen zoals de SPI I2C UART-interface en UART uitgebreid onderzoeken. We analyseren de kenmerken, voordelen, nadelen en voorbeelden van de seriële protocollen.
1. UART-interface
Wat is UART?
Afbeelding 1:Een UART-protocol op Arduino
Universele asynchrone ontvangst en verzending ( UART ) is een serieel communicatieprotocol dat hostcommunicatie met hulpapparatuur mogelijk maakt. In de eerste plaats maakt het seriële gegevensoverdracht mogelijk. Bovendien is het in staat tot asynchrone communicatie en bidirectionele transmissie.
Het eenvoudige protocol heeft ook twee datalijnen:het afhandelen van transmissie (Tx) en andere signaalontvangst (Rx). Meestal verloopt de signaaloverdracht via digitale pin 0, terwijl de ontvangst via digitale pin 1 gaat.
Het helpt ook bij het synchroniseren van het beheer van een computer en externe seriële apparaten.
Hoe werkt het?
Afbeelding 2:Een zelfgemaakt elektronisch USB UART-bord
In wezen beheert UART de signaalcommunicatie tussen twee apparaten via de volgende middelen:
- Eenvoudig
- Half duplex
- Volledig duplex
Simplex omvat unidirectionele gegevensoverdracht, terwijl half-duplex niet-simultane communicatie tussen twee apparaten in beide richtingen betekent. Ten slotte houdt een full-duplex gelijktijdige gegevensoverdracht in beide richtingen in.
Over het algemeen is er na verbinding gegevensoverdracht van de gegevenslijn van de verzendende UART naar de ontvangende UART. Het gebeurt via het volgende principe;
- Eerst converteert de verzendende UART de parallelle gegevens van een masterapparaat naar een seriële vorm voor overdracht naar de ontvangende UART. Op dezelfde manier verandert de ontvangende UART de seriële gegevens in parallelle gegevens voor gebruik door het aangesloten ontvangende apparaat.
- Omdat UART asynchrone communicatie met zich meebrengt, heeft het geen klokken. De UART genereert dus start- en stopbits om het begin en het einde van een bericht aan te geven.
- De twee UART's moeten met dezelfde BAUD-snelheid of UART-gegevensoverdrachtsnelheid werken. Idealiter is dit om een nauwkeurige timing van de databits te garanderen, aangezien een verschil van meer dan 10% de data onbruikbaar maakt.
UART-werkprotocol
Gegevensverzending en -ontvangst
- Voor verzending moet de verzendende UART gegevens ontvangen van een gegevensbus zoals een CPU.
- Vervolgens voegt het de drie bits toe, namelijk het startbit, pariteitsbit en stopbit. De drie vormen een datapakket dat via de TX-pin naar de ontvangende UART wordt verzonden.
- De gegevensoverdracht stopt nadat de gegevens in de verzendende UART zijn uitgeput.
Besturing onderbreken
Gegevensonderbrekingen zijn handig bij het automatisch verzenden van bufferinhoud. U kunt in de volgende scenario's om een interruptcontrole vragen:
- Gebruik het eerst wanneer u een FIFO (First in, First out) overloopfout, regeleindefout, framefout of een pariteitsfout ervaart.
- Activeer het ook tijdens het ontvangen, verzenden van gegevens of tijdens het ontvangen van een time-out.
FIFO-operatie
Fig 3. Een UART-interface op Arduino
UART-modules van de Stellaris-familie beschikken over twee FIFO's van 16 bytes, één voor gegevensontvangst en de andere voor verzending. U kunt ze ook op verschillende diepten configureren om verschillende interrupts te leveren. U kunt bijvoorbeeld 1/8 diepte, 1/4 diepte, 1/2 diepte, enz. hebben.
Werkproces van het verzenden van FIFO
- In de eerste plaats begint de gegevensoverdracht na het invoeren van gegevens. Omdat het tijdrovend is, is de gegevensinvoer ook continu totdat de verzendende FIFO vol is.
- Als deze vol is, moet u de gegevensinvoer stoppen, anders verliest u alle nieuwe gegevens.
- Vervolgens verzendt de verzendende FIFO de gegevens beetje bij beetje totdat deze leeg zijn. Ten slotte zal de verzendende FIFO een extra slot creëren.
Werkproces voor het ontvangen van FIFO
- Na het ontvangen van gegevens van de bovengenoemde stap, slaat de hardware deze op in de ontvangende FIFO. Idealiter is het ontvangen en wissen van gegevens door het ontvangende FIFO-programma een automatisch proces. Er moet dus voldoende ruimte zijn in de ontvangende FIFO.
- Het beschikt ook over een FIFO-transceiver die essentieel is bij het oplossen van problemen met CPU-inefficiëntie. Verder helpt het bij het oplossen van het probleem van frequente UART-transceiveronderbrekingen.
- Ten slotte heeft FIFO geen gegevensverlies omdat het alle mogelijke verliesmogelijkheden vooraf afsluit.
Loopback
De UART heeft een interne loopback voor foutopsporing en diagnose over waar de RX-ingang de verzonden gegevens zal ontvangen.
Seriële infraroodprotocol
UART heeft een IrDA Serial Infrared (SIR) die werkt als een encoder/decodermodule. Het is handig bij het vertalen van een half-duplex seriële SIR-interface en een asynchrone UART-gegevensstroom.
Bovendien levert het seriële communicatieprotocol een gedecodeerde invoer en een digitaal gecodeerde uitvoer aan de UART.
Voordelen van het gebruik van UART
- Het eenvoudige communicatieprotocol is een goed gedocumenteerde module die ook gemakkelijk te gebruiken is.
- Ten tweede heeft het geen seriële kloklijn nodig.
- Ten derde heeft het een pariteitsbit dat foutcontrole mogelijk maakt.
Nadelen van het gebruik van UART
- De UART-interface heeft een maximale dataframegrootte van 9 bits en heeft lage overdrachtssnelheden.
- Bovendien is het niet in staat om veel mastersystemen en slave-apparaten te gebruiken.
- Het heeft ook een verplichte baudrate van binnen 10% als bescherming tegen gegevensverlies.
- Ten vierde heeft het over het algemeen lagere snelheden tijdens gegevensoverdracht tussen apparaten.
UART-voorbeelden in microcontrollers
- UART Seeeduino V4.2
- USB naar UART 5V
- Base Shield V2
- USB CP2102 seriële converter
2. I2C-interface
Wat is I2C?
Figuur 4:Een verschildruksensor gebruikt I2C
Het Inter-geïntegreerde circuit (I2C) communicatieprotocol lijkt op de UART. Maar hoewel UART is bedoeld voor communicatie met pc's, is I2C nuttig in sensoren en moduletoepassingen.
Bovendien kan de bidirectionele tweedraads synchrone seriële bus meerdere apparaten aansluiten zonder het communicatiepad in gevaar te brengen. Het is te danken aan zijn gedeelde bus- en adressysteemeigenschap.
Maar deze functie gaat ten koste van een relatief trage communicatie tussen apparaten in vergelijking met een SPI. De snelheid is afhankelijk van externe ruis, draadkwaliteit en gegevenssnelheid.
Ten slotte maakt de tweedraadsinterface verbinding mogelijk met apparaten met een lage snelheid, zoals EEPROM's, analoog/digitaal-converters en microcontrollers.
Hoe werkt het?
Een I2C-protocol heeft twee lijnen:de seriële datalijnacceptatiepoort (SDA) en een seriële kloklijn (SCL). De SCL maakt transmissiesynchronisatie mogelijk, terwijl SDA de datalijn vertegenwoordigt voor het verzenden en ontvangen van databits.
Tijdens de overdracht vraagt het masterapparaat de busgegevensoverdracht. Tegelijkertijd genereert het een klok die het overdragende apparaat opent. In dit scenario is het geadresseerde apparaat in de transmissie een slave-apparaat.
Opmerkelijk is dat het master-apparaat en het slave-apparaat geen constante datatransmissiesnelheid hebben. Integendeel, hun relatie is afhankelijk van de richting van de gegevensoverdracht op het moment van verzending.
Ook moet het enkele master-apparaat het slave-select-apparaat informeren voordat een datatransmissie wordt gestart. Evenzo moet het de slaaf informeren voordat het gegevens van de slaaf ontvangt.
Het is ook belangrijk om een pull-up weerstand aan te sluiten op de I2C-voeding voor een optimale werking.
I2C-werkprotocol
Afbeelding 5:A-pin 0,96 inch OLED 128X64 OLED-displaymodule IIC I2C
Gegevenstransmissiemethode
De verbindingsprocedure is als volgt:
- De masteruitgang stuurt een zendsignaal naar de aangesloten slaves, voornamelijk door de SDA-lijn van hoogspanning naar laag te schakelen. Vervolgens schakelt het de SCL-lijn van hoogspanningsniveau naar laag.
- Vervolgens stuurt de master 7-bits of 10-bits adressen en leest/schrijft bits naar elk van de slaven.
- Ten derde vergelijken de slaven het adres met hun eigen adres. Als het overeenkomt, retourneert het een ACK-bit, waardoor de SDA-lijn naar laag wordt geschakeld. Als ze echter niet overeenkomen, verlaat de slaaf de SDA-lijn op een hoogtepunt.
- Vervolgens verzendt de master het dataframe of ontvangt het (afhankelijk van de overeenkomende adressen). Dan, na volledige datatransmissie, stuurt de ontvangende component een ACK-bit terug naar de datazender. Het is om een volledige transmissie te bevestigen.
- Ten slotte zet de master de SCL op hoog en vervolgens de SDA om het einde van de communicatie te communiceren.
Kloksynchronisatie
Elke master moet zijn kloksignaal in de SCL-lijn genereren voor datatransmissie. Trouwens, het is alleen tijdens de hoge periode van de klok dat gegevens geldig blijven in een I2C-transmissie.
Verzendmodi
Het zendt voornamelijk op twee manieren uit, namelijk:
Snelle modus
Apparaten in de snelle modus ontvangen en verzenden gegevens met een snelheid van 400 kbit/s. Ook kan een I2C-bus in snelle modus glitches aanzienlijk onderdrukken, en hun output heeft een hellingcontrolefunctie.
Hoge snelheidsmodus
Een I2C-bus in een hogesnelheidsmodus zal gegevens verzenden/ontvangen met een bitsnelheid van 3,4 Mbit/s. Het beschikt dus over snellere gegevensoverdrachtsnelheden dan de vroegere snelle modus.
Voordelen van I2C
- Het beschikt over een aanzienlijk beperkt aantal pinnen/signalen, zelfs als je meerdere apparaten op de master hebt aangesloten.
- Ten tweede biedt een I2C-apparaat flexibiliteit dankzij de multi-master- en multi-slave-mogelijkheden.
- Het is ook eenvoudig te gebruiken omdat je maar twee bidirectionele draden nodig hebt om verbinding te maken met talloze apparaten.
- Bovendien biedt het uitgebreide aanpasbaarheid en kan het ook tal van masters ondersteunen.
Nadelen van I2C
- Het heeft een relatief lage snelheid en moet pull-up-weerstanden gebruiken, in tegenstelling tot de SPI, die alleen push-pull-weerstanden nodig heeft. Bovendien beperkt het ontwerp met open afvoer de snelheid.
- Bovendien nemen de weerstanden ruimte in beslag die van enorm belang is bij de assemblage van PCB's.
- Het is niet gemakkelijk te gebruiken als je meerdere apparaten hebt aangesloten.
Voorbeelden van I2C in microcontrollers
- Raspberry Pi's 4-kanaals 16-bit ADC
- I2C Hub (6-poorts) - Grove
- I2C-stuurprogramma/adapter
- I2C Arduino
3. SPI-interface
Wat is SPI?
Afbeelding 6:Een SPI-interface is handig in weergavemodules.
De Seriële Perifere Interface (SPI) is bestemd voor gebruik in microcontrollers. Omdat het in een full-duplex werkt, maakt het ook gelijktijdige gegevensoverdracht en -ontvangst mogelijk.
De SPI is relatief sneller dan I2C, met een datatransmissiesnelheid van minimaal 8 bits. In de eerste plaats maakt het eenvoudige protocol van deze module snellere gegevenssnelheden mogelijk. Het is dus belangrijk in toepassingen die snelheid vereisen, zoals displaymodules en SD-kaarten.
Het is ook essentieel in toepassingen met een plotselinge verandering van informatie, bijvoorbeeld thermometers.
Hoe werkt het?
Fig 7:SD-kaarten gebruiken SPI
Een SPI-apparaat werkt op een van de volgende twee manieren:
- Eerst wordt het apparaat met een Chip Select-lijn geselecteerd. Merk op dat elk apparaat zijn unieke Chip Select-lijn nodig heeft.
- Als alternatief werkt het ook via serieschakeling.
U kunt zoveel apparaten aansluiten als u wilt in een SPI-interface. In de meeste gevallen wordt u echter beperkt door de beschikbare hardwareselectielijnen. Ten slotte hoeft de module tijdens point-to-point-communicatie geen bewerkingen aan te pakken.
SPI-werkprotocol
SPI functioneert via vier poorten, namelijk:
- Master data-uitgang, slave data-ingang (MOSI)
- Master data input, slave data output (MISO)
- Een kloksignaal (SCLK)
- Slave-enabled signaal (NSS)
Bij gebruik van een multi-slavesysteem vereist elke respectievelijke slave een uniek activeringssignaal. Deze vereiste bemoeilijkt de hardwarevereiste in vergelijking met een I2C-communicatie.
Ook beschikt de SPI-interface over twee schuifregisters. Het maakt synchrone seriële gegevensoverdracht mogelijk tussen een enkel masterapparaat, zoals een CPU, naar randapparatuur.
Voordelen van het gebruik van SPI
- Het is eenvoudig te gebruiken omdat het, in tegenstelling tot een I2C, geen complex slave-adresseringssysteem heeft.
- Ten tweede is dit het snelste protocol van alle seriële interfaces die we hebben behandeld (sneller dan UART en I2C).
- Het heeft geen start- en stopbits zoals in UART-communicatie. Zo maakt het continue gegevensoverdracht zonder onderbrekingen mogelijk.
- Ten slotte beschikt het over afzonderlijke MISO- en MOSI-lijnen die gelijktijdig verzenden en ontvangen van gegevens mogelijk maken.
Nadelen van het gebruik van SPI
- De meeste pin-poorten zijn bezet, waardoor het aantal apparaten dat u kunt aansluiten beperkt is.
- Ook ontbreekt een gespecificeerde stroomregeling en in tegenstelling tot I2C is er geen mechanisme om te bevestigen dat gegevens zijn verzonden/ontvangen.
- Het vereist het gebruik van 4 regels, zoals we hierboven hebben benadrukt, en in tegenstelling tot UART mist het een foutcontrolemechanisme.
- Ten vierde heeft het ook een enkele master.
Voorbeelden van SPI in microcontrollers
- SPI Seeeduino V4.2
- SPI Driver/Adapter-eenvoudig SPI-apparaten aansturen
UART, I2C en SPI vergelijken
Welke van deze communicatierandapparatuur is de 'beste'? UART, SPI of I2C?
Er zijn geen superieure communicatie-randapparatuur van de drie, omdat elk zijn belangrijkste voor- en nadelen heeft. Kies dus het best passende protocol, afhankelijk van uw project. SPI is bijvoorbeeld het beste voor u als u op zoek bent naar snelheid.
Maar als je meerdere apparaten wilt aansluiten zonder een complexe array te hebben, ga dan voor I2C.
Conclusie
We hebben alle belangrijke inzichten blootgelegd die u moet weten over UART-, I2C- en SPI-communicatie-interfaces en hun verschillende overdrachtssnelheden. We zijn hier ook om eventuele vragen over de communicatieprotocollen te beantwoorden. Neem contact met ons op, dan komen we je meteen te hulp.
Industriële technologie
- MQTT en DDS:communicatie van machine tot machine in IoT
- Gegevensstroom
- Netwerkprotocollen
- termen en concepten voor digitaal geheugen
- Boards – Breakout the Pi – I2C, UART, GPIO en meer
- 14 Onbekende toepassingen van nanotechnologie | Voordelen en toepassingen
- Wat is zilversolderen? - Proces, staaf en gebruik
- Gegevensgestuurde productie:voordelen, uitdagingen en strategieën
- Automatiseer gegevensopname en optimaliseer de besluitvorming
- Houtsoorten en hun toepassingen
- Tungsten gebruikt toen en nu