【发布时间】:2022-12-07 05:13:14
【问题描述】:
我正在尝试使用带有 Windows IoT 的 RPi2B 通过 I2C 与 GE 电源通信。我可以进行简单的读写 OK,但任何涉及重复启动的操作都是不可靠的。由于电源的 PMBus 命令集由 WriteRead I2C 事务(需要重复启动)主导,因此我从特定寄存器读取的大部分尝试都失败了……但偶尔它会按预期工作。这是相关代码...
public void Read_Firmware_Rev()
{
Windows.Devices.I2c.I2cTransferResult Temp;
byte[] ReadBuffer = new byte[8];
var CommandBuffer = new byte[1] { Firmware_Rev };
Temp = _I2C.WriteReadPartial(CommandBuffer, ReadBuffer);
if (Temp.Status == I2cTransferStatus.FullTransfer)
{
String S = System.Text.Encoding.ASCII.GetString(ReadBuffer);
Debug.WriteLine(S);
}
else Debug.Write("-");
}
顶部图像是最常见的结果;底部是难得的成功。成功的事务在第一个字节之后有一个时钟延长(由谁?),并在命令字节 0xD5 之后有一个重复的开始。
电源的文档说它接受重复启动并可以延长时钟。这不是速度问题……我在 100kHz 时仅以每秒 1 次的速度查询电源。 任何人都可以提出为什么会发生这种行为吗?
【问题讨论】:
-
你确定这是在 Rpi2b 上吗?据我所知,Windows IOT 核心仅在 Rpi3b 上受支持。另外,请准确说明您使用的是哪个库。
-
是的,你是对的 RPi3b。运行版本 10.0.17763.107
-
您使用什么库进行 I2C 传输?
-
Windows.Devices.I2c;,Windows IoT 中 UWP C# 的标准 .NET 库。我想这就是你要问的。
-
我认为那个图书馆很旧。请试试
System.Device.Gpio。
标签: iot i2c windows-10-iot-core