Laatste uitleg IIC bus
duidelijk gemaakt door Jan Blok

Geen ontkomen aan.
Dit is de techniek hoek en dus gaat het nu over techniek. Degenen die dat niet zint, kijken maar een andere kant uit. Ik begrijp dat best. Ook ik zie onder andere in dit tijdschrift wel eens wat wat me niet interesseert. En dan sla ik het blad om. Probleem opgelost. Geen ergernis. Ook de mogelijkheid niet aangegrepen om iets nieuws te leren. Begrijpen jullie de opmerking?? Nou, daar gaan we dan.

Vorige keer een plaatje getoond en iets gezegd over het feit dat de IIC bus synchroon is. Dit betekent dat de clock de dienst uitmaakt. Synchroon met de clock wordt de data overgebracht. Dat begrip 'clock' moet zo uitgelegd worden dat het de maat slaat zoals een dirigent. Die klok staat dus slechts te roepen 'NU NU NU NU NU'. En wat dan wel 'NU'. Data overdracht dus. Dit gaat in alle processorsystemen die ik ken -numeriek de grootste groep ken ik niet en wil ik ook niet kennen- als volgt: zie figuur 1.

Hier staat dat de data stabiel, dus hoog of laag, moet zijn. Dan komt de clock en die roept 'NU'. Op dit moment wordt de data overgenomen door de chip die zich aangesproken voelt. Dit alles kost tijd. Dus de clock moet een poosje aktief blijven, en de data stabiel. Hier zijn uitgebreide tekeningen voor. Specificaties heten dat. Tot in de kleinste details vertelt de fabrikant dan hoelang iets moet duren, mag duren en wat tussentijden mogen en moeten zijn. Zover gaan we niet hier.

De tekening spreekt voor zich als het goed is. En als dat niet zo is, hoor ik het nog wel eens.

Dan de volgende stap.
Vorige keer heb ik een tekening gemaakt. Haal die er even bij. Daar staat de startkonditie. Die wordt gegenereerd door de master. Die maakt de data lijn laag. En daarna de clocklijn. In rust zijn die altijd hoog! Daar kom ik zo op terug.

De master zet nu bit 1 op de addresslijn. Let wel op: de addresslijn kan hoog of laag zijn! Dan wordt de clock hoog gemaakt. En weer laag. En dan het volgende bit op de addresslijn. En dan de clock enzovoort tot er zeven addressbits verzonden zijn. De achtste is gereserveerd voor lezen of schrijven. Lezen is hoog en schrijven is laag. In dit stadium moet er een slave op de bus zitten die zich aangesproken voelt. Als dat niet zo is, blijft gedurende de volgende clockcycle de antwoord bit hoog. Immers, in rust is de lijn hoog en als er geen antwoord komt, blijft die hoog.

De master leest de data lijn en als die hoog is, weet de processor dat zijn moeite vergeefs is geweest en gaat wat anders doen. In dit geval echter zit er een slave op het betreffende address. Die trekt gedurende de tijd dat er een antwoord moet komen ook inderdaad de datalijn laag.

We zijn nu zover dat de verbinding tussen master en slave gemaakt is. Laten we nu zeggen dat de master aangegeven had te gaan schrijven. De slave staat inmiddels in de leesstand en de master gaat schrijven. Als de byte verzonden is, wordt weer een antwoord van de slave afgewacht. Zo niet, dan is de transfer alsnog mislukt. Zo ja, dan is er nu data in de slave geschreven. Wat nu als de slave in de leesstand gezet is? Simpel, dan schrijft de slave en de master genereert het antwoord. Nu nog een stop erachteraan en er is een byte verzonden. Alles uitgebeeld in fig 2.

Bidirectioneel heb ik ooit eens beweerd.
Zoals uiteengezet is, gaat data heen en weer over de datalijn. Maar niet over de clock. Eh... nee, hier niet. Bedenk dat dit alles slechts het begin van het verhaal is. Het protokol van de IIC bus is veel gekompliceerder. Er mogen namelijk meerdere masters op de bus. Als er twee tegelijk verzinnen dat ze de bus willen hebben, gaat het fout zou je zo zeggen.

Dat valt wel mee. Er zijn voorzieningen getroffen om ongelukken te voorkomen en daarbij wordt de clock ook bidirektioneel gebruikt. Dit voert op dit moment te ver. Eén ding tegelijk en dat is al meer dan genoeg.

Dit hele verhaal wordt weergegeven in fig 2. Dat was het dan voorlopig.

En dan nu aktie.
Om te voorkomen dat dit een soapopera wordt waar dus eindeloos doorgegaan wordt over niets, moet er maar eens iets gebeuren. Als demonstratie heb ik gekozen voor een LCD display aansturen.

Is leerzaam en sensationeel voor de argeloze toeschouwer. Op dit moment ben ik daar mee bezig maar het gaat nog niet helemaal goed. Kan drie redenen hebben.

Het is een oud ding uit de rommelbak.
Ik maak een fout.
De logicalevels zijn niet goed.

Volgende keer verder.