SPI协议是嵌入式芯片通信中最重要、并且是最难理解的通信协议之一,在当前域控制器的主流架构MCU-SoC之下被广泛使用,其特点在于全双工、通信稳定、数据传输量较小。DMA模块可配合SPI协议使用,在SPI传输一定数据后可触发数据搬运处理,用于解放CPU对数据的直接处理,而ICU模块用于对SPI传输协议的补充。在当前的项目硬件中,除了SPI的四根通信线之外,还涉及到三根GPIO端口,分别为RDY、ACK以及IND。RDY用于SoC在收到SPI报文分片之后由SoC发送、ACK在SoC完整接收到一包完整的SPI报文后由SoC发送,IND用于MCU向SoC发出即将发送SPI数据的指令。其中,RDY和ACK信号的捕捉由ICU模块完成。
1 SPI界面分析
在SPI配置界面中,主要分为两大部分,第一部分是General部分的配置,包含了General、SpiMainFunction以及SpiHwConfiguration三个选项卡。在General选项卡中,通常需要注意SpiLevelDelivered和SpiChannelBuffersAllowed两处选项。前者代表SPI驱动工作在同步还是异步模式,目前我们的IoHwAb程序中使用的是异步传输模式,故此处可选择为LEVEL1或LEVEL2。后者表示数据缓存的buffer类型,在该项目中我们使用的是External Buffer,故选择参数1。
SpiMainFunctionPeriod代表SPI的主函数周期,在周期函数中会轮询QSPI硬件中断,并作发送或接收处理。

SpiHwConfiguration中主要需关注QSPI的kernel ID以及HWPinMRST。前者在硬件设计时需确定,后者指定MISO的端口号。除此之外,还需要关注DMA的通道配置,若SPI协议用于传输一定量的数据,则有必要配置DMA通道,如MCU和SOC之间连接的通道。DMA的通道号与SPI HW的kernel ID保持一致。

SPI配置的第二部分主要体现了每一个通道上的外设参数,具体包含了SpiChannels,SpiExternalDevices,SpiJobs以及SpiSequences四个子选项集。在介绍四个选项卡的具体配置项之前,需要对它们的关系作如下梳理。按下图所示,一个Spi Sequence是一个最大的容器,它包含了若干Spi Jobs,可以作为一系列数据传输的总集。一个Spi Job中包含了若干通道的数据,这些通道的数据收发都参考同一个CS电平信号。一般来说,一个通道对应一个ExternalDevice,在一个ExternalDevice中包含了和外部设备通信的必要参数,如波特率、CS极性、SPI HW unit、SPI数据收发边沿、CS拉低延迟时间等等。关键参数在下一节做具体分析。
在当前项目中,我们将一套SPI通道对应一个Channel、一个Job以及一个Sequence。

最低0.47元/天 解锁文章
2018

被折叠的 条评论
为什么被折叠?



