【发布时间】:2013-01-26 01:22:27
【问题描述】:
我一直在研究以 16 MHz 运行的 PIC18F45k20,并将其用作 SPI 从设备。我发现无论来自主机的 SPI 时钟速率 (SCK) 如何,我总是必须在 SPI 字节之间添加一个显着的延迟(~64 us)以避免 SPI 冲突或接收溢出。在没有延迟和非常慢的 SPI 时钟速率的情况下,95% 的 SPI 数据包将通过而不会发生冲突或溢出。
在线帖子让我认为这可能是该处理器和其他 PIC18 处理器的“功能”。
- 其他人是否观察到了同样的从属“特征”?
- 如果这是一项“功能”,是否在所有 PIC18 处理器中都可以找到?
我在没有中断的情况下测试了 PIC18:
if (SSPSTATbits.BF)
{
DataIn = SSPBUF;
SSPBUF = DataOut;
}
还使用中断进行了测试,发现了同样的挑战。
让我怀疑它是否没有真正正确地检测到 SPI 时钟。
【问题讨论】:
-
PIC18F45k20数据表/参考手册的SPI章节有相关时序图吗?
-
最经典的 SPI 问题是时钟偏差,它会导致许多奇怪的错误。您是否绝对确定主机和从机使用 1) 相同的时钟极性和 2) 相同的时钟相位(在时钟边沿或边沿 + 延迟上触发)?
-
我已经测试了所有 4 种基本的 spi 配置。在每种情况下它都有效,但在每种情况下都需要冗长的(相对而言)事务间延迟。