Hoe meet en analyseer je 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-modi 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 WiFiScope WS6 DIFF, WiFiScope WS6, WiFiScope WS5, WiFiScope WS4 DIFF, Handyscope HS6 DIFF, Handyscope HS5, Handyscope HS4 DIFF, Handyscope HS4 en de Handyscope HS3 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 decoder.

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

Instellen van de hardware

Allereerst wordt de Handyscope HS5 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

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 Alias... 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-decoder

Voor het analyseren van I2C-signalen wordt de I2C decoder sink gebruikt. Creëer er een door op I/O's in het objectscherm te klikken, dan op Decodeer en tot slot I2C decoder te kiezen.

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

Het I2C-decoder-instellingenscherm, te openen door de I/O te dubbelklikken, zal nu weergeven welke bron op de SCL-ingang en welke bron op de SDA-ingang is aangesloten.

I²C-decoder

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

De I2C-decoder kan zowel 3.3 V I2C-bussen als 5 V I2C-bussen analyseren. Alle signaalniveaus boven het Niveau worden als logische "1" beschouwd en alle niveaus onder Niveau - Hysterese als logische "0". De decoder kan aan de hand van het gemeten signaal zelf een niveau en hysterese bepalen of de gebruiker kan zelf spanningswaarden invullen die als niveau en hysterese gebruikt worden. Normaal gesproken zal Auto-niveau voldoen, dus zet Automatisch niveau en hysterese detecteren aan.

Om de gedecodeerde I2C-boodschappen weer te geven wordt een Tabel-sink gebruikt. Maak deze door te klikken op Sinks in het objectscherm en dan Tabel te kiezen. Verbind de I2C-decoder met de tabel door de decoder op de tabel te slepen in het objectscherm.

Klaar om te meten

Nu beide ingangen en de I2C-decoder 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-decoder vertaald naar de volgende commando's:

meten van I²C-eeprom

Druk op de ClearBtn Wissen-knop om de tabel te wissen voor een nieuwe meting.

De I2C-decoder kan meer kolommen met informatie tonen die standaard niet ingeschakeld zijn. Klik op de ColumnSelectBtn Selecteer kolommen-knop om kolommen in- of uit te schakelen in de tabel.

Als een stuk communicatie langer is dan de tabel, is het niet mogelijk de tekst te zien die onderaan toegevoegd wordt. De tabel 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 ScrollBtn Scroll automatisch naar beneden-knop worden gedrukt.

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

Slechte signalen schoonmaken

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