SPI常见问题

1. SPI支持的最大频率是多少?

  • SPI模块分为SPI Master和SPI Slave,其中SPI Master支持的最大频率是系统最高频率的二分之一,SPI Master支持的分频系数为2~65535之间的偶数,不支持奇数分频。

  • 各款芯片SPI Master模块的最大频率支持如下:

    • GR551x全系列芯片最高主频为64 MHz,SPI Master的最大工作频率为32 MHz,时钟源为系统时钟。

    • GR5525全系列芯片最高主频为96 MHz,SPI Master的最大工作频率为48 MHz,时钟源为外设时钟。

    • GR5526全系列芯片最高主频为96 MHz,SPI Master的最大工作频率为48 MHz,时钟源为外设时钟。

    • GR533x全系列芯片最高主频为64 MHz,SPI Master的最大工作频率为32 MHz,时钟源为外设时钟。

2. 什么是软件片选,什么是硬件片选,使用有什么区别?

  • 软件片选:在进行SPI传输前,由软件拉低控制CS引脚所在的IO;SPI传输完成后,由软件拉高控制CS引脚所在的IO。CS的行为由软件代码控制。这个时候的CS引脚IO需要配置为Output模式。

  • 硬件片选:SPI的片选信号的拉低和拉高,全部由芯片的SPI模块负责,这个时候CS引脚所在IO需要配置为CS功能的Mux模式。

  • 为什么会存在软件片选?

    • SPI在发送数据时,有可能因为数据量大、传输速率高或CPU来不及处理等原因,发送时向SPI FIFO喂数据的速度跟不上导致FIFO变空,如果此时使用了硬件片选,就会将CS进行自动拉高释放,而产生错误的访问时序。

  • 什么时候需要使用软件片选?

    • 当传输数据量比较大、SPI频率配置比较高时,建议使用软件片选。由于数据量大小和频率高低是一个相对概念,无法精确地基于场景进行计算,因此建议所有使用SPI传输的场景都启用软件片选。这个建议适用于GR551x、GR5525、GR5526、GR533x所有系列芯片。

    • SPI在App驱动层预置了软件片选支持,使用的时候注意开启相关控制宏即可。详情可参考_app_spi.c_中的驱动代码。

3. SPI接收数据时发生了回调错误事件APP_SPI_EVT_ERROR,该怎么处理?

  • SPI在接收数据的时候,有可能因为数据量大、传输速率高或CPU来不及处理等原因,导致SPI模块的接收FIFO被Slave发送过来的数据塞满,发生FIFO接收溢出错误(Receive Overflow Error)。当发生这个错误时,会通过回调事件APP_SPI_EVT_ERROR告知用户。正确的处理方法是,调用接口重新收一遍数据。另外,这种情况,请使用DMA传输模式降低概率。

  • 如果不是上述原因,同时使用DMA传输方式的话,则可能是DMA的传输数据量过大,需要限制DMA单次传输在4095拍以内。