I²C-Themenklausur - Lösungen
← I²C-Themenklausur (Aufgaben) · Startseite · Kap. 4
Vollständige Lösungen mit Rechenweg, Begründung und Kapitelverweis. Bewertungshinweis: Teilpunkte für erkennbaren Lösungsweg auch bei Zahlenfehler. Alle Werte gehen ohne Taschenrechner auf.
Aufgabe 1 - I²C-Grundlagen (15 P) Kap. 4
| Teil | richtig angekreuzt | Begründung |
|---|---|---|
| 1.1 | a [x], b [x], c [ ] | c falsch: I²C überträgt MSB zuerst (nur UART-Nutzdaten LSB zuerst). |
| 1.2 | a [x], b [ ], c [x] | b falsch: ohne Pull-Ups bleibt die Leitung floating, kein sicherer High-Pegel. |
| 1.3 | a [x], b [x], c [ ] | c falsch: der aktive Master gibt den Takt pro Übertragung vor, kein zentraler Taktgeber. |
| 1.4 | a [x], b [x], c [ ] | c falsch: I²C ist synchron (SCL), braucht kein Startbit; das ist die asynchrone Übertragung (RS-232). |
| 1.5 | a [x], b [ ], c [x] | b falsch: der AT91 hat keine I²C/TWI-Einheit; der SAM3X hat 2. |
([x] = ankreuzen, [ ] = nicht ankreuzen. Pro Teilaufgabe 3 P nur bei vollständig korrekter Bewertung aller drei Aussagen.)
Aufgabe 2 - Start/Stop, Gültigkeit & ACK/NACK (12 P) Kap. 4
2.1 (3 P): Start = fallende SDA-Flanke, während SCL = High. Stop = steigende SDA-Flanke, während SCL = High. Im Ruhezustand sind beide Leitungen High.
2.2 (3 P): Gültigkeitsregel: Während der Datenübertragung darf SDA sich nur ändern, wenn SCL = Low ist; bei SCL = High muss SDA stabil bleiben (der Empfänger tastet dann ab). Start/Stop sind die einzige Ausnahme (SDA-Flanke bei SCL = High). Weil eine solche Flanke sonst nie auftritt, ist sie eindeutig als Rahmensignal erkennbar.
2.3 (2 P): ACK = Low (0), NACK = High (1). Beim Schreibzugriff erzeugt der Slave (Empfänger) das ACK.
2.4 (2 P): Das R/W-Bit ist das LSB des ersten Bytes (direkt nach den 7 Adressbits): 0 = Write (Master → Slave), 1 = Read (Slave → Master).
2.5 (2 P): I²C überträgt die Datenbits MSB zuerst. Beim UART laufen die Nutzdaten dagegen LSB zuerst - das ist der klassische Verwechslungspunkt.
Aufgabe 3 - Adressierung & Adressbyte (11 P) Kap. 4
Gegeben: 7-Bit-Adresse 0x4B = 100 1011.
3.1 Lesezugriff (3 P): Adresse × 2 + R/W(1) = 1001011 + 1 = 1001 0111 = 0x97.
3.2 Schreibzugriff (3 P): Adresse × 2 + R/W(0) = 1001011 + 0 = 1001 0110 = 0x96.
3.3 (2 P): 0x4B = 0100 1011. Als erstes Byte interpretiert stehen die oberen 7 Bit für die Adresse (010 0101 = 0x25) und das LSB = 1 für Read. Das Byte adressiert also Slave 0x25 (Lesen), nicht Slave 0x4B (Schreiben). Fehler: Das R/W-Bit wurde nicht angehängt (Adresse nicht × 2 gerechnet).
3.4 (3 P): Laut Skript bis zu 127 Slaves. 7 Bit ergeben 2⁷ = 128 Adressen; zieht man die allgemeine Ruf-Adresse 0x00 (General Call) ab, bleiben 127.
Hinweis (Abweichung zur Praxis): In der realen I²C-Spezifikation sind 16 Adressen reserviert, sodass praktisch nur 112 nutzbar sind. Für die Klausur zählt die Skript-Angabe 127.
Aufgabe 4 - Protokoll- & Timing-Analyse (16 P) Kap. 4
4.1 (4 P):
(a) Die ersten 7 Bit sind die Adresse: 1001010 = 0x4A.
(b) Das 8. Bit 1 ist das R/W-Bit → Lesezugriff (Slave → Master).
(c) Die vom Slave getriebene 0 ist das ACK - Slave 0x4A ist vorhanden und bestätigt.
Falle: Das 8. Bit gehört nicht zur Adresse (die ist nur 7 Bit breit), sondern ist R/W.
4.2 (6 P): 0x2C = 010 1100, Write → R/W = 0. 0xA5 = 1010 0101.
| Schritt | Ereignis | Bits / Pegel (SDA bei SCL = High) |
|---|---|---|
| 1 | START | SDA fällt, während SCL = High |
| 2 | Adressbits (6..0) | 0 1 0 1 1 0 0 |
| 3 | R/W-Bit | 0 (Write) |
| 4 | ACK (vom Slave) | 0 |
| 5 | Datenbits (7..0) | 1 0 1 0 0 1 0 1 |
| 6 | ACK (vom Slave) | 0 |
| 7 | STOP | SDA steigt, während SCL = High |
(Erstes Byte auf dem Bus = Adresse+R/W = 0101 1000 = 0x58.)
4.3 (4 P): Jedes Byte belegt 9 SCL-Takte (8 Datenbits + 1 ACK). 3 Bytes (1 Adresse + 2 Daten) → 3 × 9 = 27 Taktimpulse. Bei 100 kBit/s ist 1 Bit = 10 µs → 27 × 10 µs = 270 µs (Start/Stop kommen als Zustandswechsel noch geringfügig dazu).
Falle: 9 Takte pro Byte, nicht 8 - das ACK wird gern vergessen.
4.4 (2 P): Standard 100 kBit/s · Fast 400 kBit/s · Fast Mode Plus 1 MBit/s · High Speed 3,4 MBit/s · Ultra Fast 5 MBit/s.
Aufgabe 5 - Arbitrierung (Multi-Master) (10 P) Kap. 4
5.1 (2 P): Ein Master darf bei Bus-Leerlauf (SCL und SDA = High) eine Start-Bedingung erzeugen. Ein zentraler Taktgeber ist nicht nötig, weil der aktive Master den Takt selbst erzeugt (pro Übertragung).
5.2 (4 P): 0x62 = 1100010, 0x66 = 1100110. Vergleich MSB zuerst:
| Bit | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| A (0x62) | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
| B (0x66) | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
Erste Abweichung an Bit 2 (5. übertragenes Bit): A sendet 0, B sendet 1. A zieht SDA auf Low; B liest 0, obwohl es 1 sendet → B verliert. Master A (0x62) gewinnt (die niedrigere Adresse setzt sich durch).
5.3 (4 P): Adresse und R/W sind identisch (0x62, Write) → hier fällt noch keine Entscheidung. Die Arbitrierung läuft bitweise in die Daten weiter: 0x30 = 0011 0000, 0x20 = 0010 0000. Erste Abweichung am Datenbit 4: A = 1, B = 0 → B zieht Low, A verliert. Master B (Datenbyte 0x20) gewinnt. Aussage: Arbitrierung endet nicht mit der Adresse, sondern vergleicht jedes Bit weiter, bis sich die Sender unterscheiden; der Verlierer zieht sich zurück, ohne die Übertragung zu stören.
Aufgabe 6 - TWI am SAM3X (10 P) Kap. 4
6.1 (3 P): (a) Slave-Adresse + Richtung → TWI_MMR (DADR, MREAD). (b) Busgeschwindigkeit → TWI_CWGR (CKDIV/CLDIV/CHDIV). (c) zu sendendes Byte → TWI_THR. MREAD = 1 bedeutet Lesen.
6.2 (5 P): Reihenfolge: C → E → B → D → A (Start + Adresse/Write senden → auf TXRDY warten → Byte in THR schreiben → beim letzten Byte STOP im CR → auf TXCOMP warten).
6.3 (2 P): TXRDY = das Holding-Register (THR) ist frei, das nächste Byte darf geschrieben werden. TXCOMP = die gesamte Übertragung inklusive Stop-Bedingung ist abgeschlossen.
Aufgabe 7 - Debugging & Praxis (6 P) Kap. 4
7.1 (3 P): Zwei genügen: (1) Unter dieser Adresse antwortet kein Slave (falsche DADR, Zahlendreher, R/W-Bit vergessen). (2) Slave ist nicht versorgt/getaktet oder falsch verdrahtet. (3) Pull-Ups fehlen, sodass kein sauberes Low/High zustande kommt. NACK heißt zunächst nur "keine Reaktion".
7.2 (3 P): Gesunder Leerlauf: beide Leitungen High (idle high durch Pull-Ups). Dauerhaft Low deutet auf (zwei genügen): Kurzschluss nach Masse, einen hängenden Teilnehmer, der die Leitung festhält, oder fehlende/fehlerhafte Pull-Ups zusammen mit einem aktiv ziehenden Ausgang. Folge: Eine Start-Bedingung (SDA-Flanke bei SCL = High) ist gar nicht erzeugbar → Bus blockiert.
Zusatzfrage Z - Clock Stretching (0 P, außerhalb des Kursstoffs)
Nicht klausurrelevant. Antwort nur zur Einordnung; das Thema kommt im Kursmaterial nicht vor.
Z.1: Beim Clock Stretching hält ein Slave die SCL-Leitung aktiv auf Low, um den Master anzuhalten, bis er (der Slave) für das nächste Bit/Byte bereit ist. Da SCL open-drain ist, kann der langsamere Teilnehmer den Takt so verlängern. Merke: Im Skript nicht behandelt - in einer regulären Kursklausur nicht zu erwarten.
Punkteschlüssel (Orientierung, 80 P)
| Punkte | ≥ 66 | ≥ 58 | ≥ 48 | ≥ 40 | ≥ 32 | < 32 |
|---|---|---|---|---|---|---|
| Note | 1,x | 2,x | 3,x | 4,0 | 4,x knapp | 5,0 |