Skip to content
Oliver edited this page Apr 10, 2018 · 1 revision

Funktionsweise der SCCB-Schnittstelle

Die grundlegende Kommunikation auf dem SCCB entspricht der von I2C. Der Busaufbau ebenfalls. Die Kamera agiert dabei als Slave und der Arduino muss folglich den Master machen. Das heisst sowohl beim schreiben, als auch beim lesen von Daten geht das immer vom Master aus.

Ein Slave reagiert nur auf eine bestimmte Adresse, welche im Fall des Ov7676 scheinbar die 0x21 ist, auch wenn ich das im Datenblatt nirgens finde.

Eine Bit-Übertragung beginnt immer mit einer Start-Kondition bei der die SDA Leitung nach Low geht während SDC noch High ist. Der Empfänger stellt sich aufs lesen von Daten ein. Es folgt eine Übertragung von 8 Bit langen Datenwörten, wiederum gefolgt von einer Stop-Kondition. Dabei geht der Pegel von SDA auf High während SDC bereits High-Pegel hat. Nur zur Info, normalerweise muss während der High-Phase von SDC der Zustand von SDA stabil sein.

Konzentrieren wir uns nun auf die Nutzdaten des Protokolls. Hier sendet der Master zuerst die Adresse des anzusprechenden Slave. Ab hier gibt es nun ein paar Varianten, abhängig davon was man tun will.

Im „3-Phase-Write Cycle“ wird nach der Empfänger-ID die Subadresse, im Fall des OV7676 ist es das zu beschreibende Register (COM...), übertragen. Ihr folgt der Wert welcher in das Register zu schreiben ist.

Im „2-Phase-Write Cycle“ werden nur Empfänger und Subadresse geschrieben. Diese Variante ist zur Vorbereitung der dritten Übertragungsart, dem Lesezyklus gedacht. Sie selektiert das zu lesende Register im Slave.

Beim „2-Phase-Read Cycle“ muss ein 3- oder 2-Phase-Write vorausgegangen sein. Nach dem senden der Slaveadresse wird der Master passiv und erwartet das der Slave nun seine Daten sendet.

Um also Daten aus dem Chip zu lesen, müssen vorher welche geschrieben werden. Dies resultiert aus dem Umstand das ein Slave nicht selbstständig auf den Bus senden darf.

Das Arduino Framework verwendet hierfür die „Wire“ Library.

Soviel erstmal zum Protokoll. Natürlich habe ich jetzt Komplexität wissentlich unterschlagen, wie NA und ACK Bits, Multi-Master Busse, etc.

Clone this wiki locally