基于MCU TC3xx的SPI驱动的MCAL开发
文章目录
前言
这篇文章以驱动SBC芯片的SPI驱动开发为例子说明SPI MCAL开发的整个流程。
一、软件开发文档
硬件原理图:
UserManual : Infineon-AURIX_TC3xx_Part2-UserManual-v02_00-EN.pdf
DataSheet : Infineon-TC38x-DataSheet-v01_02-EN.pdf
SBC UserManual :网上没有找到链接,我在资源中上传了。
二、和SBC通信SPI硬件配置
根据SPI通信概念及MACL SPI Handler软件规范一文的介绍,我们了解有如下属性需要配置:
- SCLK/MOSI/MISO/CS MCU测端口配置
- clock 频率配置
- clock polarity
- clock phase
- Channel配置:IB/EB, IB/EB大小,SpiDataWidth
- Job
- Sequence
- SPI Level Delivered
- 其他
开发步骤如下:
第一步、查看原理图,确认主从节点及主机端口:
- 从原理图看出,MCU通过P02_4端口连接FS6500的片选信号,从Infineon-TC38x-DataSheet-v01_02-EN.pdf中确认
P02_4对应的时QSPI3的SLSO0端口,功能是Master slave select output。
对应配置硬件端口为QSPI3, Channel0。
第二步、查看从设备SBC FC6500 DataSheet确认从机需求,配置通信属性:
- SPI通信波形如下图
可以获取信息: - channel的SpiDataWidth配置为16;
- CS有效电平为低电平;
- SCLK Idle电平是低电平(CPOL = 0);
- 表示数据采样是在第2个边沿,数据发送在第1个边沿(CPHA = 1);
- 从DataSheet中确认fspi范围为0.5M-8M(实际项目中配置1M,MCU SPI时钟配置50M)。
根据以上确认EB Tresos Channel和ExternalDevice配置选项如下:
这里的SCLK有几个参数我们单独拎出来说明下,
8. SpiIdleTime(TIDLEA,B),SpiTrailingTime,SpiTimeClk2Cs, SpiDelayParams
这个几个参数需要查看Tc3xx UserManual和SBC的DataSheet一起确认。
根据Tc3xx UserManual 37.3.2.1介绍,Sequence包含5 phases(这些phase的长度都是在BACON寄存器中定义的):
idle delay, leading delay, data phase, trailing delay, and an optional wait phase, idle phase 可以均分为idle A和idle B两个相位,在idle A/B之间转换下一次Sequence通信的时钟极性。各个相位在数据传输时序上显示如下:
Sequence phase参数设置需要满足SBC datasheet规范,SBC规范如下:
根据SBC需求:
Idle delay(作者理解,IeadB从时钟极性切换到leading delay,即到CS片选选中结束) = Tsclch > 75ns,所以SpiIdleTime > 150ns;
leading delay(lasts between the active edge of the SLSO and the first shift clock edge,即从片选选中开始,到第一个有效时钟边沿) = Thclcl > 75ns;
trailing delay(starts after the last shift clock period of a data block and is followed either by the deactivating edge of SLSO, or a new data block in continuous mode,即从最后一个时钟结束开始计时,到下一个CS片选切换开始,或者到下一次连续数据发送开始) = Tonncs >500ns;
- SpiBandrateParams
ECONz(z = 0-7)寄存器定义了A,B,C三个参数,采样点总是在相位B和C之间的转换处,并且时钟占空比由相位A和B+C定义。这里定义A,B,C
三个参数主要考虑到时钟设置不对称值时,提高时钟的精度。当设置SpiAutoCalcBaudParams = TRUE时,A,B,C三个参数值由系统分配。
- Job配置如下:
- Sequence配置如下:
以上是SPI配置MCAL的开发。