Embedded 使用PIC18作为SPI从设备的问题
我一直在开发一款运行频率为16 MHz的PIC18F45k20,并将其用作SPI从机。我发现,无论来自主机的SPI时钟速率SCK如何,我都必须在SPI字节之间添加一个显著的延迟~64 us,以避免SPI冲突或接收溢出。在没有延迟和非常慢的SPI时钟速率的情况下,95%的SPI数据包将在没有冲突或溢出的情况下通过 在线帖子让我想到这可能是PIC18处理器和其他处理器的一个特点 其他人是否观察到了同样的从属“特征”? 如果这是一项“功能”,是否在所有PIC18处理器中都能找到? 我在没有中断的情况下对PIC18进行了以下测试:Embedded 使用PIC18作为SPI从设备的问题,embedded,pic,Embedded,Pic,我一直在开发一款运行频率为16 MHz的PIC18F45k20,并将其用作SPI从机。我发现,无论来自主机的SPI时钟速率SCK如何,我都必须在SPI字节之间添加一个显著的延迟~64 us,以避免SPI冲突或接收溢出。在没有延迟和非常慢的SPI时钟速率的情况下,95%的SPI数据包将在没有冲突或溢出的情况下通过 在线帖子让我想到这可能是PIC18处理器和其他处理器的一个特点 其他人是否观察到了同样的从属“特征”? 如果这是一项“功能”,是否在所有PIC18处理器中都能找到? 我在没有中断的情况下
if (SSPSTATbits.BF)
{
DataIn = SSPBUF;
SSPBUF = DataOut;
}
还使用中断进行了测试,并看到了相同的挑战
让我怀疑它是否真的没有正确地检测到SPI时钟。如果您有示波器检查,以确保在PIC时钟输出最后一个SPI数据字节之前,芯片选择没有被释放。在释放芯片选择线之前,您需要等待SPI忙位。正如我所知,PIC18是一个8位微控制器,尽管您很容易发现它的整数变量映射到16位。然而,SPI可以处理8位数据。这意味着,如果您的主控制器向该微控制器发送的数据超过8位,例如16位,则SPI模块中会发生溢出,无法再响应主时钟。因此,在从属模式下,确保来自主服务器的数据具有8位结构。但如果pic18是SPI连接中的主设备,即使其从设备发送16位数据,pic18在第一个8位之后保存时钟数据,并等待其缓冲区读取并清空,等待下一个8位。我也遇到了这个问题,似乎应该考虑的是,支持的SPI simple告诉MCU可以以多快的速度将一个字节接收到SSPBUF
从SSPBUF读取该字节并将其存储在缓冲区中需要一些工作,如增加指针等,这需要一些时间。这就是降低多字节SPI的实际SPI带宽的原因。PIC18F45k20数据表/参考手册的SPI章节中是否有相关的时序图?最典型的SPI问题是时钟偏移,它会导致许多奇怪的错误。您是否绝对确定主设备和从设备在时钟边缘或边缘+延迟上使用1相同的时钟极性和2相同的时钟相位触发器?我已经测试了所有4种基本spi配置。在每种情况下,它都有效,但在每种情况下,它都需要相对较长的事务间延迟。