接口/总线/驱动
接着之前的英飞凌TC3XX的文章,今天来梳理一下SPI模块的信息。
01.
QSPI模块简介
首先什么是QSPI呢?QSPI中的Q是“Queue”的缩写,指的是一块通用的内存,其中包含两种数据,分别为配置数据和传输数据,配置数据就是寄存器的配置,传输数据就是实际要发送的数据,最简单的Queue组成如下图所示,一个4byte的配置数据以及一个4byte的传输数据组成。
那QSPI有什么好处呢?Queue 使得不同格式的SPI数据的传输更高效,例如:
1. 使用一个DMA通道就可以完成Queue和QSPI外围设备的数据传输;
2. 通过Queue的数据就可以自动改变SPI数据格式及延时时间配置而不需要CPU的
参与;
3. QSPI有特殊的FIFO机制将Queue中的数据定向到对应的目标地址中;
然后简述该模块的一些特性,在此之前可以看一下SPI模块的硬件简图,如下图。
该模块的特性如下:
1.支持主从模式,全双工通信;
2.4x32bit Tx和Rx FIFOs;
3.多路片选,每路SPI最多可支持16路片选;
4.支持FIFO的单点中断模式、 ERR中断、 PT的(EOF)中断;
5.Job为一个基本的报文帧传输,包含一个或多个Channel的选择及片选、波特率、延时时间、校验等(ExternalDevice)的设置,Sequence为一个基本的SPI收发操作对象,包含一个或多个Job。
5.灵活的真报文长度以及帧格式、时间设置;数据传输分为Short Data模式、Long Data模式、Continuous模式、XXL Frame模式等。
Short Data模式下,数据长度范围为2~32bit,一帧数据传输需要一个BACON配置和一个DATA配置;
Long Data模式下,数据长度依然为2~32byte,一帧数据传输需要一个BACON配置和多个DATA配置;
Continuous模式又分为Short和Long两种,Short模式下,第一个BACON配置的LAST为0,之后写入的数据均为传输数据,直至写入的BACON.LAST为1,写入最后一帧数据。Long模式下,第一个BACON.LAST为0,之后按照BACON.DL写入N个传输数据,后面的操作就类似Short模式,直至写入的BACON.LAST为1,写入最后的一帧数据。
XXL FRAME模式是一种扩展的Long Data模式,数据长度最长可达65536byte,数据长度通过XXLCON.XDL来设置,而不是BACON.DL,并且无需重复配置BACON。
Move Counter模式是一种Short Data的扩展模式,数据长度可达8192bit,通过MCCON.MCEN使能,数据长度通过MC.MCOUNT设置。
02.
QSPI模块的时钟
QSPI模块的时钟输入有两个,分别为Fspb和Fper,其中Fspb用于QAPI模块用户接口以及寄存器操作的时钟源,Fper用于波特率产生的时钟源,如下图所示。
波特率的计算如下图所示。
除上述之外,QSPI 提供了硬件的idle, leading和 trailing 延时设置以及数据采样点的设置,如下图所示。
03.
QSPI模块MCAL API接口简介
通常来说,当前的使用英飞凌的芯片,都是基于购买的MCAL进行开发,那对于QSPI模块而言,常用的API有哪些呢?下面来列举一下。
Spi_Init (),初始化QSPI核的相关寄存器、复位全局变量、设置QSPI状态为IDLE。对于多核场景而言,调用此API只会初始化隶属于调用核的SPI,因此在每个含有SPI的核中均需要调用该API。
Spi_DeInit ()用于反初始化SPI驱动程序相关的硬件和全局变量,该API只有在调用过Spi_Init()后并且只有当设备处于空闲状态时才接受处理,与Spi_Init函数类似,不同核上的SPI需要反初始化的话,均需调用该API。
Spi_SetupEB ()用于设置收、发数据缓存及缓存长度。
Spi_WriteIB ()用于拷贝数据到发送缓存。
Spi_ReadIB ()用于将接收到的通道数据从内部缓冲区同步读取到应用程序传递的目标缓冲区。
Spi_SetAsyncMode ()用于设置异步通信的Sequence是中断模式还是轮询模式。
Spi_AsyncTransmit ()/Spi_SyncTransmit ()用于异步传输函数/同步传输函数。
Spi_MainFunction_Handling () 该API用于轮询SPI的相关中断标识。
Spi_GetJobResult/Spi_GetSequenceResult/Spi_GetHWUnitStatus /Spi_GetStatus 查询某Job的最终传输状态/查询某Sequence的最终传输状态/查询某路SPI核的传输状态/查询所有已配置的(包括同步异步) SPI传输状态。
Spi_QspiDmaCallOut ()用于 每个channel传输结束后调用该API, 在此回调期间重新配置该回调通道,并重新触发相应的DMA通道来启动下一个通道传输。
04.
QSPI模块MCAL配置
跟之前的列举的其他模块一样,首先是General模块的配置,包括时钟源,SPI的模式,另外错误检测以及safety检测的关闭或者开启,可根据需求来设置。
第二步则是配置SpiHwConfiguration模块,包括SPI内核的设置以及接收引脚的配置。
第三步则是通道的配置,包括模式,数据长度,传输方向等。
第四步则是波特率,片选通道、开环模式的配置。
第五步则是上述提到的idle/trail等时间参数的设置。
第六步则是Job或者Squence的配置。
第七步则是所有引脚的配置。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !