Condividi tramite


Test di scrittura WinRT I2C (obbligatorio EEPROM)

I test I2C eseguono test funzionali e di stress dei controller I2C esposti alla modalità utente tramite le API WinRT Windows.Devices.I2c. I test sono suddivisi in due parti: test funzionali e di stress di base e test funzionali avanzati. L'ambito dei test funzionali di base include:

  • Verifica che un controller I2C con nome descrittivo specificato sia accessibile dalla modalità utente.
  • Verifica che i dati vengano scritti correttamente su un intervallo di velocità di clock e lunghezze del buffer fino a 8 byte (dimensioni della pagina EEPROM).
  • Verifica che i dati vengano letti correttamente su un intervallo di velocità di clock e lunghezze del buffer.
  • Verifica che le sequenze di lettura write-restart-read (WriteRead) vengano eseguite correttamente su un intervallo di velocità di clock e lunghezze del buffer.
  • Verifica che quando si tenta di scrivere, leggere o WriteRead a un indirizzo slave non riconosciuto, il driver restituisce STATUS_NO_SUCH_DEVICE. Questo è segnalato da I2cDevice::Write/Read/WriteRead() come HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) e viene segnalato da I2cDevice::WritePartial/ReadPartial/WriteReadPartial() come I2cTransferStatus::SlaveAddressNotAcknowledged.
  • Verifica che le API e i driver funzionino correttamente in condizioni di stress. I test di stress scrivono e leggono da due EEPROMs simultaneamente con handle di dispositivo separati per una durata estesa.

L'ambito dei test funzionali avanzati include:

  • Verifica che i dati vengano scritti correttamente per le lunghezze del buffer fino a 16384 byte.
  • Verifica che venga generata una condizione di riavvio I2C in risposta a una sequenza WriteRead.
  • Verifica che quando il dispositivo slave NAK mentre il master sta ancora scrivendo byte, il driver completa la richiesta con STATUS_SUCCESS e segnala il numero effettivo di byte scritti tramite le informazioni della richiesta. Viene chiamato trasferimento parziale e viene segnalato da WritePartial() e WriteReadPartial() come I2cTransferStatus::P artialTransfer.
  • Verifica che l'estensione dell'orologio fino a 500 ms sia consentita e non causi l'esito negativo del trasferimento.
  • Verifica che quando il dispositivo slave mantiene bassa la linea di clock per una durata estesa (10+ secondi), il driver completa il trasferimento entro al massimo 10 secondi con un codice di errore. Il codice di errore deve essere STATUS_IO_TIMEOUT, ma non viene verificato per motivi di compatibilità.

I test funzionali di base e i test di stress vengono eseguiti su due EEPROM connessi esternamente. I test funzionali avanzati vengono eseguiti su un LPC1768 mbed che esegue firmware personalizzato. Mbed LPC1768 è una popolare piattaforma di prototipazione microcontroller che può essere acquistata da un'ampia gamma di rivenditori online, tra cui Sparkfun, Digikey e Adafruit. L'aggiornamento del firmware di mbed è semplice come il trascinamento e l'eliminazione di un file. Il codice sorgente del firmware è disponibile in github. Di seguito sono riportate le istruzioni per la preparazione del mbed e l'esecuzione dei test.

Dettagli del test

   
Specifiche
  • Device.BusController.I2C.WinRT.Discretional
Piattaforme
    Versioni supportate
    • Windows 10
    • Windows 10 versione 1511
    • Windows 10 versione 1607
    • Windows 10 versione 1703
    • Windows 10, versione 1709
    • Windows 10, versione 1803
    • Windows 10, versione 1809
    • Windows 10, versione 1903
    • Eseguire quindi l'aggiornamento a Windows 10
    Tempo di esecuzione previsto (in minuti) 5
    Categoria Sviluppo
    Timeout (in minuti) 10
    Richiede il riavvio false
    Richiede una configurazione speciale true
    Tipo automatic

     

    Documentazione aggiuntiva

    I test in questa area di funzionalità potrebbero avere documentazione aggiuntiva, inclusi i prerequisiti, la configurazione e le informazioni sulla risoluzione dei problemi, disponibili negli argomenti seguenti:

    Esecuzione del test

    Esecuzione dei test funzionali e di stress di base

    Per eseguire i test, è necessario disporre dell'hardware seguente:

    Collegare le EEPROMs come illustrato nel diagramma seguente e connettere SDA e SCL al dispositivo sottoposto a test.

    schema i2c eeprom

    È ora possibile pianificare i test funzionali e di stress di base dal gestore HLK.

    Esecuzione dei test funzionali avanzati

    I test funzionali avanzati verificano il comportamento NACKing, le condizioni dell'autobus bloccate, l'estensione del clock e l'avvio ripetuto. I test richiedono la connessione di un firmware personalizzato LPC1768 mbed al dispositivo sottoposto a test. Prima di eseguire i test, è necessario caricare il firmware HLK nell'LPC1768 mbed. Ecco come aggiornare il firmware:

    1. Collegare mbed LPC1768 tramite USB al PC. Verrà visualizzato come unità rimuovibile nel PC.
    2. Aprire l'unità in Esplora file
    3. Copiare c:\Programmi (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin in mbed
    4. Premere il pulsante su mbed per reimpostare il microcontroller

    Collegare quindi il mbed al dispositivo sottoposto a test. Collegare mbed tramite USB al dispositivo sottoposto a test. Effettuare quindi le connessioni I2C (pinout mbed),

    1. Connettere mbed pin 9 (P0.0/SDA) al pin SDA nel dispositivo sottoposto a test
    2. Connettere mbed pin 10 (P0.1/SCL) al pin SCL nel dispositivo sottoposto a test
    3. Connettere GND mbed a un pin GND nel dispositivo sottoposto a test

    Mbed dispone di resistori pull-up interni abilitati nelle linee SDA e SCL e non richiede resistori esterni pull-up.

    È ora possibile pianificare i test funzionali avanzati dal gestore HLK.

    Risoluzione dei problemi relativi

    Per la risoluzione generica degli errori di test HLK, vedere Risoluzione dei problemi di test di Windows HLK.

    È consigliabile eseguire i test nella riga di comando per ottenere informazioni dettagliate sugli errori e per eseguire rapidamente l'iterazione sulle soluzioni. Ecco come eseguire i test nella riga di comando:

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

    2. Copiare Windows.Devices.LowLevel.UnitTests.dll da %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot in c:\data nel dispositivo.

    3. Telnet o ssh nel dispositivo

    4. Modificare le directory in c:\data

    5. Eseguire i test:

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

    Utilizzo dei test della riga di comando:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name : nome del test da eseguire che può includere caratteri jolly. Esempi: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause : clausola di selezione TAEF. Esempio: /select:"@name='I2c*' e not(@name='I2cTestsEx*')"
    • friendly_name : nome descrittivo del controller I2C sottoposto a test. Se omesso, viene utilizzato il primo controller enumerato. Esempi: /p:I2cFriendlyName=I2C0
    • duration : durata dell'esecuzione di test di stress. Esempi: /p:Duration=10s (10 secondi), /p:Duration=1m (1 minuto), /p:Duration=2h (2 ore), /p:Duration=1d (1 giorno)

    Esempi:

    Per eseguire i test funzionali di base,

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

    Per eseguire i test funzionali avanzati,

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

    Per eseguire i test su un'istanza specifica del controller I2C, passare il nome descrittivo al parametro di test I2cFriendlyName,

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

    Per eseguire un test specifico, passare il nome completo del test al parametro /name:

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

    Per eseguire i test di stress per la durata consigliata di 8 ore, eseguire

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

    Uno strumento che può essere utile per la risoluzione dei problemi manuali è I2cTestTool. I2cTestTool è un'utilità semplice per interagire con I2C dalla riga di comando.

    Altre informazioni

    Parametri

    Nome parametro Descrizione dei parametri
    I2cFriendlyName Nome descrittivo del controller I2C sottoposto a test (ad esempio I2C0).