使用PIC18作为SPI从器件的问题

时间:2013-01-26 01:22:27

标签: embedded pic

我一直在研究以16 MHz运行的PIC18F45k20并将其用作SPI从器件。我发现无论主时钟的SPI时钟速率(SCK)如何,我总是要在SPI字节之间添加一个显着的延迟(~64 us)以避免SPI冲突或接收溢出。如果没有延迟和非常慢的SPI时钟速率,95%的SPI数据包将通过而不会发生冲突或溢出。

在线帖子让我认为这可能是这个以及其他PIC18处理器的“特性”。

  1. 让其他人观察到这个相同的奴隶“功能”吗?
  2. 如果这是“功能”,是否可以在所有PIC18处理器中找到它?
  3. 我在没有中断的情况下测试了PIC18,具体如下:

    if (SSPSTATbits.BF)
    {
      DataIn = SSPBUF;
      SSPBUF = DataOut;
    }
    

    还使用中断测试并看到了同样的挑战。

    让我想知道它是不是真的无法正确检测SPI时钟。

3 个答案:

答案 0 :(得分:0)

如果您要进行示波器检查,以确保在PIC输出最后一个SPI数据字节之前没有释放芯片选择。在释放芯片选择线之前,需要等待SPI忙位。

答案 1 :(得分:0)

我知道PIC18是一个8位微控制器,虽然你可以很容易地发现它的整数变量被映射到16位。但SPI使用8位数据。这意味着如果您的主设备发送超过8位的微控制器,例如16位,则SPI模块中会发生溢出,并且不再响应主时钟。因此在从模式下,确保来自主站的数据具有8位结构。但如果pic18是SPI连接中的Master,即使它的从设备发送16位数据,pic18在第一个8bit之后保持时钟数据并等待其缓冲区读取并为下一个8bit清空。

答案 2 :(得分:0)

我也遇到过这个问题,似乎应该考虑的一点是,受支持的SPI简单说明了MCU能够以多快的速度将一个字节接收到SSPBUF中。

从SSPBUF读取此字节并将其存储在缓冲区中将需要一些工作,例如增加指针等,这将需要一些时间。这就是减少多字节SPI的实际SPI带宽的原因。