我有一个Raspberry Pi管理和写入FPGA。我使用SPI总线和一些GPIO通过链接获取数据。 SPI写入以可变长度的突发方式发生-从几十个字节到大约8kB。
FPGA SPI接收代码具有一个超时,我最初将其设置为约12ms(这是一个估计值)。这几乎总是可以的,但是今天我发现FPGA上偶尔出现的超时似乎是由于RPi在发送字节的过程中偶尔会暂停约15毫秒而造成的。
RPi python驱动程序代码看起来非常像这样:
for b in byte_array:
send_byte()
其中send_byte()是一个简单的函数,它调用GPIO库中的SPI字节写函数,并进行一些BUSY行检查并重试。
通常,字节间隔几百微秒,所以这种突然的暂停是很奇怪的。我认为这可能是由于某种上下文切换引起的-但是Pi并没有做很多其他事情(并且正在运行库存的Linux发行版)。
这都不是大问题,我可以轻松地增加超时而不会出现问题。但是我很好奇。是什么原因导致运行数GHz的Linux的芯片突然停止执行被要求执行的唯一操作,持续15ms左右?在这种情况下,这是永恒的?
如果有问题-我该怎么办?