I2C WinRT 读取测试(需要 EEPROM)

I2C 测试通过 Windows.Devices.I2c WinRT API 对用户模式公开的 I2C 控制器执行功能和压力测试。 测试分为两个部分-基本功能和压力测试,以及高级功能测试。 基本功能测试的测试范围包括:

  • 验证是否可从 usermode 访问具有指定友好名称的 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::P artialTransfer。
  • 验证时钟拉伸最多 500 毫秒是被允许的,并且不会导致传输失败。
  • 验证当从属设备保持时钟线低(10+ 秒)时,驱动程序会在最多 10 秒内完成传输,并显示故障代码。 失败代码应为STATUS_IO_TIMEOUT,但出于兼容性原因尚未验证。

基本功能测试和压力测试针对两个外部连接的 EEPROM 运行。 高级功能测试运行于搭载自定义固件的mbed LPC1768。 mbed LPC1768 是一个流行的微控制器原型制作平台,可以从各种在线零售商(包括 FarnellDigikeyAdafruit)购买。 更新 mbed 的固件与拖放文件一样简单。 github 上提供了固件源代码。 下面提供了有关准备 mbed 和运行测试的说明。

测试详细信息

   
规格
  • 设备.总线控制器.I2C.Windows运行时.可选的
平台
    支持的版本
    • 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 固件加载到 mbed LPC1768。 下面介绍如何更新固件:

    1. 通过 USB 将 mbed LPC1768插入电脑。 它将显示为电脑上的可删除驱动器。
    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\Tests\<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*' and 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)。