Meten en analyseren van I²C-signalen

Introductie

I2C (Inter-Integrated Circuit) is een seriële bus, die gebruikt wordt om gegevens uit te wisselen met lage-snelheid randapparatuur. I2C gebruikt twee bi-directionele lijnen, seriële data (SDA) en seriële klok (SCL). Specifieke spanningen die gebruikt worden zijn +3.3 V of +5 V. De meest gangbare I2C-bus-modes zijn de 400 kbit/s fast mode, de 100 kbit/s standard mode en de 10 kbit/s low-speed mode. Een high speed mode van 3.4 Mbit/s is ook beschikbaar.

I2C gebruikt afhankelijk van het apparaat een 7 bits of 10 bits adres met 16 gereserveerde adressen, wat inhoudt dat maximaal 1008 nodes op dezelfde bus kunnen communiceren. Twee typen nodes zijn mogelijk: master en slave. I2C-apparaten gebruiken een speciaal protocol om met elkaar te communiceren.

Als apparaten op een I2C-bus niet goed communiceren, is er waarschijnlijk iets fout en moet die fout opgespoord worden. Wanneer de elektrische parameters allemaal juist zijn, moeten de signalen geanalyseerd worden om te kijken of het communicatieprotocol juist is geïmplementeerd. Meten van de elektrische eigenschappen van de twee signalen in de I2C-bus gaat eenvoudig met een oscilloscooop.

Benodigdheden

Meten

Voor het meten van I2C-signalen is een meetinstrument met tenminste twee ingangskanalen vereist. De maximale frequentie op een I2C-bus hangt af van het bus-type, het instrument moet tenminste twee keer zo snel bemonsteren als de maximale snelheid van de bus, op beide kanalen tegelijkertijd, maar vijf tot tien maal sneller heeft de voorkeur. Voor een 100 kbit/s bus houdt dat in dat op bij voorkeur 1 MHz bemonsterd wordt, op beide kanalen tegelijk. I2C gebruikt of 3.3 V of 5 V signalen. Het instrument moet dus minimaal in staat zijn spanningen van 0 tot 5 V te meten, maar bij voorkeur wordt er gemeten met een groter bereik om overshoot en storing goed te kunnen zien op het signaal. Omdat een gegevensoverdracht lang kan duren, is een grote recordlengte gewenst voor het opnemen van de communicatie.

De Handyscope HS3, Handyscope HS4, Handyscope HS4 DIFF,Handyscope HS5 en de Handyscope HS6 DIFF zijn geschikte instrumenten voor het meten van I2C-signalen.

Analyseren

Om het communicatieprotocol in de gemeten signalen te analyseren, moeten de diverse pulsen in beide signalen en hun volgorde onderzocht worden en omgezet worden naar I2C-commando's en -data.

De TiePie engineering Multi Channel oscilloscoop-software is in staat het I2C communicatieprotocol te analyseren, met behulp van de I2C analyzer.

In dit voorbeeld wordt een Handyscope HS4 gebruikt om I2C-signalen te meten van een I2C EEPROM IC.

Instellen van de hardware

Allereerst wordt de Handyscope HS4 aangesloten op de computer en de Multi Channel oscilloscoop-software gestart.

Dan wordt Ch1 op het Serial Clock-signaal van de I2C-bus en Ch2 op het Serial Data-signaal van de I2C-bus aangesloten. De massa-aansluitingen van de twee ingangskanalen moeten op dezelfde massa als die de I2C bus gebruikt aangesloten worden.

Instellen van de software

Instellen van de ingangskanalen

Omdat maar twee kanalen gebruikt worden om de I2C-signalen te meten, kunnen Ch3 en Ch4 van de Handyscope HS4 uit de grafiek weggelaten worden.

Ch1 wordt gebruikt om het Serial Clock-signaal (SCL) te meten en Ch2 om het Serial Data-signaal (SDA) te meten. Om het herkennen van de signalen te vereenvoudigen, kunnen beide een beschrijvende naam (alias) krijgen. Klik, om de alias van een kanaal te veranderen, met de rechter muisknop op het kanaal in het objectscherm en selecteer Stel alias in... en vul de gewenste waarde in. Geef Ch1 als alias "SCL" en Ch2 "SDA".

I²C-signalen liggen tussen 0 V en +3.3 V of +5 V. Zet de ingangskoppeling van de beide kanalen op "DC" en de ingangsgevoeligheid van de beide kanalen op "8 V" volle schaal. Op deze manier kunnen beide systemen goed gemeten worden.

Instellen van de tijdbasis

De I2C signalen in ons voorbeeld zijn gemeten op een 100 kbit/s bus en kunnen daarom frequenties tot 100 kHz bevatten. Dat houdt in dat de minimaal vereiste samplefrequentie 200 kHz is. Dit resulteert echter in slechts 2 samples per periode, net genoeg om het signaal te herkennen, maar niet voldoende om het goed te analyseren. Zet daarom de samplefrequentie op tenminste 1 MHz.

Omdat I2C-communicatie verscheidene milliseconden kan duren, is een grote recordlengte gewenst, om zoveel mogelijk van de communicatie op te vangen. In dit voorbeeld wordt een relatief korte boodschap gemeten, daarom is de recordlengte op 20000 samples gezet, waardoor onze meting 20 ms zal duren Wanneer een langere communicatie verwacht wordt, zet dan de recordlengte op een grotere waarde, bijvoorbeeld 100000 samples.

Instellen van de trigger

Zowel SCL als SDA zijn in rust hoog. Wanneer een communicatie start, wordt eerst de SDA-lijn laag. Selecteer daarom Ch2 als triggerbron en kies "neergaande flank" als triggermodus. Stel het triggerniveau in op ongeveer halverwege het signaal, bijvoorbeeld 1.5 V. Stel de triggerhysteresis in op een niet te grote waarde, ongeveer 0.5 V. Er zal nu een trigger optreden wanneer Ch2 een neergaande flank meet, waarbij het signaal eerst groter is dan +2 V en dan onder +1.5 V zakt.

meten van I²C-signalen

Instellen van de I2C-analysator

Voor het analyseren van I2C-signalen wordt de I2C analyzer sink gebruikt. Creëer er een door met de rechter muisknop op Sinks in het objectscherm te klikken en dan I2C analyzer te kiezen. Dit opent tevens een extra venster, waarin de geanalyseerde I2C communicatie weergegeven wordt.

Aan de I2C-analysator moeten twee bronnen verbonden worden, de eerste bron wordt als SCL beschouwd, de tweede bron als SDA. Sleep eerst Ch1 op de I2C-analyzer en sleep daarna Ch2 op de I2C-analyzer.

Het I2C-analyzer-uitvoerscherm zal nu weergeven welke bron op de SCL-ingang en welke bron op de SDA-ingang is aangesloten.

I²C-analysator

Wanneer de ingangen met de verkeerde bronnen verbonden zijn, verwisselt een druk op de Ingangen omwisselen-knop SwapBtn de ingangen.

De I2C-analyzer kan zowel 3.3 V I2C-bussen als 5 V I2C-bussen analyseren. Om het juiste bustype in te stellen moet met de rechter muisknop op de I2C-analyzer in het objectscherm geklikt worden en Voltage gekozen worden en aansluitend 3.3 V of 5 V. In ons voorbeeld meten we aan een 3.3 V bus.

Klaar om te meten

Nu beide ingangen en de I2C-analyzer ingesteld zijn, kan een meting uitgevoerd en geanalyseerd worden.

De I2C signalen die in de bovenstaande afbeelding getoond worden zijn van een communicatie met een EEPROM IC. Ze zijn door de I2C-analyzer vertaald naar de volgende commando's:

meten van I²C-eeprom

Alle gelezen en geschreven waarden die in de I2C-analyzer worden weergegeven worden getoond in hexadecimaal formaat, alleen adressen worden weergegeven met prefix 0x.

Druk op de knop Wissen ClearBtn om het uitvoerscherm te wissen voor een nieuwe meting.

Als een stuk communicatie langer is dan het I2C-analyzer-uitvoerscherm, is het niet mogelijk de tekst te zien die onderaan toegevoegd wordt. Het venster heeft een auto scroll-functie, die er voor zorgt dat altijd de onderste regels zichtbaar zijn. Om deze functie aan of uit te zetten moet op de Scroll automatisch naar beneden knop ScrollBtn gedrukt worden.

Om de inhoud van het uitvoerscherm op schijf op te slaan kan op de Opslaan-knop SaveBtn gedrukt worden.

Instellen van adres-aliasen

Het I2C-protocol gebruikt adressen om de diverse apparaten op de bus te benaderen. Om het lezen van de gedecodeerde I2C-communicatie te vereenvoudigen, kunnen de adressen in het uitvoerscherm vervangen worden door beschrijvende namen (Aliassen). Klik op de tab Aliassen in het I2C-analysator-uitvoerscherm, om de aliassen voor de adressen die in de communicatie voorkomen, in te stellen.

Setting aliases

Aliassen voor adressen kunnen worden toegevoegd door op de Toevoegenknop AliasBtn te drukken en gewijzigd worden door op de knop Bewerken EditBtn te drukken. Vaak gebruikte aliassen kunnen op schijf opgeslagen worden (SaveBtn) en weer teruggelezen worden (OpenBtn).

Zodra de aliassen ingevuld zijn, zullen de volgende metingen de ingevulde aliassen tonen.

measuring I²C eeprom

Slechte signalen schoonmaken

In industriële omgevingen kunnen de gemeten signalen erg "smerig" zijn, waardoor de I²C-analysator problemen kan hebben de communicatie juist te decoderen. Schoonmaken van de signalen kan decoderen van de signalen door de I2C-analysator verbeteren.