Freigeben über


I2C WinRT-Lesetests (EEPROM erforderlich)

Die I2C-Tests führen Funktions- und Stresstests an I2C-Controllern durch, die über die Windows.Devices.I2c WinRT-APIs im Benutzermodus zugänglich sind. Die Tests sind in zwei Teile unterteilt : grundlegende funktionale und Stresstests und erweiterte funktionale Tests. Der Umfang der Tests der grundlegenden Funktionalen Tests umfasst:

  • Überprüfung, ob ein I2C-Controller mit angegebenem Anzeigenamen über den Benutzermodus zugänglich ist.
  • Überprüfung, ob Daten über einen Bereich von Taktgeschwindigkeiten und Pufferlängen bis zu 8 Bytes (EEPROM-Seitengröße) korrekt geschrieben werden.
  • Überprüfung, ob Daten über einen Bereich von Taktgeschwindigkeiten und Pufferlängen korrekt gelesen werden.
  • Überprüfung, dass Schreib-Neustart-Lesesequenzen (WriteReads) korrekt über einen Bereich von Taktgeschwindigkeiten und Pufferlängen ausgeführt werden.
  • Überprüfung, dass der Treiber STATUS_NO_SUCH_DEVICE zurückgibt, wenn versucht wird, einen Schreib-, Lese- oder Schreib-Lese-Zugriff auf eine Slave-Adresse durchzuführen, die nicht bestätigt wird. Dies wird von I2cDevice::Write/Read/WriteRead() als HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) gemeldet und wird von I2cDevice::WritePartial/ReadPartial/WriteReadPartial() als I2cTransferStatus::SlaveAddressNotAcknowledged gemeldet.
  • Überprüfen Sie, ob die APIs und Treiber unter Stressbedingungen ordnungsgemäß funktionieren. Die Stresstests führen über eine längere Dauer gleichzeitig Lese- und Schreibvorgänge auf zwei EEPROMs durch, wobei separate Gerätegriffe verwendet werden.

Der Umfang der Tests der erweiterten Funktionalen Tests umfasst:

  • Überprüfen Sie, ob Daten für Pufferlängen von bis zu 16384 Bytes richtig geschrieben wurden.
  • Überprüfung, ob eine I2C-Neustartbedingung als Reaktion auf eine WriteRead-Sequenz generiert wird.
  • Überprüfung, dass der Treiber die Anforderung mit STATUS_SUCCESS abschließt, wenn das Slave-Gerät ein NAK sendet, während das Master-Gerät noch Bytes schreibt, und die tatsächliche Anzahl der über die Anforderungsinformationen geschriebenen Bytes meldet. Dies wird als partielle Übertragung bezeichnet und wird von WritePartial() und WriteReadPartial() als I2cTransferStatus::P artialTransfer gemeldet.
  • Überprüfung, dass das Dehnen des Takts bis zu 500 ms zulässig ist und nicht dazu führt, dass die Übertragung fehlschlägt.
  • Überprüfung, dass der Treiber die Übertragung innerhalb von höchstens 10 Sekunden mit einem Fehlercode abschließt, wenn das Slave-Gerät die Uhrlinie für eine längere Dauer niedrig hält (10+ Sekunden). Der Fehlercode sollte STATUS_IO_TIMEOUT werden, dies wird jedoch aus Kompatibilitätsgründen nicht überprüft.

Die grundlegenden Funktionstests und Stresstests werden mit zwei extern verbundenen EEPROMs ausgeführt. Die erweiterten Funktionstests werden mit einer mbed LPC1768 ausgeführt, die benutzerdefinierte Firmware ausführt. Die mbed LPC1768 ist eine beliebte Mikrocontroller-Prototypplattform, die von einer Vielzahl von Onlinehändlern wie Farnell, Digikey und Adafruit erworben werden kann. Das Aktualisieren der Mbed-Firmware ist so einfach wie das Ziehen und Ablegen einer Datei. Der Firmwarequellcode ist auf github verfügbar. Anweisungen zum Vorbereiten des mbed und zum Ausführen der Tests finden Sie unten.

Testdetails

   
Spezifikationen
  • Device.BusController.I2C.WinRT.diskretionär
Plattformen
    Unterstützte Versionen
    • Windows 10
    • Windows 10, Version 1511
    • Windows 10, Version 1607
    • Windows 10, Version 1703
    • Windows 10, Version 1709
    • Windows 10, Version 1803
    • Windows 10, Version 1809
    • Windows 10, Version 1903
    • Nächstes Update zu Windows 10
    Erwartete Laufzeit (in Minuten) 5
    Kategorie Entwicklung
    Timeout (in Minuten) 10
    Erfordert neustarten Falsch
    Erfordert eine spezielle Konfiguration Wahr
    Typ automatisch

     

    Zusätzliche Dokumentation

    Tests in diesem Featurebereich verfügen möglicherweise über zusätzliche Dokumentationen, einschließlich Voraussetzungen, Setup und Problembehandlungsinformationen, die im folgenden Thema(n) zu finden sind:

    Ausführen des Tests

    Ausführen der grundlegenden Funktions- und Stresstests

    Zum Ausführen der Tests benötigen Sie die folgende Hardware:

    Verbinden Sie die EEPROMs wie im folgenden Diagramm dargestellt, und verbinden Sie SDA und SCL mit Ihrem Gerät, das getestet wird.

    i2c EEPROM-Schaltplan

    Sie können nun die grundlegenden Funktions- und Stresstests vom HLK-Manager planen.

    Ausführen der erweiterten Funktionstests

    Die erweiterten Funktionstests überprüfen das NACK-Verhalten, eingefrorene Busbedingungen, Taktdehnung und wiederholte Starts. Die Tests erfordern, dass ein mbed LPC1768 mit benutzerdefinierter Firmware mit dem zu testenden Gerät verbunden ist. Bevor Sie die Tests ausführen, müssen Sie die HLK-Firmware auf die mbed LPC1768 laden. Hier erfahren Sie, wie Sie die Firmware aktualisieren:

    1. Schließen Sie die mbed LPC1768 über USB an Ihren PC an. Es wird als wechselbares Laufwerk auf Ihrem PC angezeigt.
    2. Öffnen des Laufwerks im Datei-Explorer
    3. Kopieren Sie c:\Programme (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin in den mbed
    4. Drücken Sie die Taste auf dem Mbed, um den Mikrocontroller zurückzusetzen.

    Als Nächstes verbinden Sie das mbed an Ihr Gerät, das getestet wird. Schließen Sie das mbed per USB an Ihr zu testendes Gerät an. Erstellen Sie dann die I2C-Verbindungen (mbed pinout),

    1. Verbinden Sie mbed Pin 9 (P0.0/SDA) mit dem SDA-Pin auf Ihrem Gerät, das getestet wird.
    2. Verbinden sie mbed pin 10 (P0.1/SCL) mit dem SCL-Pin auf Ihrem Gerät, das getestet wird
    3. Verbinden Sie mbed GND mit einem GND-Pin Ihres zu testenden Geräts

    Der mbed verfügt über interne Pull-Up-Widerstände, die auf den SDA- und SCL-Linien aktiviert sind und keine externen Pull-Up-Widerstände erfordern.

    Sie können jetzt die erweiterten Funktionstests vom HLK-Manager planen.

    Fehlerbehebung

    Allgemeine Problembehandlung bei HLK-Testfehlern finden Sie unter "Problembehandlung bei Windows HLK-Testfehlern".

    Es wird empfohlen, die Tests auf der Kommandozeile auszuführen, um Einblicke in Fehler zu erhalten und schnell Lösungen zu iterieren. So führen Sie die Tests in der Befehlszeile aus:

    1. Kopieren Sie %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe in c:\data\minte

    2. Kopieren Sie Windows.Devices.LowLevel.UnitTests.dll aus %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch\iot> auf c:\data auf Ihrem Gerät.

    3. Telnet oder SSH auf Ihrem Gerät

    4. Ändern von Verzeichnissen in "c:\data"

    5. Führen Sie die Tests aus:

      minte\te windows.devices.lowlevel.unittests.dll /name:I2c*
      

    Verwendung des Befehlszeilentests:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name - der Name des auszuführenden Tests, der Auch Wildcards enthalten kann. Beispiele: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause – eine TAEF-Auswahlklausel. Beispiel: /select:"@name='I2c*' und nicht(@name='I2cTestsEx*')"
    • freundlicher_name - der freundliche Name des im Test befindlichen I2C-Controllers. Wird dieser Parameter nicht angegeben, wird der erste aufgezählte Controller verwendet. Beispiele: /p:I2cFriendlyName=I2C0
    • Dauer – wie lange Stresstests ausgeführt werden sollen. Beispiele: /p:Duration=10s (10 Sekunden), /p:Duration=1m (1 Minute), /p:Duration=2h (2 Stunden), /p:Duration=1d (1 Tag)

    Beispiele

    Führen Sie die grundlegenden Funktionstests aus.

    minte\te windows.devices.lowlevel.unittests.dll /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
    

    So führen Sie die erweiterten Funktionstests aus

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cTestsEx::*
    

    Um die Tests für eine Instanz eines bestimmten I2C-Controllers auszuführen, übergeben Sie den Anzeigenamen an den Testparameter "I2cFriendlyName".

    minte\te windows.devices.lowlevel.unittests.dll /name:I2c* /p:I2cFriendlyName=I2C0
    

    Um einen bestimmten Test auszuführen, übergeben Sie den vollständigen Testnamen an den Parameter "/name":

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cNonexistentSlaveAddressTests::TestWriteRead
    

    Um die Stresstests für die empfohlene Dauer von 8 Stunden durchzuführen, führen Sie

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cStressTests::StressIoConcurrent /p:Duration=8h
    

    Ein Tool, das bei der manuellen Problembehandlung helfen kann, ist I2cTestTool. I2cTestTool ist ein einfaches Hilfsprogramm für die Interaktion mit I2C über die Befehlszeile.

    Weitere Informationen

    Parameter

    Parametername Parameterbeschreibung
    I2cFriendlyName Der Anzeigename des im Test befindlichen I2C-Controllers (z. B. I2C0).