【问题标题】:Two RFID RC522 Raspberry PI 2 Windows IOT两个 RFID RC522 Raspberry PI 2 Windows IOT
【发布时间】:2016-09-18 18:32:05
【问题描述】:

如果我想通过 SPI 连接第二个 rfid 阅读器,我应该在主题 RFID RC522 Raspberry PI 2 Windows IOT 的课程中​​进行哪些更改?

我将第二条“ss line”连接到 SPI_CE1_N 引脚,将“reset line”连接到 GPIO12 引脚。

我在 Mfrc522 类中添加了一个构造函数,并使用 SPI_CONTROLLER_NAME、SPI_CHIP_SELECT_LINE、RESET_PIN 作为参数,但没有成功。

【问题讨论】:

  • 第 0 行映射到 Rpi2 上的物理引脚编号 24(CS0),第 1 行映射到物理引脚编号 26(CS1)。因为片选线在初始化时绑定到 SPI 设备。你可以Dispose初始化SPI设备,改变它的片选线重新初始化。
  • 它不起作用。在下一次初始化期间程序停止。

标签: c# raspberry-pi2 iot windows-10-iot-core windowsiot


【解决方案1】:

第一次初始化

public async Task InitIO()
{
    ...
    ...

    try
    {
        settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE);
        settings.ClockFrequency = 1000000;
        settings.Mode = SpiMode.Mode0;

        String spiDeviceSelector = SpiDevice.GetDeviceSelector();
        IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);

        _spi = await SpiDevice.FromIdAsync(devices[0].Id, settings);

    }
    catch (Exception ex)
    {
        throw new Exception("SPI Initialization Failed", ex);
    }

    ...
    ...
}

第二次初始化:

public async Task ReInitSpi()
{
    _spi.Dispose(); //Here is important.

    try
    {
        if (settings.ChipSelectLine == 0)
        {
            settings = new SpiConnectionSettings(1); //CS1
        }
        else
        {
            settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE); //CS0
        }

        settings.ClockFrequency = 1000000;
        settings.Mode = SpiMode.Mode0;

        String spiDeviceSelector = SpiDevice.GetDeviceSelector();
        IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);

        _spi = await SpiDevice.FromIdAsync(devices[0].Id, settings);

    }
    /* If initialization fails, display the exception and stop running */
    catch (Exception ex)
    {
        throw new Exception("SPI Initialization Failed", ex);
    }

}

例如,每次使用它时,都这样做:

    await mfrc.ReInitSpi();

    var writeBuffer = new byte[] { 0x55, 0xaa };

    mfrc._spi.Write(writeBuffer);

这对我有用。希望对你有帮助。

【讨论】:

  • 程序总是卡在行_spi = await SpiDevice.FromIdAsync(devices[0].Id, settings);
  • 您的 Windows IoT 核心版本是什么?
  • 我有 10.0.14393.0 可以吗?
【解决方案2】:

我终于解决了这个问题。

感谢 Rita Han 的帮助。您的代码现在运行良好。现在因为我有硬件问题。

我以图片的形式连接设备:

连接示波器后发现MISO总线电压不正确。两个设备都将电压拉低到地。而不是 3,3V 几乎是 1,24V。 (3.3V CMOS 逻辑电平 1 的最低电压为 2.4V)

为了快速测试,我使用了两个二极管(用于分离输出)和电阻器(用于加速下降沿)。

结果:3,3V - Vf = 2,56V

现在这两款设备都运行良好。

我认为最终还是使用 SN74HC125N 会更好。

BTW:为什么不能通过属性改变SS pin?

_spi.ConnectionSettings.ChipSelectLine = 1;

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2018-02-22
    • 2016-03-20
    • 2017-03-10
    相关资源
    最近更新 更多