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 是一个流行的微控制器原型制作平台,可以从各种在线零售商(包括 Farnell、 Digikey 和 Adafruit)购买。 更新 mbed 的固件与拖放文件一样简单。 github 上提供了固件源代码。 下面提供了有关准备 mbed 和运行测试的说明。
测试详细信息
规格 |
|
平台 | |
支持的版本 |
|
预期运行时间(以分钟为单位) | 5 |
类别 | 开发 |
超时(以分钟为单位) | 10 |
需要重新启动 | 假 |
需要特殊配置 | 是 |
类型 | 自动 |
其他文档
此功能区域中的测试可能有其他文档,包括先决条件、设置和故障排除信息,可在以下主题中找到:
运行测试
运行基本功能和压力测试
需要以下硬件才能运行测试:
- Atmel AT24HC 串行 EEPROM qt. 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 连接到受测设备。 将 mbed 通过 USB 插入到您的测试设备中。 然后,建立 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
将 Windows.Devices.LowLevel.UnitTests.dll 从 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 复制到设备上的 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
- 持续时间 - 运行压力测试的时间。 示例:/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)。 |