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 是一个受欢迎的微控制器原型制作平台,可从各个在线零售商购买,包括 Sparkfun、Digikey 和 Adafruit。 更新 mbed 的固件就像拖放文件一样简单。 GitHub 上提供了固件源代码。 下面提供有关准备 mbed 和运行测试的说明。
测试详细信息
规范 |
|
平台 | |
支持的版本 |
|
预计运行时间(以分钟为单位) | 5 |
类别 | 开发 |
超时(以分钟为单位) | 10 |
需要重启 | false |
需要特殊配置 | 是 |
类型 | automatic |
其他文档
此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:
运行测试
运行基本功能和压力测试
将需要以下硬件来运行测试:
- Atmel AT24HC 系列 EEPROM 2 型
- 10k 电阻器 2 型
- 试验板
- 铜丝卷
按下图所示,连接 EEPROM,并将 SDA 和 SCL 连接到受测设备。
现在可以从 HLK 管理器计划基本功能和压力测试。
运行高级功能测试
高级功能测试验证 NACKing 行为、挂起总线条件、时钟延长和重复启动。 这些测试要求将运行自定义固件的 mbed LPC1768 与受测设备连接。 在运行测试之前,必须将 HLK 固件加载到 mbed LPC1768 上。 下面介绍了如何更新固件:
- 通过 USB 将 mbed LPC1768 插入电脑。 它将在电脑上显示为可移动驱动器。
- 在文件资源管理器中打开该驱动器
- 将 c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin 复制到 mbed
- 按 mbed 上的按钮以重置微控制器
接下来,将 mbed 连接到受测设备。 通过 USB 将 mbed 插入受测设备。 然后,建立 I2C 连接(mbed 引出线),
- 将 mbed 引脚 9 (P0.0/SDA) 连接到受测设备的 SDA 引脚
- 将 mbed 引脚 10 (P0.1/SCL) 连接到受测设备的 SCL 引脚
- 将 mbed GND 连接到受测设备的 GND 引脚
mbed 在 SDA 和 SCL 线路上启用了内部上拉电阻,并且无需外部上拉电阻。
现在可以从 HLK 管理器计划高级功能测试。
故障排除
有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题。
建议在命令行上运行测试,以深入了解失败并快速迭代解决方案。 下面介绍如何在命令行上运行测试:
将 %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe 复制到 c:\data\minte
将 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 中的 Windows.Devices.LowLevel.UnitTests.dll 复制到设备上的 c:\data。
使用 Telnet 或 ssh 登录到设备
将目录更改为 c:\data
运行测试:
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)。 |