I2C WinRT 写入测试(需要 EEPROM)

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

  • 验证是否可从用户模式访问具有指定易记名称的 I2C 控制器。
  • 验证是否通过一系列时钟速度和最大 8 字节的缓冲区长度(EEPROM 页面大小)正确写入数据。
  • 验证是否通过一系列时钟速度和缓冲区长度正确读取数据。
  • 验证是否通过一系列时钟速度和缓冲区长度正确执行写入-重启-读取序列(写入读取序列)。
  • 验证当尝试对未确认的从属地址进行写入、读取或写入读取时,驱动程序是否将返回 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 重启条件以响应写入读取序列。
  • 验证当从属设备仍在写入字节时,驱动程序是否使用 STATUS_SUCCESS 完成请求,并报告通过请求信息写入的实际字节数。 这称为部分传输,由 WritePartial() 和 WriteReadPartial() 报告为 I2cTransferStatus::PartialTransfer。
  • 验证是否允许时钟延长到 500 毫秒,并且不会导致传输失败。
  • 验证当从属设备在较长持续时间内(10 秒以上)将时钟线保持在低电平时,驱动程序是否在最多 10 秒内完成传输,并显示失败代码。 失败代码应为 STATUS_IO_TIMEOUT,但出于兼容性原因,未对此进行验证。

基本功能测试和压力测试针对两个外部连接的 EEPROM 运行。 高级功能测试针对运行自定义固件的 mbed LPC1768 运行。 mbed LPC1768 是一个受欢迎的微控制器原型制作平台,可从各个在线零售商购买,包括 SparkfunDigikeyAdafruit。 更新 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
    需要重启 false
    需要特殊配置
    类型 automatic

     

    其他文档

    此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

    运行测试

    运行基本功能和压力测试

    将需要以下硬件来运行测试:

    按下图所示,连接 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 连接到受测设备。 通过 USB 将 mbed 插入受测设备。 然后,建立 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. 将 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 中的 Windows.Devices.LowLevel.UnitTests.dll 复制到设备上的 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
    • duration - 运行压力测试的时间。 示例:/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)。