首页 > 解决方案 > Raspberry Pi 3A+ 使用 Mono C# 来控制 SPI 连接

问题描述

我遵循 Microsoft 的文档如下: https://docs.microsoft.com/en-us/windows/iot-core/learn-about-hardware/pinmappings/pinmappingsrpi 这是代码:

using Windows.Devices.Enumeration;
using Windows.Devices.Spi;

public async void SPI()
{
    // Use chip select line CS0
    var settings = new SpiConnectionSettings(0);
    // Set clock to 10MHz
    settings.ClockFrequency = 10000000;

    // Get a selector string that will return our wanted SPI controller
    string aqs = SpiDevice.GetDeviceSelector("SPI0");

    // Find the SPI bus controller devices with our selector string
    var dis = await DeviceInformation.FindAllAsync(aqs);

    // Create an SpiDevice with our selected bus controller and Spi settings
    using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
    {
        byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
        device.Write(writeBuf);
    }
}

此代码可以构建成功。但它在带有 Mono 的 Raspbian 中不起作用。环顾四周,我遵循: https ://github.com/dotnet/iot/issues/1089

迁移的方法是删除对 winmds 和 System.Runtime.WindowsRuntime 和 System.Runtime.InteropServices.WindowsRuntime 的所有引用,而只引用 Microsoft.Windows.SDK.NET 包。

但由于以下错误,它无法构建:

“IAsyncAction”类型是在未引用的程序集中定义的。您必须添加对程序集“Windows,Version=255.255.255.255,Culture=neutral,PublicKeyToken=null,ContentType=WindowsRuntime”的引用

我阅读了以下链接,但无济于事。 Windows 服务中的 IAsyncOperation 等待:“类型是在未引用的程序集中定义的......”

标签: c#.netraspberry-pimonospi

解决方案


推荐阅读