Compartir a través de


Pruebas de escritura de I2C WinRT (se requiere EEPROM)

Las pruebas de I2C realizan pruebas funcionales y de esfuerzo de 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:

  • Compruebe que se puede acceder a un controlador I2C con el nombre descriptivo especificado 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).
  • Comprobación de 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 escritura-reinicio-lectura (WriteRead) se ejecutan correctamente en un rango de velocidades de reloj y longitudes de búfer.
  • Compruebe que, cuando se intenta escribir, leer o realizar una operación de escritura/lectura en una dirección de esclavo que no es reconocida, el controlador devuelve STATUS_NO_SUCH_DEVICE. I2cDevice::Write/Read/WriteRead() se notifica 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.
  • Verifique que cuando el dispositivo subordinado envía un NAK mientras el maestro sigue escribiendo bytes, el controlador complete la solicitud con STATUS_SUCCESS e informe del número real de bytes escritos a través de la información de la solicitud. Esto se denomina transferencia parcial y se notifica mediante WritePartial() y WriteReadPartial() como I2cTransferStatus::P artialTransfer.
  • Verificación de que se permite la extensión del reloj hasta 500 ms y no provoca un fallo en la transferencia.
  • Verifique que cuando el dispositivo subordinado mantiene la línea del reloj baja durante más de 10 segundos, el controlador complete 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 LPC1768 mbed que ejecuta firmware personalizado. El LPC1768 mbed es una popular plataforma de prototipos de microcontrolador que se puede comprar de una variedad de minoristas en línea, como Farnell, Digikey y Adafruit. Actualizar el firmware del mbed es tan sencillo como arrastrar y quitar un archivo. El código fuente del firmware está disponible en github. A continuación se proporcionan instrucciones sobre cómo preparar los mbed y ejecutar las pruebas.

Detalles de la prueba

   
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
    • Actualización siguiente a Windows 10
    Tiempo de ejecución esperado (en minutos) 5
    Categoría Desarrollo
    Tiempo de espera (en minutos) 10
    Requiere reinicio falso
    Requiere una configuración especial cierto
    Tipo Automático

     

    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 es posible programar las pruebas funcionales y de esfuerzo básicas desde el administrador de HLK.

    Ejecución de las pruebas funcionales avanzadas

    Las pruebas funcionales avanzadas comprueban el comportamiento de NACKing, las condiciones del bus colgado, el ajuste del reloj y los inicios repetidos. Las pruebas requieren que un LPC1768 de mbed ejecute firmware personalizado para conectarse al dispositivo en prueba. Antes de ejecutar las pruebas, debe cargar el firmware HLK en el LPC1768 mbed. Aquí se muestra cómo actualizar el firmware:

    1. Conecte el LPC1768 mbed a través de USB a su PC. Se mostrará como una unidad extraíble en su ordenador.
    2. Abra la unidad en el Explorador de archivos.
    3. Copia c:\Archivos de programa (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin al mbed
    4. Presione el botón del 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 SDA del dispositivo en prueba
    2. Conecte el pin mbed 10 (P0.1/SCL) al pin SCL del dispositivo en prueba.
    3. Conexión de GND mbed a un pin de GND en el dispositivo sometido a 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. Aquí 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 su 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 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 amistoso del controlador I2C en prueba. Si se omite, se usa el primer controlador enumerado. Ejemplos: /p:I2cFriendlyName=I2C0
    • duración. tiempo durante el que 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, introduzca el nombre amigable en el 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 de prueba completo al parámetro /name:

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

    Para ejecutar las pruebas de esfuerzo durante las 8 horas recomendadas, ejecute

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

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

    Más información

    parámetros de

    Nombre del parámetro Descripción del parámetro
    I2cFriendlyName Nombre descriptivo del controlador I2C sometido a prueba (por ejemplo, I2C0).