Rob's web

I2C tester

Pic 1

Data-speurder voor I2C-systemen.

De PC-bus is zo langzamerhand een standaard geworden als het gaat om de kommunikatie tussen IC's in o.a. audio- en video-apparatuur. De steeds komplexere funkties van de IC's in deze apparaten maken het noodzakelijk om ze op een intelligente manier data te laten uitwisselen, zodat minder bedrading tussen de IC's en minder aansluitpennen nodig zijn. A1le kommunikatie loopt nu via een driedraads-verbinding. Om de funkties in een PC-systeem te kunnen testen, is echter op zijn minst een skoop of een logic analyzer nodig. Met de hier beschreven schakeling gaat dat een stuk eenvoudiger en duidelijker.

Het I2C-systeem bestaat al de nodige jaren en ook in Elektuur hebben we daar reeds de nodige aandacht aan besteed. In januari 1992 werd een I2C-interface gepubliceerd waarmee men via de PC I2C-IC's kan "kommanderen". Daarna volgden diverse schakelingen die op deze I2C-bus konden worden aangesloten (zoals een display en een pratend klokje). Wat is nu het voordeel van die I2C-bus? We hebben al enkele zaken in de inleiding genoemd. Vroeger had je voor elke funktie van een IC wel een ingangspen nodig om die te kunnen besturen. Maar dat zou met de vele komplexe mogelijkheden van de huidige IC's al snel een bos van aansluitpennen tot gevolg hebben, plus de nodige bijbehorende printbanen. Vooral in dit digitale tijdperk betekent kommunikatie tussen IC's al snel een rits data- en adreslijnen. Om dat allemaal wat binnen de perken te houden, heeft Philips dus de I2Cbus bedacht die tot doel heeft om de besturing tussen IC's via een driedraads-verbinding te laten verlopen. Het gaat hier dus uitsluitend om niet-tijdkritische zaken; het is niet de bedoeling om digitale audio of andere dergelijke zaken hierlangs te gaan versturen, daarvoor is de bus veel te langzaam (maximale snelheid 100 Kb/s).

Tegenwoordig zijn voor bijna alle toepassingen in de konsumentenelektronica IC's verkrijgbaar met een I2C-interface. Treedt er echter een fout op in een apparaat dat met dergelijke chips is uitgerust, dan moeten ook de I2C-bus en de daarop aangesloten komponenten getest worden om die fout te kunnen opsporen. Meestal is een eenvoudige kontrole wel mogelijk met de oscilloskoop. Daarmee kan men dan zien of er signalen op de SDA- en SCL-lijn aanwezig zijn (hoog nivo: bus is vrij, wisselspanning: data resp. clock aanwezig). Een diepgaande test kan zo echter niet worden uitgevoerd, daarvoor moet toch wel wat meer moeite worden gedaan. Daarom is deze tester ontworpen die met behulp van een aantal LED's en DIP-switches de mogelijkheid biedt om precies na te gaan wat er op de I2C-bus gebeurt. Men kan hierbij een IC-adres instellen en kijken of dit op de bus verschijnt. Verder kan het algemene dataverkeer worden gevolgd. Er zijn zes LED's die daarbij de volgende indikaties geven:

SDA/SCL: data aanwezig op SDA resp. SCL.
START: er wordt een geldige startkonditie verzonden.
ACK: Het op de tester ingestelde hex-adres wordt door het bewuste slave-IC bevestigd (met een ACKpuls).
ADDRESS: het met de DIP-switches ingestelde hexadecimale adres is op de bus aanwezig.
LOGIC: het statische logische nivo op een lijn, onafhankelijk van de I2C-bus.

In principe zou men verschillende van zulke zaken met wat moeite ook op een logic analyzer zichtbaar kunnen maken, maar dat wordt moeilijk als er diverse slave-IC's op een bus zitten en bovendien ... hoeveel mensen hebben zo'n apparaat? Mocht u de gelukkige bezitter van zo'n analyzer zijn, dan biedt de I2C-tester een extra uitgang met het ADDRESS-signaal, waarmee de logic analyzer dan op bepaalde adressen getriggerd kan worden. Aangezien slechts 2 datastromen met relatief lage frekwenties zichtbaar gemaakt moeten worden, kan daarvoor ook een digitale geheugenoscilloskoop gebruikt worden (waarbij de ext: sync-ingang met de ADDRESS-uitgang verbonden wordt).

Het draait om een GAL

Het hoofdbestanddeel van de schakeling is een GAL van het type 6001. Hierin is een groot aantal funkties ondergebracht voor de I2C-tester, zodat verder maar een zeer beperkte hoeveelheid komponenten nodig is. De 6001 lijkt uiterlijk wat op de bekende 20V8 die al in diverse Elektuur-ontwerpen is toegepast, maar heeft innerlijk heel wat meer mogelijkheden. De belangrijkste sommen we hier even op:

Dit in het kort voor de liefhebbers. Uit deze punten blijkt in elk geval dat de 6001 heel wat meer in zijn mars heeft dan de 20V8 en dat wordt in deze toepassing ook goed benut.

Om de gewenste funkties met de hand op te zetten, is niet zo eenvoudig. Tegenwoordig zijn er echter betaalbare computerprogramma's die ons daarbij een handje helpen. In dit geval is door de auteur gebruik gemaakt van het programma easy ABEL (prijs circa ƒ 500,-). Het ontwerp wordt daarbij in een zogenaamde Hardware Description Language algemeen beschreven, waarna het programma daaruit de geoptimaliseerde funkties samenstelt en ook IC's voorstelt die daarvoor gebruikt kunnen worden. Na de IC-keuze worden zelfs automatisch pennen aan de verschillende funkties toegekend. Daaruit resulteert dan een JEDEC-programmeer-file die door de meeste GAL-programmers gebruikt kan worden om een GAL te programmeren.

Twee IC's plus voeding

Misschien bent u wel enigszins teleurgesteld bij het zien van het schema in figuur 1, want dat stelt echt niet veel voor. Dat komt gewoon omdat er zoveel funkties in de GAL verwerkt zijn. Buiten deze 6001 is er dan ook nog maar een IC met een aantal buffers nodig om de zaak kompleet te maken. Om u toch een indruk te geven van de interne werking van IC1, is in figuur 2 een blokschema gegeven met de inwendige funkties. A1s dit met standaard-IC's gerealiseerd had moeten worden, dan was de schakeling heel wat groter geworden.

Fig 1
Figuur 1. Het schema van de I2C-tester stelt echt niet veel voor. Slechts twee IC's verwerken de digitale signalen. Dat is mogelijk door de toepassing van een GAL.

Onderdelenlijst
R1,R3,R5100 k
R2,R4,R6,R1222 k
R7,R9...R11390 Ω
R8weerstand-array 8 × 10 k
C122 n
C2...C610 n
C7100 µF/ 16 V
C8...C10100 n
D1...D35V6/400 mW zenerdiode
D4,D9,D11LED rood, 3 mm
D5,D6,D8,D10,D12,D141N4148
D7LED groen, 3 mm
D13,D15LED geel, 3 mm
T1,T2BC550
IC16001 (EPS 6343)
IC24050
IC37805
K110-polige rechte box-header
S1,S24-voudige DIP-switch
1 net-adapter 9...15 V/250 mA
1 print inkl. geprogrammeerde 6001, EPS 930128

Fig 2
Figuur 2. Hier zijn blokschematisch de verschillende funkties weergegeven die in de GAL van het type 6001 ondergebracht zijn.

Wat gebeurt er in de schakeling? Met behulp van een uitgebreid tijdvolgorde-diagram (figuur 3) kunt u het signaalverloop in de I2C-tester goed volgen. De signalen SDA (Serial DAta) en SCL (Serial CLock) komen binnen op konnektor M. De zeners D1 en D2 zorgen er voor dat te grote ingangsspanningen worden begrensd op een waarde van 5,6 V (normaal wordt in een I2C-systeem met 5 V gewerkt). Vervolgens worden ze opgepoetst door de buffers IC2a en IC2b, waarna ze naar pen 1 en 14 van de GAL worden gevoerd. Daar worden ze nog eens gebufferd en daarna gaan ze via pen 17 en 18 van IC1 naar twee transistortrapjes (T1 en T2) die door middel van LED's laten zien wat er op de SDAen SCL-lijn gebeurt. De kondensatoren C5 en C6 zorgen er voor dat de LED's uitsluitend oplichten tijdens positieve signaalflanken die op deze twee lijnen verschijnen. Een startkonditie op de I2C-bus wordt herkend door een stukje logica dat rechts in figuur 2 herkenbaar is en dat het signaal "edge" levert. Dit signaal ontstaat op het moment dat SDA laag wordt gemaakt en SCL hoog is. liet edge-signaal start de inleescyclus van een 8-bits schuifregister en reset een 4-bits teller. Tevens wordt het gebruikt om een SR-flipflop te resetten. Ziet schuifregister zet het op de SDA-lijn verzonden seriële adres (7-bits adres + R/W-bit) om in een 8-bits parallelwoord, waarbij de SCL-lijn het kloksignaal levert. liet MSB staat daarbij in hek blokschema helemaal links aan de schuifregister-uitgangen. De eerste 7 ontvangen bits vormen het adres, terwijl het achtste bit de data-richting aangeeft. "0" betekent: de master wil data versturen (schrijven), "1" betekent: de master wil data ontvangen (lezen). De uitgangen van het schuifregister zijn verbonden met een 8-bits komparatorschakeling waarop extern twee viervoudige DIP-switches zijn aangesloten (S1 en S2). De komparator vergelijkt het met de DIP-switches ingestelde adres met de ontvangen data en geeft in het geval dat deze overeenkomen een signaal door aan een blok logica dat rechtsonder in het blokschema zichtbaar is.

Fig 3
Figuur 3. Dit tijdvolgorde-diagram laat zien wat er nu precies in de GAL gebeurt en welke signalen er uit komen.

Om te detekteren dat het door de komparator gedetekteerde byte ook werkelijk het adres-byte is (het kan immers voorkomen dat tijdens het versturen van data hetzelfde bitpatroon voorbij komt), zijn de flipflop en de vier-bits teller toegevoegd. De flipflop en de teller worden door het edge-signaal (dat verschijnt na de startkonditie) gereset, waarna de vierbits teller door het SCL-signaal geklokt wordt. Gedurende 9 pulsen na de startkonditie wordt de flip-flop door de logica weer geset. De drie uitgangen 15, 16 en 19 zijn verbonden met drie buffertrappen (IC2d, IC2e en IC2f) waaraan een kondensator is toegevoegd tussen in- en uitgang, zodat deze buffers als monoflop werken. De pennen 16 en 19 leveren namelijk korte pulsen af. Op deze wijze lichten de aan de uitgangen aanwezige LED's lang genoeg op om een duidelijke indikatie te geven. Bij uitgang 15 gaat het er om de opgaande flanken zichtbaar te maken; daarvoor zorgen C1 en D5. Na het versturen van een byte moet het IC waarvoor dit byte bedoeld was dit "melden" door het sturen van een acknowledge-puls (ACK). hiermee geeft het aan dat het voorgaande byte korrekt ontvangen is. Daarbij maakt de verzender (bij het versturen van een adres-byte altijd een master) de SDA-lijn hoog en wacht tot de ontvanger SDA laag maakt. Gebeurt dat niet, dan wordt de kommunikatie tussen beide IC's gestopt. Wordt het adres-byte door een slave-IC bevestigd, dan zal de ACK-LED oplichten. In zo'n geval kan men er van uitgaan dat het bewuste slave-IC in orde is (tenminste, het I2C-gedeelte van het IC).

Met de resterende buffer IC2c is nog een eenvoudige logica-tester gemaakt waarmee digitale nivo's zichtbaar kunnen worden gemaakt. Ook hier is (net zoals bij de ingangen SDA en SCL) een beveiliging aanwezig die de ingangsspanning begrenst tot een waarde van 5,6 V.

Nu rest ons nog de voeding. Die bestaat uit een 7805-stabilisator die het geheel van een 5-V-gelijkspanning voorziet. Een nettrafo is niet op de print aanwezig; er wordt gebruik gemaakt van een net-adapter die een stroom van circa 250 mA kan leveren bij een voedingsspanning van 9...15 V.

De adressering

Bij het gebruik van de I2C-tester is het belangrijk dat men de adressen van de verschillende IC's in een apparaat kent, anders is het natuurlijk niet mogelijk om met de DTP-switches de juiste logische nivo's in te stellen die de tester op de I2C-bus moet herkennen. Philips, de grote initiator achter het I2C-gebeuren, levert een uitgebreid skala aan I2C-IC's. Om u een handje op weg te helpen met de adressen van de IC's, geven we hier een overzicht van de meeste IC's die in de Philips-databoeken staan.

TypeFunktieAdres
 "general call"-adres0000 0 0 0 X
 gereserveerde adressen0000 Y Y Y X
  1111 Y Y Y X
PCD3311/12DTMF/ modem /toon-generator0100 1 0 A1 X
PCF8200spraak-synthesizer0010 0 0 0 X
PCF8566universele LCD-driver0111 1 1 A1 X
PCF8570/71statische RAM (256x8/128x8)1010 A3 A2 A1 X
PCF8570Cstatische RAM (256x8)1011 A3 A2 A1 X
PCF8572EEPROM (128x8)1010 A3 A2 A1 X
PCF8573real-time-klok/kalender1101 0 A2 A1 X
PCF8574remote 8-bits I/O-expander0100 A3 A2 A1 X
PCF8574Aremote 8-bits I/O-expander0111 A3 A2 A1 X
PCF8576universele LCD-driver0111 0 0 A1 X
PCF8577LCD direkt/duplex-driver0111 0 1 0 X
PCF8577ALCD direkt/duplex-driver0111 0 1 1 X
PCF8578LCD-driver voor dot-matrix0111 1 0 A1 X
PCF8579LCD-driver voor dot-matrix0111 1 0 A1 X
PCF8582AEEPROM (256x8)1010 A3 A2 A1 X
PCF8583klok-kalender met stat. RAM1010 0 0 A1 X
PCF85918-bits A/D- en D/A-konverter1001 A3 A2 A1 X
SAA10644-digit LED-driver0111 0 A2 A1 X
SAA1Il36PCM-audio-interface0011 1 1 0 X
SAA1300tuner-schakelcircuit0100 0 A2 A1 X
SAA3028IR-transcoder (RC-5)0100 1 1 0 X
SAA4700VPS-dataline-processor0010 0 0 A1 X
SAA5243/45comp. bestuurd teletekst-circuit0010 0 0 1 X
SAA9020geheugen-controller0010 1 A2 A1 X
SAA9050I51dig. multistandaard TV-dekoder1000 1 0 1 X
SAA9055F/8Adig. SECAM-dekoder1000 1 0 1 X
SAA9055P/8Edig. SECAM-dekoder1000 1 1 1 X
SAA9062/63/64dig. controller voor afbuiging1000 1 1 0 X
SAA9068beeld-in-beeld-controller (PIPCO)0010 0 1 A1 X
SAB3035/36/37comp. interface voor afstemming1100 0 A2 A1 X
SAF1135data-lijn-dekoder0010 0 A2 A1 X
TDA8370sync-processor voor TV-ontvangers1000 1 1 0 X
TDA8400comp.-interface prescaler-synth.1100 0 A2 A1 X
TDA8405stereo geluidsprocessor voor TV1000 0 1 0 X
TDA8420/8421stereo audioprocessor1000 0 0 A1 X
TDA8425stereo audioprocessor1000 0 0 1 X
TDA8440video/audio-schakelaar1001 A3 A2 A1 X
TDA8442interface voor kleurdekoder100O 1 0 0 X
TDA8443AYUV/RGB-interface1101 A3 A2 A1 X
TDA84448-voudige 6-bits DAC0100 A3 A2 A1 X
TDA8461PAL/NTSC-dekoder1000 1 0 A1 X
TDA8440schakelaar voor TV-ontvangers1001 A3 A2 A1 X
TEA6000/6100FM/IF-systeem en micropr.-tuner1100 0 0 1 X
TEA6300(T)/10Tfader-geluidscircuit1000 0 0 0 X
TEA6330Tregelversterker1000 0 0 0 X
TEA6360equalizer1000 0 1 A1 X
TSA5510(T)l,3-Oliz-frekwentie-synthesizer1100 0 A2 A1 X
TSA6057(T)radio-PLL-frekwentie-synthesizer1100 0 1 A1 X
UMA1000Tdata-processor voor draadloze tel.1101 1 A2 A1 X
UMA1010Tun. synthesizer voor radio-komm.1100 0 0 A1 X
A3, A2 of A1 geeft een adresplaats aan die de gebruiker bij het IC zelf nog kan instellen.
X is het R/W-bit (afhankelijk van de lees- of schrijf-toestand is dat 0 of 1).
Y is een don't-care-bit.

De konstruktie

Aangezien er voor deze schakeling een print ontworpen is die via de EPS leverbaar is, hoeft u voor de opbouw van deze schakeling niet veel moeite te doen. Kijken we naar de layout in figuur 4, dan zal het aan de hand van de komponentenopstelling niet moeilijk zijn om alles op de juiste plaats te monteren. liet is verstandig om de GAL tot het laatst te bewaren, dan kan daar tijdens het solderen van de andere komponenten niets mee gebeuren.

Fig 4
Figuur 4. De print voor de tester is bescheiden van afmetingen en bevat toch alle onderdelen, schakelaars en konnektoren. Het enige externe "onderdeel" is een net-adapter.

Pic 2

De frontplaat (figuur 5) zorgt er voor dat de funktie van de LED's en de schakelaartjes duidelijk herkenbaar is. Bij de montage van de LED's, de DIP-switches en de 10-pens header K1 moet u even opletten hoe diep het gebruikte kastje is. het is natuurlijk de bedoeling dat de LED's juist achter de frontplaat komen te zitten. De DIP-switches en de header moeten zo hoog komen dat ze goed bereikbaar zijn, dus minstens op gelijke hoogte met de bovenkant van de frontplaat. Daartoe kunt u de print het beste vlak achter de frontplaat monteren met behulp van afstandsbusjes van de juiste lengte.

Fig 5
Figuur 5. Deze frontplaat toont duidelijk de funkties van de LED's en de DIP-switches.

Voor de voeding van de tester wordt aan de zijkant van de behuizing een voedingskonnektor geplaatst. liet gebruikte type hangt af van de net-adapter die u hierbij toepast.

Tot slot wordt nog een "meetkabel" gefabriceerd. Daartoe neemt u een stuk 10-aderige flat-cable (bijv. 50 cm) en voorziet deze aan een kant van een 10-pens perskonnektor die in de box-header past. Aan de andere kant worden de aders een stukje van elkaar losgetrokken (of losgesneden) en voorzien van bijv. miniatuur meetklemmen. Deze kunt u dan in de te testen schakeling met de juiste lijnen verbinden. Voorzie de meetklemmen van duidelijke opschriften.

Dan kan de tester nu gebruikt worden voor metingen aan I2C-systemen. Bij dergelijke metingen kan het een probleem zijn om er achter te komen op welke adressen de aanwezige IC's zich bevinden. Een IC krijgt door de fabrikant wel een bepaald vast adres of adresbereik toegewezen, maar bij veel IC's kan de ontwerper zelf nog gedeeltelijk het IC-adres vastleggen met behulp van enkele pennen. liet is daarom verstandig om zoveel mogelijk gegevens van de aanwezige IC's in een systeem bij de hand te hebben, en liefst ook nog een schema van het apparaat waarin gemeten wordt. Bij IC's waarbij het adres niet goed herkenbaar is, zullen dan verschillende adressen met de DIP-switches moeten worden geprobeerd om te zien of er een IC in de schakeling op reageert.