SPI 测试通过 Windows.Devices.Spi WinRT API 对公开给用户模式(usermode)的 SPI 控制器进行功能测试和压力测试。 测试范围包括:
- 验证具有指定友好名称的 SPI 控制器是否可从 usermode 访问。
- 验证数据是否在一系列 SPI 模式、时钟频率、数据位长度和传输长度范围内正确发送和接收。
- 验证传输中的字节之间没有差距。 某些设备(如 LED 条和模拟数字转换器)需要不间断的时钟信号。
- 验证实际使用的时钟速度是否在所请求值的 15% 范围内。
- 验证当尝试传输时,如果缓冲区长度不是步长的倍数,则传输会因 STATUS_INVALID_PARAMETER 而失败,并且总线上不会产生任何活动。 步幅由 DataBitLength 确定,如下所示:
数据位长度 | 跨 |
4 - 8 | 1 |
9 - 16 | 2 |
17 - 32 | 4 |
针对外部连接的mbed LPC1768运行测试。 mbed LPC1768 是一个流行的微控制器原型制作平台,可以从各种在线零售商(包括 Farnell、 Digikey 和 Adafruit)购买。 使用测试固件映像对 mbed 进行编程就像将固件映像拖放到大容量存储设备一样简单。 github 上提供了固件源代码。 下面提供了有关准备 mbed 和运行测试的详细说明。
测试详细信息
规格 |
|
平台 | |
支持的版本 |
|
预期运行时间(以分钟为单位) | 5 |
类别 | 开发 |
超时(以分钟为单位) | 10 |
需要重新启动 | 假 |
需要特殊配置 | 假 |
类型 | 自动 |
其他文档
此功能区域中的测试可能有其他文档,包括先决条件、设置和故障排除信息,可在以下主题中找到:
运行测试
需要以下硬件才能运行测试:
- mbed LPC1768
- 面包板
- 跳线
首先,必须将测试固件加载到 mbed 上:
- 通过 USB 将 mbed LPC1768插入电脑。 它将在电脑上显示为可移动驱动器。
- 在文件资源管理器中打开驱动器
- 将 c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin 复制到驱动器
- 按 mbed 上的按钮重置微控制器
接下来,将 mbed 连接到受测的 SPI 控制器。 若要为 mbed 供电,可以通过 USB 将其插入到受测设备,或将 VIN 和 GND 引脚直接连接到受测设备上的电源引脚。 在受测设备与 mbed 之间建立以下连接:(mbed 引脚)
- 将 mbed 引脚 13 (P0.15/SCK0) 连接到受测设备上的 SCK 引脚
- 将 mbed 引脚 30 (P0.4/CAP2.0) 连接到受测设备上的 SCK 引脚(此引脚用于精确时钟测量)
- 将 mbed 引脚 11(P0.18/MOSI0)连接到受测设备上的 MOSI 引脚
- 将 mbed 引脚 12(P0.17/MISO0)连接到受测设备上的 MISO 引脚
- 将 mbed 引脚 14(P0.16/SSEL0)连接到受测设备上的芯片选择引脚
- 将 mbed GND 连接到受测设备上的 GND 引脚
现在可以在 HLK 工作室中计划测试。
故障排除
有关 HLK 测试失败的一般故障排除步骤,请参阅 Windows HLK 测试失败排查指南。
建议在命令行上运行测试,以便深入了解故障并快速循环访问解决方案。 我们还建议连接逻辑分析器,例如salae。 如果不能够检查总线流量,就很难或不可能确定失败的原因。
下面介绍如何在命令行上运行测试:
将 %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:SpiHlk*
命令行测试用法:
minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/p:SpiFriendlyName=friendly_name] [/p:ClockFrequency=clock_frequency] [/p:DataBitLength=data_bit_length] [/p:SpiMode=0|1|2|3] [/p:Length=length] [/p:WriteLength=write_length] [/p:ReadLength=read_length] [/p:ExtraClocks=extra_clocks] [/p:Verbose=true]
- test_name - 要运行的测试的名称,其中包括通配符。 示例:/name:SpiHlk*、/name:SpiHlkTests::VerifyClockFrequency#metadataSet0
- friendly_name - 所测试的 SPI 控制器的友好名称。 如果省略,则使用第一个被枚举的控制器。 示例:/p:SpiFriendlyName=SPI1
- clock_frequency - 强制测试使用指定的时钟频率。 默认情况下,时钟频率来自测试数据,该数据旨在提供一系列频率的覆盖。 在正常情况下,应省略此参数。 示例:/p:ClockFrequency=1500000
- data_bit_length - 强制测试使用指定的数据位长度。 示例:/p:DataBitLength=9
- SpiMode - 强制测试使用指定的 SPI 模式。 示例:/p:SpiMode=2
- length - 强制测试对数据传输使用指定的缓冲区长度。 示例:/p:length=128
- write_length - 强制 TransferSequential 测试对传输的写入部分使用指定的缓冲区长度。 示例:/p:WriteLength=8
- read_length - 强制 TransferSequential 测试对传输的读取部分使用指定的缓冲区长度。 示例:/p:ReadLength=16
- extra_clocks - 指定在测试中对每字节时钟数进行调整,用于计算预期的时钟激活时间,从而进行性能测量、间隙检测和时钟频率验证。 例如,BCM2836 SPI 控制器在每个字节后等待额外的时钟周期,因此为了补偿此行为,必须调整度量值。 示例:/p:ExtraClocks=1.5
- /p:Verbose=true - 打开详细输出。 这将导致在发生故障时将整个缓冲区转储到控制台。 默认情况下,仅显示第一个不匹配的字节。
示例:
列出可用测试:
minte\te windows.devices.lowlevel.unittests.dll /list
运行 IO 验证测试:
minte\te windows.devices.lowlevel.unittests.dll /name:SpiHlkIoTests*
运行间隙检测测试:
minte\te windows.devices.lowlevel.unittests.dll /name:SpiHlkGapTests*
运行时钟频率验证和步幅测试:
minte\te windows.devices.lowlevel.unittests.dll /name:SpiHlkTests*
针对特定 SPI 控制器实例运行特定测试:
minte\te windows.devices.lowlevel.unittests.dll /name:SpiHlkIoTests#2::VerifyTransferSequential#metadataSet9 /p:SpiFriendlyName=SPI1
帮助进行手动故障排除的工具是 SpiTestTool。 SpiTestTool 是一个简单的实用工具,用于从命令行与 SPI 进行交互。
详细信息
参数
参数名称 | 参数说明 |
---|---|
SpiFriendlyName | 正在测试的 SPI 控制器的友好名称(例如 SPI0)。 |