SPI WinRT 传输间隔检测测试(需要嵌入 LPC1768)
SPI 测试通过 Windows.Devices.Spi WinRT API 对向用户模式公开的 SPI 控制器执行功能和压力测试。 测试范围包括:
- 验证是否可从用户模式访问具有指定易记名称的 SPI 控制器。
- 验证数据是否通过一系列 SPI 模式、时钟频率、数据位长度和传输长度正确发送和接收。
- 验证传输中的字节之间是否没有间隔。 某些设备(例如 LED 灯带和模拟数字转换器)需要不间断的时钟信号。
- 验证所使用的实际时钟速度是否在所请求值的 15% 范围内。
- 验证以不是步幅的倍数的缓冲区长度尝试传输时,传输是否失败并显示 STATUS_INVALID_PARAMETER,并且总线上未生成任何活动。 步幅由 DataBitLength 决定,如下所示:
DataBitLength | 跨距 |
4 - 8 | 1 |
9 - 16 | 2 |
17 - 32 | 4 |
这些测试针对外部连接的 mbed LPC1768 运行。 mbed LPC1768 是一个受欢迎的微控制器原型制作平台,可从各个在线零售商购买,包括 Sparkfun、Digikey 和 Adafruit。 使用测试固件映像对 mbed 进行编程非常简单,只需将固件映像拖放到大容量存储设备即可。 GitHub 上提供了固件源代码。 下面提供有关准备 mbed 和运行测试的详细说明。
测试详细信息
规范 |
|
平台 | |
支持的版本 |
|
预计运行时间(以分钟为单位) | 15 |
类别 | 开发 |
超时(以分钟为单位) | 30 |
需要重启 | false |
需要特殊配置 | 是 |
类型 | automatic |
其他文档
此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:
运行测试
将需要以下硬件来运行测试:
- 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 Studio 中计划测试了。
故障排除
有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题。
建议在命令行上运行测试,以深入了解失败并快速迭代解决方案。 我们还建议挂接逻辑分析器,例如 salae。 如果无法检查总线流量,可能很难或不可能确定失败原因。
下面介绍如何在命令行上运行测试:
将 %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: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 - turn on verbose output。 这会导致在发生故障时将整个缓冲区转储到控制台。 默认情况下,只会显示第一个不匹配的字节。
示例:
列出可用测试:
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)。 |