SPI WinRT 步幅验证测试

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

测试详细信息

   
规范
  • Device.BusController.SPI.WinRT.Discretional
平台
    支持的版本
    • 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
    需要重启 false
    需要特殊配置 false
    类型 automatic

     

    其他文档

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

    运行测试

    将需要以下硬件来运行测试:

    首先,必须将测试固件加载到 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 Studio 中计划测试了。

    故障排除

    有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

    建议在命令行上运行测试,以深入了解失败并快速迭代解决方案。 我们还建议挂接逻辑分析器,例如 salae。 如果无法检查总线流量,可能很难或不可能确定失败原因。

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

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

    2. 将 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 中的 Windows.Devices.LowLevel.UnitTests.dll 复制到设备上的 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 - 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)。