Поделиться через


Тесты чтения I2C WinRT (требуется EEPROM)

Тесты I2C выполняют функциональное и стресс-тестирование контроллеров I2C, доступных в пользовательском режиме через API Windows.Devices.I2c WinRT. Тесты разделены на две части : основные функциональные и стрессовые тесты, а также расширенные функциональные тесты. Область тестирования основных функциональных тестов включает:

  • Проверка того, что контроллер I2C с указанным понятным именем доступен в пользовательском режиме.
  • Проверка правильности записи данных в диапазоне скоростей часов и длины буфера до 8 байт (размер страницы EEPROM).
  • Проверка правильности чтения данных по диапазону скоростей часов и длины буфера.
  • Проверка правильности выполнения последовательностей запись-перезапуск-чтение (WriteRead) в диапазоне тактовых частот и длины буфера.
  • Проверка того, что при попытке записи, чтения или WriteRead на адрес ведомого, который не подтвержден, драйвер возвращает STATUS_NO_SUCH_DEVICE. Это сообщается I2cDevice::Write/Read/WriteRead() как HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), а I2cDevice::WritePartial/ReadPartial/WriteReadPartial() как I2cTransferStatus::SlaveAddressNotAcknowledged.
  • Убедитесь, что API и драйверы работают правильно в условиях стресса. Стресс-тесты в течение длительного времени одновременно записывают в две EEPROM и считывают из них, используя отдельные дескрипторы устройств.

Область тестирования расширенных функциональных тестов включает:

  • Убедитесь, что данные записываются правильно для длины буфера до 16384 байтов.
  • Проверка того, что условие перезапуска I2C создается в ответ на последовательность WriteRead.
  • Убедитесь, что при записи байтов в подчиненном устройстве NAK драйвер завершает запрос с помощью STATUS_SUCCESS и сообщает фактическое количество байтов, записанных с помощью сведений о запросе. Это называется частичной передачей и сообщается функциями WritePartial() и WriteReadPartial() как I2cTransferStatus::PartialTransfer.
  • Проверка, что растяжение сигнала до 500 мс допускается и не вызывает сбоя передачи.
  • Убедитесь, что если ведомое устройство удерживает часовую линию в низком состоянии на продолжительное время (10+ секунд), драйвер завершает передачу не более чем через 10 секунд с ошибочным кодом. Код сбоя должен быть STATUS_IO_TIMEOUT, но это не проверяется по причинам совместимости.

Основные функциональные тесты и стресс-тесты выполняются с двумя внешними подключенными EEPROM. Расширенные функциональные тесты выполняются на mbed LPC1768, работающем с пользовательским встроенным ПО. Mbed LPC1768 является популярной платформой прототипа микроконтроллера, которая может быть приобретена у различных онлайн-магазинов, включая Farnell, Digikey и Adafruit. Обновление встроенного ПО mbed так же просто, как перетаскивание и удаление файла. Исходный код встроенного ПО доступен на сайте GitHub. Ниже приведены инструкции по подготовке mbed и выполнению тестов.

Сведения о тестировании

   
спецификации
  • Device.BusController.I2C.WinRT.Discretional
платформы
    Поддерживаемые Выпуски
    • Windows 10
    • Windows 10 версии 1511
    • Windows 10, версия 1607
    • Windows 10 версии 1703
    • Windows 10 версии 1709
    • Windows 10 версии 1803
    • Windows 10, версия 1809
    • Windows 10 версии 1903
    • Следующее обновление для Windows 10
    ожидаемое время выполнения (в минутах) 5
    Категория Развитие
    Тайм-аут (в минутах) 10
    Требуется перезагрузка неправда
    Требуется специальная конфигурация правда
    Тип автоматический

     

    Дополнительная документация

    Тесты в этой области функций могут содержать дополнительную документацию, включая предварительные требования, настройку и устранение неполадок, которые можно найти в следующих разделах:

    выполнение теста

    Выполнение основных функциональных и стрессовых тестов

    Для выполнения тестов потребуется следующее оборудование:

    Подключите EEPROM, как показано на следующей схеме, и подключите SDA и SCL к тестируемому устройству.

    Схема i2c eeprom

    Теперь вы можете запланировать базовые функциональные и стрессовые тесты от менеджера HLK.

    Выполнение расширенных функциональных тестов

    Расширенные функциональные тесты проверяют поведение NACKing, зависания условий шины, растяжения часов и повторяющихся запусков. Для тестов требуется, чтобы устройство mbed LPC1768 с пользовательским встроенным ПО было подключено к тестируемому устройству. Перед выполнением тестов необходимо загрузить встроенное ПО HLK на LPC1768 mbed. Вот как обновить встроенное ПО:

    1. Подключите mbed LPC1768 к вашему ПК через USB. Он будет отображаться как съемный диск на компьютере.
    2. Откройте диск в проводнике
    3. Скопируйте c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin в mbed
    4. Нажмите кнопку на mbed, чтобы сбросить микроконтроллер

    Затем подключите устройство к тестируемой сети mbed. Подключите mbed к тестируемому устройству через USB. Затем сделайте подключения I2C (закрепление mbed),

    1. Подключите пин-код mbed 9 (P0.0/SDA) к пин-коду SDA на устройстве под тестом
    2. Подключите вывод mbed 10 (P0.1/SCL) к выводу SCL на тестируемом устройстве.
    3. Подключите mbed GND к контакту GND на устройстве, которое тестируется.

    В mbed включены внутренние резисторы подтяжки на линиях SDA и SCL, поэтому для них не требуются внешние резисторы подтяжки.

    Теперь в менеджере HLK можно запланировать расширенные функциональные тесты.

    устранение неполадок

    Общие сведения об устранении неполадок тестов HLK см. в разделе Устранение неполадок тестов Windows HLK.

    Мы рекомендуем выполнять тесты в командной строке, чтобы получить представление о сбоях и быстро выполнить итерацию решений. Вот как выполнить тесты в командной строке:

    1. Копируйте %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF<\arch>\MinTe в c:\data\minte

    2. Скопируйте Windows.Devices.LowLevel.UnitTests.dll из %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Тесты\<arch>\iot в c:\data на вашем устройстве.

    3. Telnet или SSH на вашем устройстве

    4. Изменение каталогов на c:\data

    5. Выполните тесты:

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

    Использование теста командной строки:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name — имя теста, который требуется запустить и который может включать символы-шаблоны. Примеры: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause — условие выборки TAEF. Пример: /select:"@name='I2c*' и not(@name='I2cTestsEx*')"
    • friendly_name — удобное имя тестируемого контроллера I2C. Если опущено, используется первый перечисленный контроллер. Примеры: /p:I2cFriendlyName=I2C0
    • длительность - как долго выполнять стресс-тесты. Примеры: /p:Duration=10s (10 секунд), /p:Duration=1m (1 минута), /p:Duration=2h (2 часа), /p:Duration=1d (1 день)

    Примеры.

    Чтобы выполнить основные функциональные тесты, выполните следующие действия.

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

    Чтобы выполнить расширенные функциональные тесты, выполните следующие действия.

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

    Чтобы выполнить тесты с определенным экземпляром контроллера I2C, передайте удобочитаемое имя в параметр теста I2cFriendlyName.

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

    Чтобы выполнить определенный тест, передайте полное имя теста параметру /name:

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

    Чтобы запустить стресс-тесты на рекомендуемую продолжительность 8 часов, выполните

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

    Средство, которое может помочь в устранении неполадок вручную, — I2cTestTool. I2cTestTool — это простая программа для взаимодействия с I2C из командной строки.

    Дополнительные сведения

    Параметры

    Имя параметра Описание параметра
    I2cFriendlyName Имя дружелюбного контроллера I2C, который проходит тестирование (например, I2C0).