Compartir a través de


Pruebas de esfuerzo de E/S de WinRT de I2C (se requieren EEPROM)

Las pruebas de I2C realizan pruebas funcionales y de esfuerzo de los controladores I2C expuestos al modo de usuario a través de las API de WinRT Windows.Devices.I2c. Las pruebas se dividen en dos partes: pruebas funcionales básicas y de esfuerzo, y pruebas funcionales avanzadas. El ámbito de las pruebas de las pruebas funcionales básicas incluye:

  • Comprobación de que un controlador I2C con el nombre descriptivo especificado es accesible desde el modo de usuario.
  • Compruebe que los datos se escriben correctamente en un intervalo de velocidades de reloj y longitudes de búfer de hasta 8 bytes (tamaño de página EEPROM).
  • Compruebe que los datos se leen correctamente en un intervalo de velocidades de reloj y longitudes de búfer.
  • Comprobación de que las secuencias de lectura de reinicio de escritura (WriteRead) se ejecutan correctamente en un intervalo de velocidades de reloj y longitudes de búfer.
  • Compruebe que, cuando se intenta escribir, leer o EscribirRead en una dirección subordinada que no se reconoce, el controlador devuelve STATUS_NO_SUCH_DEVICE. Esto se notifica mediante I2cDevice::Write/Read/WriteRead() como HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) y se notifica mediante I2cDevice::WritePartial/ReadPartial/WriteReadPartial() como I2cTransferStatus::SlaveAddressNotAcknowledged.
  • Compruebe que las API y los controladores funcionan correctamente en condiciones de estrés. Las pruebas de esfuerzo escriben y leen de dos EEPROM simultáneamente con identificadores de dispositivo independientes durante una duración prolongada.

El ámbito de las pruebas de las pruebas funcionales avanzadas incluye:

  • Compruebe que los datos se escriben correctamente para las longitudes de búfer de hasta 16384 bytes.
  • Compruebe que se genera una condición de reinicio de I2C en respuesta a una secuencia WriteRead.
  • Comprobación de que cuando el dispositivo esclavo NAK está mientras el maestro sigue escribiendo bytes, el controlador completa la solicitud con STATUS_SUCCESS e informa del número real de bytes escritos a través de la información de solicitud. Esto se denomina transferencia parcial y se notifica mediante WritePartial() y WriteReadPartial() como I2cTransferStatus::P artialTransfer.
  • Comprobación de que el reloj se extiende hasta 500 ms se permite y no hace que se produzca un error en la transferencia.
  • Comprobación de que cuando el dispositivo subordinado contiene la línea de reloj baja durante una duración prolongada (10+ segundos), el controlador completa la transferencia en un máximo de 10 segundos con un código de error. El código de error debe ser STATUS_IO_TIMEOUT, pero esto no se comprueba por motivos de compatibilidad.

Las pruebas funcionales básicas y las pruebas de esfuerzo se ejecutan en dos EEPROM conectados externamente. Las pruebas funcionales avanzadas se ejecutan en un firmware personalizado mbed LPC1768 . El mbed LPC1768 es una popular plataforma de prototipos de microcontrolador que se puede comprar de una variedad de minoristas en línea, como Sparkfun, Digikey y Adafruit. Actualizar el firmware del mbed es tan sencillo como arrastrar y colocar un archivo. El código fuente del firmware está disponible en github. A continuación se proporcionan instrucciones sobre cómo preparar el mbed y ejecutar las pruebas.

Detalles de las pruebas

   
Especificaciones
  • Device.BusController.I2C.WinRT.Discretional
Plataformas
    Versiones admitidas
    • Windows 10
    • Windows 10, versión 1511
    • Windows 10, versión 1607
    • Windows 10, versión 1703
    • Windows 10, versión 1709
    • Windows 10, versión 1803
    • Windows 10, versión 1809
    • Windows 10, versión 1903
    • Siguiente actualización a Windows 10
    Tiempo de ejecución esperado (en minutos) 240
    Categoría Desarrollo
    Tiempo de espera (en minutos) 10000
    Requiere reinicio false
    Requiere una configuración especial true
    Tipo automatic

     

    Documentación adicional

    Las pruebas de este área de características pueden tener documentación adicional, incluidos los requisitos previos, la configuración y la información de solución de problemas, que se pueden encontrar en los temas siguientes:

    Ejecución de la prueba

    Ejecución de las pruebas funcionales y de esfuerzo básicas

    Necesitará el siguiente hardware para ejecutar las pruebas:

    Conecte los EEPROM como se muestra en el diagrama siguiente y conecte SDA y SCL al dispositivo en prueba.

    Esquema de i2c eeprom

    Ahora puede programar las pruebas funcionales y de esfuerzo básicas del administrador de HLK.

    Ejecución de las pruebas funcionales avanzadas

    Las pruebas funcionales avanzadas comprueban el comportamiento de NACKing, las condiciones de autobús colgadas, el ajuste del reloj y los inicios repetidos. Las pruebas requieren que un firmware personalizado mbed LPC1768 se conecte al dispositivo en prueba. Antes de ejecutar las pruebas, debe cargar el firmware HLK en el LPC1768 mbed. A continuación se muestra cómo actualizar el firmware:

    1. Conecta el LPC1768 mbed a través de USB a tu PC. Se mostrará como una unidad quitable en su PC.
    2. Abrir la unidad en el Explorador de archivos
    3. Copie c:\Archivos de programa (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin en mbed
    4. Presione el botón en el mbed para restablecer el microcontrolador.

    A continuación, conecte el mbed al dispositivo en prueba. Conecte el mbed a través de USB al dispositivo en prueba. A continuación, realice las conexiones I2C (pinout mbed),

    1. Conectar el pin mbed 9 (P0.0/SDA) al pin de SDA en el dispositivo sometido a prueba
    2. Conectar el pin mbed 10 (P0.1/SCL) al pin de SCL del dispositivo en prueba
    3. Conexión de mbed GND a un pin de GND en el dispositivo en prueba

    El mbed tiene resistencias de extracción internas habilitadas en las líneas SDA y SCL y no requiere resistencias de extracción externas.

    Ahora puede programar las pruebas funcionales avanzadas desde el administrador de HLK.

    Solución de problemas

    Para solucionar problemas genéricos de errores de prueba de HLK, consulte Solución de problemas de errores de prueba de HLK de Windows.

    Se recomienda ejecutar las pruebas en la línea de comandos para obtener información sobre los errores y para iterar rápidamente en las soluciones. A continuación se muestra cómo ejecutar las pruebas en la línea de comandos:

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

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

    3. Telnet o ssh en el dispositivo

    4. Cambio de directorios a c:\data

    5. Ejecute las pruebas:

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

    Uso de la prueba de línea de comandos:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name: el nombre de la prueba que se va a ejecutar, que puede incluir caracteres comodín. Ejemplos: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause: una cláusula de selección de TAEF. Ejemplo: /select:"@name='I2c*' y not(@name='I2cTestsEx*')"
    • friendly_name: el nombre descriptivo del controlador I2C sometido a prueba. Si se omite, se usa el primer controlador enumerado. Ejemplos: /p:I2cFriendlyName=I2C0
    • duration: cuánto tiempo se ejecutan las pruebas de esfuerzo. Ejemplos: /p:Duration=10s (10 segundos), /p:Duration=1m (1 minuto), /p:Duration=2h (2 horas), /p:Duration=1d (1 día)

    Ejemplos:

    Para ejecutar las pruebas funcionales básicas,

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

    Para ejecutar las pruebas funcionales avanzadas,

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

    Para ejecutar las pruebas en una instancia específica del controlador I2C, pase el nombre descriptivo al parámetro de prueba I2cFriendlyName,

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

    Para ejecutar una prueba específica, pase el nombre completo de la prueba al parámetro /name:

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

    Para ejecutar las pruebas de esfuerzo durante la duración recomendada de 8 horas, ejecute

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

    Una herramienta que puede ayudar con la solución manual de problemas es I2cTestTool. I2cTestTool es una utilidad sencilla para interactuar con I2C desde la línea de comandos.

    Más información

    Parámetros

    Nombre de parámetro Descripción de los parámetros
    I2cFriendlyName Nombre descriptivo del controlador I2C sometido a prueba (por ejemplo, I2C0).
    Duration Especifica cuánto tiempo se debe ejecutar cada una de las pruebas de esfuerzo. Por ejemplo, 30s, 1m, 1h, 1d