【问题标题】:Windows IoT I2C repeated startWindows IoT I2C 重复启动
【发布时间】: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


【解决方案1】:

Raspberry Pi 2b 无法执行 I2C 重复启动,因此无法执行 WriteRead 序列。硬件解决方案是将 SPI 转换为 I2C 的 NXP SC18IS604 芯片。 RPi 通过 SPI 与 SC18IS604 对话,然后 SC18IS604 通过 I2C 与外部设备对话。这对我来说很有用。 https://www.nxp.com/docs/en/data-sheet/SC18IS604.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2019-04-04
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多