1

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

在线帖子让我认为这可能是该处理器和其他 PIC18 处理器的“功能”。

  1. 其他人是否观察到了同样的奴隶“特征”?
  2. 如果这是一个“特性”,它是否存在于所有 PIC18 处理器中?

我在没有中断的情况下测试了 PIC18:

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

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

让我想知道它是否不能真正正确地检测到 SPI 时钟。

4

3 回答 3

0

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

于 2013-03-20T13:15:45.017 回答
0

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

于 2016-04-10T04:40:37.620 回答
0

我也遇到过这个问题,似乎应该考虑的是,受支持的 SPI 简单告诉 MCU 可以多快将一个字节接收到 SSPBUF。

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

于 2020-08-23T18:21:19.697 回答