无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口

Posted

技术标签:

【中文标题】无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口【英文标题】:Unable to open UART port on Windows IoT with Raspberry Pi 3 【发布时间】:2019-07-06 01:28:57 【问题描述】:

在运行在 Raspberry Pi 3 上的 Windows IoT Core 10 上用 C# 打开 SerialDevice 后,串口中有 null。

代码如下:

string aqs = SerialDevice.GetDeviceSelector();
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(aqs);
List<DeviceInformation> list = devices.ToList();
DeviceInformation di = list.First();
serialPort = await SerialDevice.FromIdAsync(di.Id);

serialPortnull

di.Id 等于:Id "\\\\?\\ACPI#BCM2836#0#86e0d1e0-8089-11d0-9ce4-08003e301f73" string

list.Count等于1

这里有两条来自/api/devicemanager/devicesGET请求的记录与UART相关:


  "Class": "Ports",
  "Description": "BCM283x Mini UART Serial Device",
  "ID": "ACPI\\BCM2836\\0",
  "Manufacturer": "Microsoft",
  "ParentID": "ACPI_HAL\\PNP0C08\\0",
  "ProblemCode": 0,
  "StatusCode": 25182218
,

  "Class": "System",
  "Description": "ARM PL011 UART Device Driver",
  "ID": "ACPI\\BCM2837\\4",
  "Manufacturer": "Microsoft",
  "ParentID": "ACPI_HAL\\PNP0C08\\0",
  "ProblemCode": 0,
  "StatusCode": 25165834
,

我尝试将 Rx 和 Tx 都短接,并且不短接,它不起作用...

更新

如果我拆分给定的 ID,我有 Invalid data 异常。

string aqs = SerialDevice.GetDeviceSelector();
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(aqs);
List<DeviceInformation> list = devices.ToList();
DeviceInformation di = list.First();

string id = "86e0d1e0-8089-11d0-9ce4-08003e301f73";
try  serialPort = await SerialDevice.FromIdAsync(id);  catch(Exception e)  Debug.WriteLine(e.Message); 
id = "\\\\?\\ACPI#BCM2836#0#";
try  serialPort = await SerialDevice.FromIdAsync(id);  catch(Exception e)  Debug.WriteLine(e.Message); 
id = di.Id;
try  serialPort = await SerialDevice.FromIdAsync(id);  catch(Exception e)  Debug.WriteLine(e.Message); 
if (serialPort == null)  Debug.WriteLine("No device"); return; 

输出:

抛出异常:mscorlib.ni.dll 中的“System.Exception” 数据无效。 (来自 HRESULT 的异常:0x8007000D) 数据无效。 (来自 HRESULT 的异常:0x8007000D) 没有设备

【问题讨论】:

很明显,您找到的 di.Id 字符串比存储在设备记录中的 ID 更长,即末尾包含 GUID。也许它找不到您要它查找的 ID? 你错了,看我的更新。 我怎么错了?! "ACPI\\BCM2836\\0" != "\\\\?\\ACPI#BCM2836#0#"...大声笑 看看***.com/questions/37505107/… 还有这个social.msdn.microsoft.com/Forums/en-US/… 【参考方案1】:

正如Grim所说,解决方案在这里:SerialDevice.FromIdAsync() yields a null serial port

需要补充:

<DeviceCapability Name="serialcommunication">
  <Device Id="any">
    <Function Type="name:serialPort" />
  </Device>
</DeviceCapability>

Package.appxmanifest 文件中的&lt;Capabilities&gt; 标记中。

【讨论】:

以上是关于无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口的主要内容,如果未能解决你的问题,请参考以下文章

无法在触摸屏中使用 3.5 的 Raspberry Pi 3 上成功启动 Kivy 应用程序

Android Things 3 无法从 Raspberry PI 3 上的 rxtx 读取

无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3

在 Raspberry Pi 3 上使用 pymssql 的 SQL Server 连接

无法在我的 Raspberry PI 上安装 Better-Sqlite3

QtCreator 从 Win 交叉编译 Raspberry Pi,发出远程运行应用程序