SPI WinRT 步幅验证测试

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 是一个流行的微控制器原型制作平台,可以从各种在线零售商(包括 FarnellDigikeyAdafruit)购买。 使用测试固件映像对 mbed 进行编程就像将固件映像拖放到大容量存储设备一样简单。 github 上提供了固件源代码。 下面提供了有关准备 mbed 和运行测试的详细说明。

测试详细信息

   
规格
  • Device.BusController.SPI.WinRT.可选择的
平台
    支持的版本
    • 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
    需要重新启动
    需要特殊配置
    类型 自动

     

    其他文档

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

    运行测试

    需要以下硬件才能运行测试:

    首先,必须将测试固件加载到 mbed 上:

    1. 通过 USB 将 mbed LPC1768插入电脑。 它将在电脑上显示为可移动驱动器。
    2. 在文件资源管理器中打开驱动器
    3. 将 c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin 复制到驱动器
    4. 按 mbed 上的按钮重置微控制器

    接下来,将 mbed 连接到受测的 SPI 控制器。 若要为 mbed 供电,可以通过 USB 将其插入到受测设备,或将 VIN 和 GND 引脚直接连接到受测设备上的电源引脚。 在受测设备与 mbed 之间建立以下连接:(mbed 引脚

    1. 将 mbed 引脚 13 (P0.15/SCK0) 连接到受测设备上的 SCK 引脚
    2. 将 mbed 引脚 30 (P0.4/CAP2.0) 连接到受测设备上的 SCK 引脚(此引脚用于精确时钟测量)
    3. 将 mbed 引脚 11(P0.18/MOSI0)连接到受测设备上的 MOSI 引脚
    4. 将 mbed 引脚 12(P0.17/MISO0)连接到受测设备上的 MISO 引脚
    5. 将 mbed 引脚 14(P0.16/SSEL0)连接到受测设备上的芯片选择引脚
    6. 将 mbed GND 连接到受测设备上的 GND 引脚

    现在可以在 HLK 工作室中计划测试。

    故障排除

    有关 HLK 测试失败的一般故障排除步骤,请参阅 Windows HLK 测试失败排查指南

    建议在命令行上运行测试,以便深入了解故障并快速循环访问解决方案。 我们还建议连接逻辑分析器,例如salae。 如果不能够检查总线流量,就很难或不可能确定失败的原因。

    下面介绍如何在命令行上运行测试:

    1. 将 %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe 复制到 c:\data\minte

    2. 将 Windows.Devices.LowLevel.UnitTests.dll 从 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 复制到设备上的 c:\data。

    3. 使用 Telnet 或 SSH 登录到设备

    4. 将目录更改为 c:\data

    5. 运行测试:

      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)。