我一直在开发一个运行在16 PIC18F45k20上的MHz,并将其用作SPI从服务器。我发现,无论来自主机的SPI时钟速率(SCK)如何,我总是必须在SPI字节之间添加一个显著的延迟(~64 us),以避免SPI冲突或接收溢出。在没有延迟的情况下,在非常慢的SPI时钟速率下,95%的SPI数据包将在没有冲突或溢出的情况下通过。
在线帖子让我认为这可能是PIC18处理器和其他处理器的一个“特性”。
我在没有中断的情况下对PIC18进行了以下测试:
if (SSPSTATbits.BF)
{
DataIn = SSPBUF;
SSPBUF = DataOut;
}还使用中断进行测试,并看到了同样的挑战。
让我怀疑它是否真的检测到了SPI时钟。
发布于 2013-03-20 13:15:45
如果你有一个示波器检查,以确保芯片选择是不释放的事先事先知情同意锁定出最后的SPI数据字节。在释放芯片选择线之前,您需要等待SPI繁忙位。
发布于 2016-04-10 04:40:37
正如我所知,PIC18是一个8位的微控制器,尽管您可以很容易地发现它的整数变量被映射到16位。然而,SPI处理8位数据。这意味着如果您的主控制器发送超过8位,如16位,溢出发生在SPI模块,不能再响应主时钟。因此,在从模式中,确保来自主数据的数据具有8位结构。但是,如果pic18是SPI连接中的主程序,即使它的从服务器发送16位数据,pic18也会在前8位之后保存时钟数据,然后等待其缓冲区读取,然后空到下一个8位。
发布于 2020-08-23 18:21:19
我也遇到了这个问题,似乎应该考虑的是,支持的SPI简单地告诉MCU能够以多快的速度接收到SSPBUF。
从SSPBUF读取此字节并将其存储在缓冲区中将需要一些工作,例如增量指针等,这将需要一些时间。这就是减少多字节SPI的实际SPI带宽的原因。
https://stackoverflow.com/questions/14532829
复制相似问题