You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用C#获取已连接SPI设备的简便方法咨询

在Windows系统中获取SPI连接设备的简便方法

嘿,我来帮你搞定这个问题!你提到的C# SPI类和WMI查询的思路都没错,只是有些细节需要调整,下面给你一步步拆解:

一、为什么C#的SPI类没法直接枚举设备

你说的System.Device.Spi(属于.NET IoT库)其实主要是用来控制已经知道参数的SPI设备,比如指定总线号、芯片选择线来初始化设备并读写数据,但它本身没有提供枚举已连接SPI设备的功能——所以你用它找不到设备是正常的,它不是干这个活的工具~

二、用WMI查询SPI设备(和USB设备的思路一致)

你之前用ManagementObjectCollection获取USB设备的方法完全可以迁移到SPI上,只是要换对WMI的查询类:

核心代码示例

SPI设备对应的WMI类是Win32_SPIDevice(Windows 10及以上版本支持),你可以用下面的C#代码来枚举所有已连接的SPI设备:

using System.Management;

public static void EnumerateSPIDevices()
{
    try
    {
        // WMI查询语句,获取所有SPI设备
        string wmiQuery = "SELECT * FROM Win32_SPIDevice";
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
        ManagementObjectCollection spiDevices = searcher.Get();

        foreach (ManagementObject device in spiDevices)
        {
            // 输出设备关键信息,你可以根据需求调整字段
            Console.WriteLine($"设备名称: {device["Name"]}");
            Console.WriteLine($"设备ID: {device["DeviceID"]}");
            Console.WriteLine($"总线编号: {device["BusNumber"]}");
            Console.WriteLine($"芯片选择线: {device["ChipSelectLine"]}");
            Console.WriteLine("----------分割线----------");
        }
    }
    catch (ManagementException ex)
    {
        Console.WriteLine($"查询出错啦: {ex.Message}");
    }
}

小提示

如果Win32_SPIDevice查不到设备,可能是你的设备驱动没注册WMI信息,这时候可以试试更宽泛的查询,从所有即插即用设备里筛选SPI相关的:

// 模糊查询带SPI关键词的设备
string fallbackQuery = "SELECT * FROM Win32_PnPEntity WHERE Description LIKE '%SPI%'";

不过这种方式可能会混入一些非SPI设备,需要你手动甄别。

三、其他备选方案

如果WMI还是不行,还有两个办法:

  • 设备管理器手动排查:打开设备管理器,看看“系统设备”或“通用串行总线控制器”下有没有带SPI字样的设备,记下它的设备实例ID,后续可以用代码针对性识别。
  • 调用Windows SetupAPI:这是更底层的硬件枚举API,能拿到所有即插即用设备的信息,不过需要用C#做P/Invoke调用(比如SetupDiGetClassDevs、SetupDiEnumDeviceInfo这些函数),代码会复杂一些,但兼容性更好。

内容的提问来源于stack exchange,提问作者TBockmair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:26:25