Teste de leitura 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 |
|
Plataformas | |
Versões com suporte |
|
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:
- Atmel AT24HC serial EEPROMs qt. 2
- 10k resistor qt. 2
- Placa universal
- Fios
Conecte os EEPROMs conforme mostrado no diagrama a seguir e conecte o SDA e o SCL ao seu dispositivo em teste.
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:
- Conecte o LPC1768 mbed via USB ao computador. Ele aparecerá como uma unidade removível no computador.
- Abrir a unidade no explorador de arquivos
- Copie c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin para o mbed
- 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),
- Conectar o pino mbed 9 (P0.0/SDA) ao pino SDA em seu dispositivo em teste
- Conectar o pino mbed 10 (P0.1/SCL) ao pino SCL em seu dispositivo em teste
- 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:
Copiar %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe para c:\data\minte
Copie Windows.Devices.LowLevel.UnitTests.dll de %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot para c:\data em seu dispositivo.
Telnet ou ssh em seu dispositivo
Alterar diretórios para c:\data
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 de teste completo 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). |