SPI应用笔记

1. 基本功能介绍

  • 各芯片的SPI模块数量及主要参数:

SoC SPI实例 主要参数
GR551x SPIM、SPIS SPIM最高主频32 MHz;FIFO深度8x4字节
GR5525 SPIM、SPIS SPIM最高主频48 MHz;FIFO深度16x4字节
GR5526 SPIM、SPIS SPIM最高主频48 MHz;FIFO深度16x4字节
GR533x SPIM、SPIS SPIM最高主频32 MHz;FIFO深度8x4字节

2. 应用笔记

  • 使用SPI Master模块建议均采用软件片选模式。

  • 当应用场景只需要SPI提供MOSI信号时,也可以考虑使用QSPI模块的SPI模式代替。

  • SPI Master使用注意事项:

    • 接收数据时,如果数据量较大或SPI工作频率较高,CPU或DMA取数据速度跟不上SPI FIFO读入速度,会发生接收溢出现象,导致数据丢失。优化方法:

      • 优先采用DMA进行传输,DMA的传输带宽远大于CPU,可以有效降低接收溢出现象。

      • 当采用DMA接收数据时,如果还有溢出现象,在应用场景下运行时,可以配置4字节传输宽度,进一步提高SPI FIFO的利用率,改善传输带宽。

      • 在对宽度要求不高的场景下,还可以减少单次数据接收量来降低接收溢出概率。

      • 如果进行上述优化后依然存在接收溢出现象,请在软件层设计重读逻辑,当数据溢出发生时,丢弃上次读取数据,重新读取一次。

    • 若使用硬件控制CS片选信号,当发送数据时,如果数据量较大或SPI工作频率较高,CPU或DMA发送速度跟不上SPI FIFO的发送速度,会出现CS信号自动拉起的行为,导致后面的时序数据紊乱。

      • 优化方法为使用软件方法控制片选信号的拉低和拉高。

  • SPI是强时序协议,当SPI通讯存在异常时,可尝试使用逻辑分析器抓取SPI信号,分析问题的可能性。

  • SPI驱动提供了三种模式的访问接口:轮询模式、中断模式、DMA模式。各模式的经验性建议如下,按照建议,可有效降低接收溢出发生的概率,但概率依然存在。

    • GR551x和GR533x:

      • 轮询模式和中断模式使用条件:

        • 建议单次传输数据量小于4拍。

        • 建议在SPI工作频率不大于1 MHz的情况下使用。

        • 使用场景适用于低频率和小数据量。

      • DMA模式使用条件:

        • 单次传输小于4095拍的任意数据量。

        • SPI工作频率不大于32 MHz的情况下使用。

        • 如果发生接收溢出,减少单次数据传输量和应用层增加重读机制。

    • GR5525和GR5526:

      • 轮询模式和中断模式使用条件:

        • 建议单次传输数据量小于8拍。

        • 建议在SPI工作频率不大于8 MHz的情况下使用。

        • 使用场景适用于低频率和小数据量。

      • DMA模式使用条件:

        • 单次传输小于4095拍的任意数据量,但可通过LLP扩展传输数据上限。

        • SPI工作频率不大于48 MHz的情况下使用。

        • 如果发生接收溢出,减少单次数据传输量和应用层增加重读机制。