我正在将.NET Core 3与iMX7上的嵌入式Linux结合使用。 SPI总线确实可以工作,并且我可以与连接到它的设备进行通信,但是似乎很慢。
SPI设备看到的信号很有意义。下图显示,当32位数据移出时,片选变为低电平的时间约为125us。这似乎很合理。
Scope trace of hardware chip select and SPI clock
但是,如果我在调用System.Devices.Spi.SpiDevice.Write(ReadOnlySpan<byte> buffer)
之前和之后切换GPIO引脚,则可以看到对Write()
的调用需要800us到7ms的时间才能返回。
Scope trace showing Write() taking over 3ms
7ms的延迟听起来并不多,但这将我与SPI总线上的设备进行通讯的速率限制在140kHz左右,如果我进行许多SPI事务,它将占用大量CPU时间。这似乎比预期的要慢得多,并且在数据传输之后浪费了大部分时间,但是对write()
的调用尚未返回。
这里是否有问题,或者只是对使用.NET Core的SPI抱有不合理的期望?