Compartilhar via


Teste de gravação I2C WinRT (EEPROM necessário)

Os testes de I2C fazem testes funcionais e de estresse de controladores I2C expostos ao modelo de usuário por meio das APIs winRT Windows.Devices.I2c. Os testes são divididos em duas partes: testes funcionais e de estresse básicos e testes funcionais avançados. O escopo do teste dos testes funcionais básicos inclui:

  • Verificação de que um controlador I2C com o nome amigável especificado está acessível no modo de usuário.
  • Verificação de que os dados são gravados corretamente em um intervalo de velocidades de relógio e tamanhos de buffer de até 8 bytes (tamanho da página EEPROM).
  • Verificação de que os dados são lidos corretamente em um intervalo de velocidades de relógio e comprimentos de buffer.
  • Verificação de que as sequências de gravação-reinicialização-leitura (WriteRead) são executadas corretamente em um intervalo de velocidades de relógio e comprimentos de buffer.
  • Verificação de que, quando uma gravação, leitura ou WriteRead é tentada para um endereço subordinado que não é reconhecido, o driver retorna STATUS_NO_SUCH_DEVICE. Isso é relatado por I2cDevice::Write/Read/WriteRead() como HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) e é relatado por I2cDevice::WritePartial/ReadPartial/WriteReadPartial() como I2cTransferStatus::SlaveAddressNotAcknowledged.
  • Verificação de que as APIs e os drivers funcionam corretamente em condições de estresse. Os testes de estresse gravam e leem de dois EEPROMs simultaneamente com identificadores de dispositivo separados por uma duração prolongada.

O escopo do teste dos testes funcionais avançados inclui:

  • Verificação de que os dados são gravados corretamente para tamanhos de buffer de até 16384 bytes.
  • Verificação de que uma condição de reinicialização de I2C é gerada em resposta a uma sequência WriteRead.
  • Verificação de que, quando o NAK do dispositivo subordinado enquanto o master ainda está gravando bytes, o driver conclui a solicitação com STATUS_SUCCESS e relata o número real de bytes gravados por meio das informações de solicitação. Isso é chamado de transferência parcial e é relatado por WritePartial() e WriteReadPartial() como I2cTransferStatus::P artialTransfer.
  • Verificação de que o relógio que se estende até 500ms é permitido e não faz com que a transferência falhe.
  • Verificação de que, quando o dispositivo subordinado mantém a linha do relógio baixa por uma duração estendida (mais de 10 segundos), o driver conclui a transferência dentro de no máximo 10 segundos com um código de falha. O código de falha deve ser STATUS_IO_TIMEOUT, mas isso não é verificado por motivos de compatibilidade.

Os testes funcionais básicos e os testes de estresse são executados em dois EEPROMs conectados externamente. Os testes funcionais avançados são executados em um LPC1768 mbed executando firmware personalizado. O mbed LPC1768 é uma plataforma popular de protótipos de microcontrolador que pode ser comprada de uma variedade de varejistas online, incluindo Sparkfun, Digikey e Adafruit. Atualizar o firmware do mbed é tão simples quanto arrastar e soltar um arquivo. O código-fonte do firmware está disponível no github. As instruções sobre como preparar o mbed e executar os testes são fornecidas abaixo.

Detalhes do teste

   
Especificações
  • Device.BusController.I2C.WinRT.Discretional
Plataformas
    Versões com suporte
    • Windows 10
    • Windows 10, versão 1511
    • Windows 10, versão 1607
    • Windows 10, versão 1703
    • Windows 10, versão 1709
    • Windows 10, versão 1803
    • Windows 10, versão 1809
    • Windows 10, versão 1903
    • Próxima atualização para Windows 10
    Tempo de execução esperado (em minutos) 5
    Categoria Desenvolvimento
    Tempo limite (em minutos) 10
    Requer reinicialização false
    Requer configuração especial true
    Tipo automático

     

    Documentação adicional

    Os testes nessa área de recurso podem ter documentação adicional, incluindo pré-requisitos, configuração e informações de solução de problemas, que podem ser encontradas nos tópicos a seguir:

    Executando o teste

    Executando os testes funcionais e de estresse básicos

    Você precisará do seguinte hardware para executar os testes:

    Conecte os EEPROMs conforme mostrado no diagrama a seguir e conecte o SDA e o SCL ao seu dispositivo em teste.

    esquema i2c eeprom

    Agora você pode agendar os testes funcionais e de estresse básicos do gerenciador HLK.

    Executando os testes funcionais avançados

    Os testes funcionais avançados verificam o comportamento de NACKing, as condições do barramento suspenso, o alongamento do relógio e as partidas repetidas. Os testes exigem que um LPC1768 com mbed executando firmware personalizado seja conectado ao dispositivo em teste. Antes de executar os testes, você deve carregar o firmware HLK no LPC1768 mbed. Veja como atualizar o firmware:

    1. Conecte o LPC1768 mbed via USB ao computador. Ele aparecerá como uma unidade removível no computador.
    2. Abrir a unidade no explorador de arquivos
    3. Copie c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin para o mbed
    4. Pressione o botão no mbed para redefinir o microcontrolador

    Em seguida, conecte o mbed ao seu dispositivo em teste. Conecte o mbed via USB ao seu dispositivo em teste. Em seguida, faça as conexões I2C (pinout mbed),

    1. Conectar o pino mbed 9 (P0.0/SDA) ao pino SDA em seu dispositivo em teste
    2. Conectar o pino mbed 10 (P0.1/SCL) ao pino SCL em seu dispositivo em teste
    3. Conectar o GND mbed a um pino GND em seu dispositivo em teste

    O mbed tem resistores de pull-up internos habilitados nas linhas SDA e SCL e não requer resistores de pull-up externos.

    Agora você pode agendar os testes funcionais avançados do gerenciador HLK.

    Solucionando problemas

    Para solução de problemas genéricos de falhas de teste do HLK, consulte Solução de problemas de falhas de teste do Windows HLK.

    É recomendável executar os testes na linha de comando para obter informações sobre falhas e iterar rapidamente em soluções. Veja como executar os testes na linha de comando:

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

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

    3. Telnet ou ssh em seu dispositivo

    4. Alterar diretórios para c:\data

    5. Execute os testes:

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

    Uso de teste de linha de comando:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name - o nome do teste a ser executado, que pode incluir curingas. Exemplos: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause - uma cláusula de seleção TAEF. Exemplo: /select:"@name='I2c*' e not(@name='I2cTestsEx*')"
    • friendly_name - o nome amigável do controlador I2C em teste. Se omitido, o primeiro controlador enumerado será usado. Exemplos: /p:I2cFriendlyName=I2C0
    • duração – quanto tempo executar testes de estresse. Exemplos: /p:Duration=10s (10 segundos), /p:Duration=1m (1 minuto), /p:Duration=2h (2 horas), /p:Duration=1d (1 dia)

    Exemplos:

    Para executar os testes funcionais básicos,

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

    Para executar os testes funcionais avançados,

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

    Para executar os testes em uma instância específica do controlador I2C, passe o nome amigável para o parâmetro de teste I2cFriendlyName,

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

    Para executar um teste específico, passe o nome completo do teste para o parâmetro /name:

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

    Para executar os testes de estresse durante a duração recomendada de 8 horas, execute

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

    Uma ferramenta que pode ajudar na solução de problemas manual é I2cTestTool. I2cTestTool é um utilitário simples para interagir com I2C na linha de comando.

    Mais informações

    Parâmetros

    Nome do parâmetro Descrição do parâmetro
    I2cFriendlyName O nome amigável do controlador I2C em teste (por exemplo, I2C0).