Personal Fabrication Drahtgebundene Kommunikation DIY Personal Fabrication Drahtgebundene Kommunikation `` Juergen Eckert – Informatik 7
Fahrplan UART SPI TWI
Kommunikation Grundlagen (1/2) Taster und LED (siehe Bsp. vor Weihnachten) sind einfache Schnittstellen zur Kommunikation Kommunikation = Austausch von Signalen (z.B. Licht oder Spannung) Signal Information in Form einer physikalischen Größe Kategorisierungstupel: Wert: kontinuierlich oder diskret Zeit: kontinuierlich oder diskret heute
Kommunikation Grundlagen (2/2) Leitungskodierung bei binären Signalen = Zuordnung der Signalwerte zu 0 oder 1 Übertragungsart: Parallel: mehrere Bits gleichzeitig Seriell: zeitlich aufeinander folgende Bits Weitere Eigenschaften: Synchron (selbsttaktend) oder asynchron: Sendertakt wird mit übermittelt Gleichstromfrei: Kein bestimmter Pegel in Ref zu GND Bandbreitenbedarf: Breite des Frequenzbands, um Signal zu übertragen.
Leitungskodierung (1/2) Non-Return-To-Zero (NRZ): „1“ = High, „0“ = Low, ¬(1), unipolar: ¬(2), polar: (2)✓ NRZ-Invert (NRZI): „1“ = Wechsel, „0“ = kein Wechsel, ¬(1), ¬(2), verpolungssicher Bipolar: „0“ = Nullpegel, „1“ = alternierend Low und High, ¬(1), (2) ✓ Manchester-Kodierung: Pegelwechsel in Taktmitte, „1“ = High→Low, „0“ = Low→High, (1) ✓, ¬(2), benötigt doppelte Bandbreite, Verwendung bei Ethernet Differentielle Manchester-Kodierung: Pegelwechsel in Taktmitte und zusätzliche Taktwechsel am Flankenanfang,„1“ = kein Wechsel, „0“ = Wechsel, (1) ✓, (2) ✓, nochmal höhere Bandbreite, Verwendung bei Token Ring (Hier: High und Low sind Symbole die Spannung repräsentieren)
Leitungskodierung (2/2) Referenz NRZI 1 Unipolares NRZ Bipolar Manchester- Kodierung Differentielle Polares NRZ Bitsequenz
Übertragungssystem Systemtheorie: mathematisches Modell zur Beschreibung des Übertragungsverhaltens Signalübertragung (Pegelwechsel) benötigt Energie (je höher die Freq. desto mehr) Bandbreitenbeschränkung (min. und max. Freq.) Signalverzerrung Idealisiert: Freq. 0..fC unverändert, höhere Freq. stark gedämpft. (Low Pass Filter) Übertragungs- system Eingangssignal Ausgangssignal s1(t) s2(t) Theorie (Fourierreihen, Fouriertransformation, Abtasttheorem, ...) siehe RK Vorlesung [Hier (aus Zeitgründen) Daumenregel: Signal auf das Medium geben und mit Oszi überprüfen]
Serielle Schnittstelle (1/2) Foto: Wikipedia Serielle Schnittstelle (1/2) Meist genutztes Interface (DIY/HACKs) EIA-232 (RS-232, V.10) in 1962 Punkt-zu-Punkt Verbindung (1:1) Asynchron Geschwindigkeit in Baud = Symbolrate ≠ Bits/s Neuere serielle Schnittstellen: Ethernet USB S-ATA ... max. Baud max. Länge 2400 900m 4800 300m 9600 152m 19200 15m 57600 5m 115200 <2m Alle Differenziell: 2 Leitungen übertragen das gleiche Signal, eine Leitung ist invertiert (Ursprung: RS485) Hohe Toleranz gegenüber el-mag. Störungen
Differenzielle Signalübertragung (Einschub) Differenzielle Signalübertragung Foto: Wikipedia
Serielle Schnittstelle (2/2) RS-232: NRZ polar, mit TTL Logik: unipolar TTL „1“ = 3.3V oder 5V und „0“ = 0V Baudrate muss bekannt sein Üblich: 8N1 (ohne Parity) 5-9 bit LSB first t Foto: Wikipedia
Universal Asynchronous Receiver Transmitter (UART) Hardware in fast jedem Mikrocontroller AVR: 1Byte Puffer Andere bieten mehr Hardware- Support (Puffer) Atmel AVR Manchmal auch USART: S steht für synchronous, also alternative Konfigurationsart
Hardware UART (Bsp: AVR) (1/3) void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = (unsigned char)(regbaud>>8); UBRRL = (unsigned char)regbaud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } Trick: Sender 8N2, Empfänger 8N1 →Empfänger hat 1bit mehr Zeit zur Verarbeitung Programmier Tutorial: Hardware wird mittels Bits in Register kontrolliert Beschreibung siehe Datenblatt
Hardware UART (Bsp: AVR) (2/3) void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Put data into buffer, sends the data */ UDR = data; } Aktives warten bis das Register frei ist Daten in Register schreiben. Mikrocontroller kann andere Sachen erledigen während der UART die Daten versendet
Hardware UART (Bsp: AVR) (3/3) unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSRA & (1<<RXC)) ) ; /* Get and return received data from buffer */ return UDR; } Schreib- und Lesezugriff auf Register kann unterschiedliche Resultate haben (Bsp: UDR) AVR UART ist Full Duplex (senden und empfangen gleichzeitig)
UART und Interrupts UART kann Interrupt nach dem Versenden oder Empfangen eines Bytes auslösen. → Kein aktives Warten notwendig! Komplexere MCUs haben FIFO Warteschlangen oder DMA Controller → Interrupt nur noch alle n Bytes
Software UART (= pain) Hardware bietet viele Vorteile: Geschwindigkeit, Interrupts, Fehlererkennung,... Wenn mehr UARTs benötigt werden als vorhanden kann der UART auch in Software mittels GPIO Pins implementiert werden. „Semi-Software“ Lösungen (Kombination aus Interrupts und Timer) möglich Sonst idR Half-Duplex Umgangssprachlich: Bit-Banging
Software UART (AVR304) TX RX Hier: Kein Stop Bit Test
Serielle Schnittstelle in der Praxis RS232 Service- und Konfigurationsschnittstelle Heutzutage sonst eher unüblich Heute: TTL oder CMOS UART (auf den Pegel achten!) Debugging: 2 weitere UARTS (die 2 Empfangsleitungen) Bus Pirate Oszilloskop (2 Kanal) Logic Analyzer Verwendung in Modulen GPS, Bluetooth, WiFi, ... Für Modultest: USB nach Seriell Adapter (z.B. mittels FTDI)
Punkt-zu-Punkt Verbindung Jedes Modul benötigt dedizierte Hardware (Pins) Mikrocontroller TX RX Modul RX TX
Binary Unit System (BUS) (weiterhin seriell) Datenübertragung zwischen mehreren Teilnehmern über einen gemeinsamen Übertragungsweg Aktive Konten: Master Greifen selbstständig auf den BUS zu Passive Knoten: Slave Varianten Single-Master (1:n) Bsp: SPI Multi-Master (m:n) Bsp: TWI (aka. I2C)
Serial Peripheral Interface (SPI) Von Motorola Synchronous Serial Port (SSP) Master-Slave Paradigma (1:n) Full Duplex „Lockerer“ Standard SCLK (Clock) MISO (Master In Slave Out) MOSI (Master Out Slave In) Andere Namen mögl. (SDI/SDO) Foto: Wikipedia
SPI Topologie Kaskadierung (Daisy-Chain) Stern Slave nur über Vorgänger ansprechbar Benötigt wenig IOs Bsp. APA102 LEDs Stern Jeder Slave benötigt dedizierte Slave Select (SS) Leitung Schneller bei beliebigen Zugriff Meist verbreitet Fotos: Wikipedia
Leitungskodierung (1/2) Unipolares NRZ für alle Leitungen 4 Modi basieren aus Kombination von Clock Polarität (CPOL) Clock Phase (CPHA) Folgen des lockeren Standards: Keine festgelegt Bit- und Byte-Order MSB oder LSB first Little oder Big Endian Keine festgelegt Bitanzahl (üblich 8-16bit) Siehe Datenblatt
Leitungskodierung (2/2) Rot Blau Foto: Wikipedia
SPI in der Praxis Mikrocontroller Debugging Verwendung Hardware Unterstützung Software Mode einfacher als UART (zumindest als Master) Debugging Bus Pirate Oszilloskop (2-4 Kanäle) Logic Analyzer Verwendung SD-Karte (MMC) So gut wie jeder Chip Foto: dangerousprototypes.com Für Chiptest: Bus Pirate
Single- vs. Multi-Master (1/2) Single-Master Alle Kommunikation wird vom Master initiiert Zentrale Kommunikation Beispiel SPI: Clock Leitung wird nur vom Master getrieben Paralleler Zugriff auf die Clock Leitung kann Hardware beschädigen Bus-Arbiter (lat.: „Richter“) kann Zugriff regeln Komplex / Aufwendig
Single- vs. Multi-Master (2/2) Mehrere aktive Konten auf dem geteilten Bus Dezentrale Kommunikation Arbitrierung (Zugriffsregelung auf den Bus) Bus-Arbiter (de-) zentral Komponente (High Level) Auf Leitungsebene (Low Level)
Multi-Master Medienzugriff SPI: Clock HI ⇨ Leitung ⇦ Clock LOW ⚡️⚡️⚡️ Dominantes und Rezessives Bit Verhindern von Hardwarebeschädigung wenn unterschiedliche Signals auf der Leitung Dominantes Bit verdrängt rezessives Bit Bekannte Beispiele: CAN-BUS (Automobilbereich, 1987) I2C
Inter-Integrated Circuit (I2C) Philips Semiconductors (heute NXP), 1982 Schaltungsinterne Kommunikation (zwischen ICs) Ab Mitte der 1990er lizenzierte Drittanbieter Two-Wire-Interface (TWI) lizenzfreie alternative 2006 I2C Patent abgelaufen TWI = I2C ≈ SMBus System Management Bus gedacht für stromsparende PCs
Physikalische Schicht I2C Datenleitung: SDA, Taktleitung SCK (Half Duplex) Buszugriff mittels Open-drains Low dominant, High rezessiv High Zustand mittels Pull-Up Widerstande High-Speed: Konstant Strom Senke Foto: Lammertbies
Medienzugriff I2C Start Kondition (S): SDA⤵︎︎, SCL=1 Foto: Wikipedia Start Kondition (S): SDA⤵︎︎, SCL=1 Bit übertragen (BX) (MSB zuerst): Sender: Pegel auf SDA während SCL=0 Empfänger: SDA sampeln nachdem SCL ⤴︎ Stop Kondition (P): SDA ⤴︎, SCL=1
Transferschicht Zwischen Start und Stop beliebig viele Bits Byteweise Übertragung 9 Bit pro Byte: Letztes Bit = Bestätigung des Empfängers (ACK = „0“ = Low) Erstes Byte nach Start: 7 Bit Adressierung: 112 Adressen (16 reserviert) Erweiterung auf 10 Bit (mittels 2. Adressbyte) 8. Bit Kommunikationsrichtung Master lesen oder schreiben
Beispiel: AT24CXX EEprom (=persistenter Speicher) Adress-Pins Lesen (Zuvor muss der Lese- Pointer gesetzt werden) Fotos: Datenblatt Schreiben
I2C/TWI in der Praxis Siehe SPI Folie Anwendung: „Low Power“ / „Langsame“ ICs
UART / I2C / SPI im Vergleich I2C/TWI SPI Leitungen 1-2 2 2-3 +1 je Chip Konnektivität 1:1 m:n 1:n Distanz Einige Meter Einige Zentimeter < 1m Geschwindigkeit 1200-115k2 Baud (Einige Mbaud) 100-400 kbit/s (Bis zu 5Mbit/s) >> 10Mbit/s Synchronität - + Für große Entfernungen empfiehlt sich ein höheres Spannungspotential und/oder ein differenzielles Signal
Nächstes mal bei DIY Drahtlose Kommunikation (Crash Kurs) ISO OSI Referenzmodell