TWI / I2C¶
Læringsmål
Forstå START/STOP, adressering, lese/skrive-retning, ACK/NACK og statuskoder, og implementer grunnleggende controller-primitiver i AVR Assembly og C.
Forutsetninger
Du bør forstå GPIO, periferiregistre og grunnleggende seriell kommunikasjon.
ATmega1284P kaller den I2C-kompatible totrådsperiferien sin TWI. Bussen bruker SDA for data og SCL for klokke, med open-drain/open-collector-signalisering og eksterne pull-up-motstander.
Første konfigurasjon¶
De parallelle eksemplene konfigurerer TWI for omtrent 100 kHz SCL med 8 MHz CPU-klokke og prescaler 1:
Med TWBR=32 blir resultatet 100 kHz.
Første firmwaremilepæl initialiserer periferien og gir et stabilt kvalifikasjonspunkt. Senere øvelser legger til START, adresse, byteoverføring, ACK-håndtering og STOP.
Registermodellen¶
Følg rollene til TWBR, TWSR, TWAR, TWDR og TWCR. Statuskodene gjør det mulig å knytte programflyten til hvilken fase av busstransaksjonen maskinvaren befinner seg i.
Under panseret¶
Sammenlign C- og Assembly-versjonene. Finn registerskrivingen som setter bitrate og kontrollbitene som starter en TWI-operasjon. Knytt polling av status til den tilsvarende kontrollflyten i maskinkoden.
Prøv selv¶
Bygg begge versjoner, beregn forventet SCL-frekvens og spor initialiseringssekvensen. Utvid deretter analysen med START og statuskontroll når eksemplet støtter det.
Forventet resultat
Du kan forklare hvordan bitrate beregnes og hvilke TWI-registre som bærer kontroll, status og data.
Kvalifikasjon¶
Q0 bygger og disassemblerer begge versjoner. Q1 verifiserer modellert registerkonfigurasjon. Sterkere Q1 data-path-tester brukes bare der simavr modellerer aktuell TWI-oppførsel pålitelig. Q2 verifiserer den virkelige SDA/SCL-bussen, pull-ups, timing og eksterne enheter.
Sjekk forståelsen¶
- Hvorfor trenger SDA og SCL pull-up-motstander?
- Hva er forskjellen mellom ACK og NACK?
- Hvorfor er statuskoder viktige?
- Hvilke deler av en fysisk I2C-buss krever Q2?
Neste
Dette avslutter den nåværende kjernen av kommunikasjonsleksjonene. Fortsett med appendiksene og praktiske øvelser.