qinlicn 发表于 2021-11-22 10:01:07

请问SPI对最低通信速率的要求



SPI2参考的是官方例程,SCK时钟2分频,8B模式。系统时钟RCMF 16分频。
调试中发现经常在第2个while死掉;将RCMF改成8分频的话,就没有这个问题。
MCU通信的从机SPI芯片,其数据手册建议通信速率为1M~5M,没有说明低于1M速率的影响。
请问SPI模块本身呢?对低通信速率有什么要求?

uint32_t SpiWriteAndRead(uint32_t data)
{
    FL_SPI_SetSSNPin(SPI2, FL_SPI_SSN_LOW);
    FL_SPI_WriteTXBuff(SPI2, data);
    while(!(FL_SPI_IsActiveFlag_TXBuffEmpty(SPI2)));
    while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI2)));
    data = FL_SPI_ReadRXBuff(SPI2);
    FL_SPI_SetSSNPin(SPI2, FL_SPI_SSN_HIGH);
    return data;
}

顾博文 发表于 2021-11-23 09:14:31

spi的波特率 应该要至少要小于1/2的Fapbclk时钟。 你系统时钟跑RCMF的16分频? spi跑至少要小于1/2的系统时钟。若果Fapbclk是使用系统时钟的话

顾博文 发表于 2021-11-23 09:15:34

spi速度应该没有下限,只有上限

qinlicn 发表于 2021-11-24 09:28:22

原先系统时钟RCMF 16分频,SPI波特率2分频,容易死在while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI2)));
现在RCMF还是16分频,SPI波特率改成4分频,通信正常了。
奇怪了。

顾博文 发表于 2021-11-25 08:48:31

qinlicn 发表于 2021-11-24 09:28
原先系统时钟RCMF 16分频,SPI波特率2分频,容易死在while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI2)));
现 ...

按照rcmf16分频, spi 2分频,我用例程试了下,没出现卡死现象。 手册上说 1/2 的apbclk 是最高波特率,降低些总是稳些的。

zjulkw 发表于 2021-11-25 11:24:06

硬件上面也要查一下,寄生电容是否满足速率要求,用示波器看一下上升沿下降沿
页: [1]
查看完整版本: 请问SPI对最低通信速率的要求