查看: 3995|回复: 5

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

[复制链接]

13

主题

23

帖子

221

积分

高级工程师

Rank: 3Rank: 3

积分
221
发表于 2021-11-22 10:01:07 | 显示全部楼层 |阅读模式


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;
}

回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2021-11-23 09:14:31 | 显示全部楼层
spi的波特率 应该要至少要小于1/2的Fapbclk时钟。 你系统时钟跑RCMF的16分频? spi跑至少要小于1/2的系统时钟。若果Fapbclk是使用系统时钟的话
回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2021-11-23 09:15:34 | 显示全部楼层
spi速度应该没有下限,只有上限
回复

使用道具 举报

13

主题

23

帖子

221

积分

高级工程师

Rank: 3Rank: 3

积分
221
 楼主| 发表于 2021-11-24 09:28:22 | 显示全部楼层
原先系统时钟RCMF 16分频,SPI波特率2分频,容易死在while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI2)));
现在RCMF还是16分频,SPI波特率改成4分频,通信正常了。
奇怪了。
回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 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 是最高波特率,降低些总是稳些的。
回复

使用道具 举报

0

主题

1

帖子

10

积分

初级工程师

Rank: 1

积分
10
发表于 2021-11-25 11:24:06 | 显示全部楼层
硬件上面也要查一下,寄生电容是否满足速率要求,用示波器看一下上升沿下降沿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表