Condividi tramite


Test di lettura 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 dei test funzionali di base include:

  • Verifica che un controller I2C con il nome descrittivo specificato sia accessibile dalla modalità utente.
  • Verifica che i dati vengano scritti correttamente in un intervallo di velocità di clock e lunghezze del buffer fino a 8 byte (dimensioni pagina EEPROM).
  • Verifica che i dati vengano letti correttamente a varie velocità di clock e a diverse lunghezze di buffer.
  • Verifica che le sequenze di scrittura-riavvio-lettura (WriteRead) vengano eseguite correttamente su un intervallo di velocità di clock e lunghezze del buffer.
  • Verifica che, quando si tenta di eseguire un'operazione di scrittura, lettura o scrittura e lettura verso un indirizzo slave non riconosciuto, il driver restituisca STATUS_NO_SUCH_DEVICE. Questo è indicato da I2cDevice::Write/Read/WriteRead() come HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ed è 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 leggono e scrivono simultaneamente su due EEPROMs, usando 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 risponde con un 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 sulla richiesta. Viene chiamato trasferimento parziale e viene segnalato da WritePartial() e WriteReadPartial() come I2cTransferStatus::P artialTransfer.
  • Verifica che lo stretching del clock fino a 500 ms sia consentito e non causi il fallimento del trasferimento.
  • Verifica che quando il dispositivo slave mantiene la linea di clock bassa per una durata estesa (oltre 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 il firmware personalizzato. Il mbed LPC1768 è una popolare piattaforma di prototipi di microcontroller che può essere acquistata da una varietà di rivenditori online, tra cui Farnell, Digikey e Adafruit. L'aggiornamento del firmware mbed è semplice come il trascinamento e il rilascio 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.Discrezionale
Piattaforme
    Rilasci supportati
    • 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
    • Aggiornamento successivo a Windows 10
    tempo di esecuzione previsto (in minuti) 5
    Categoria Sviluppo
    Timeout (in minuti) 10
    Richiede di riavvio falso
    Richiede una configurazione speciale vero
    Tipo Automatico

     

    documentazione aggiuntiva

    I test in questa area di funzionalità potrebbero avere documentazione aggiuntiva, inclusi prerequisiti, configurazione e 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 manager HLK.

    Esecuzione dei test funzionali avanzati

    I test funzionali avanzati verificano il comportamento di NACKing, le condizioni di blocco del bus, il clock stretching e gli avvii ripetuti. I test richiedono che un LPC1768 mbed esegua firmware personalizzato per essere connesso al dispositivo sottoposto a test. Prima di eseguire i test, è necessario caricare il firmware HLK nel LPC1768 mbed. Ecco come aggiornare il firmware:

    1. Collegare il LPC1768 mbed tramite USB al PC. Verrà visualizzato come unità rimovibile 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 sul mbed
    4. Premere il pulsante sull'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 mbed GND a un pin GND nel dispositivo sottoposto a test

    Mbed ha i resistori pull-up interni abilitati sulle linee SDA e SCL e non richiede resistori pull-up esterni.

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

    Risoluzione dei problemi relativi a

    Per la risoluzione dei problemi generici degli errori di test HLK, vedere Risoluzione dei problemi relativi agli errori 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 delle soluzioni. Ecco come eseguire i test nella riga di comando:

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

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

    3. Telnet o ssh nel dispositivo

    4. Cambiare directory a 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*' and 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
    • durata - per quanto tempo eseguire i 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 è una semplice utilità per interagire con I2C dalla riga di comando.

    Altre informazioni

    parametri

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