AUTOSAR-MCAL--SPI模块详解(二)

发布于 2023-6-6 10:57
浏览
0收藏

前言

MCAL处于AUTOSAR架构的最底层,和具体的芯片强绑定,且不同的芯片使用不同的MCAL配置工具,例如英飞凌芯片系列使用EB配置MCAL,瑞萨芯片系列使用Davince配置MCAL。所以,除了AUTOSAR标准定义好的配置项及标准接口外,不同厂商的MCAL还会有独立于MCAL标准之外的配置,所以MCAL的学习最好是结合具体的工具和芯片来学习。本系列MCAL分享,将基于瑞萨RH850芯片使用Davince配置工具来讲解。

​AUTOSAR-MCAL--MCU模块详解​​​

​AUTOSAR-MCAL--SPI模块详解(一)​

车载外设控制芯片(TLE92108,L9369,9301等高低边驱动)基本都是使用SPI通信。本文为SPI(Serial Peripheral Interface)模块详解篇第二部分,RH850芯片的SPI模块介绍。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

1.Specification of SPI Handler / Driver 4.3.1

https://www.autosar.org/nc/document-search/

2. RH850/U2A-EVA GroupUser’s Manual: Hardware

https://www2.renesas.cn/cn/zh/products/microcontrollers-microprocessors/rh850-automotive-mcus/rh850u2a16-automotive-microcontrollers-features-four-400mhz-cpu-cores-dual-core-lock-step-structure-coming-soon

正文

3.RH850芯片的SPI模块

介绍完AUTOSAR架构下的SPI模块后,如果我们要进行配置实践,就要结合具体的主控制芯片MCU的SPI硬件模块特性以及外设芯片(这里以低边驱动芯片L9301为例)的特性来进行配置。本节将介绍RH850-U2A芯片的SPI模块。

3.1 SPI通道

以RH850-U22A16芯片为例,MCU内部集成了10个SPI Uinit(MSPI0-MSPI9),其中MSPI0-MSPI4每个SPI Unit有8个Channel(也就是片选通道,一个主SPI设备可以外挂8个从设备),MSPI5-MSPI8每个SPI Unit有4个Channel。也就是说RH850-U2A16理论上可以接60个SPI从设备。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.2 SPI时钟源

RH850-U2A16芯片的SPI模块可以选用PCLK和MSPInCLK两个时钟,这两个时钟是在MCAL_MCU模块进行配置,详情请参考AUTOSAR-MCAL--MCU模块详解一文。这里我们假设选用了MSPInCLK时钟,且时钟频率配置为80MHz。后面SPI模块和外设芯片间的SPI时钟配置和数据方位时序配置都基于这个80MHz的时钟源。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.3 SPI中断

每个SPI Unit的每个Channel都可以配置产生4个中断,数据发送中断,数据接收中断,错误中断以及最后一帧结束中断(Last frame end)。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.4 DMA触发

每个SPI Unit的每个通道(Channel)都可以配置使用DMA进行数据传输,需要注意的是,如果一个用于SPI DMA数据传输的触发源被SPI的一个通道选定后就不能用于其他通道了。

比如触发源DMAMSPI0/DMAMSPI1可以用于MSPI0|0或者MSPI0|4,如果我们DMAMSPI0选用了DMAMSPI0/DMAMSPI1,则MSPI0|4就不能使用DMA数据传输了。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.5 SPI数据链路层通信

RH850-U2A16的SPI数据链路层配置非常多而复杂,这里仅仅列出在配置AUTOSAR_SPI模块是需要涉及的知识点,具体的详细说明请参考芯片手册。

3.5.1 SPI主节点模式

1)通过设置MSPInCTL1寄存器的MSPInMSSEL位域等于0来启用主模式。

2)在主模式下,所有的通道都可以被使用。

3)可以为每个通道分别指定串行通信时钟频率和有源芯片选择。

4)通过配置MSPInCFGm3.MSPInPRCSm[1:0] 和MSPInCFGm3.MSPInCDIVm[4:0]这两个寄存器的两个位域可以分配SPI的时钟源MSPInSCK,从而得到我们想要的SPI同学波特率。

5)一个或多个芯片选择信号可以通过MSPInSSELm.MSPInCSRm[7:0]被选择。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

Note: 对于RH850-U2A16 MCU端,一般都配置为Master节点,这里Slaver模式就不在赘述。

3.5.2 SPI帧长度和帧计数

1)MSPIn的通信通过预设的帧长度和帧数来执行。

2)帧长由MSPInCFGm2.MSPInFLENm[7:0]设置,帧计数由MSPInCFSETm设置。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.5.3 SPI片选信号

1) MSPInCS[7:0]位域代表SPIn的8个片选通道激活状态

2) MSPInCSRm[7:0]位域控制SPIn的8个片选通道

3)一个片选一般外接到一个SPI外挂设备上,所以一般情况下某一个时间段只片选一个外部设备(只和一个外部设备通信)。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

4)如果想同时方位多个设备(多个片选信号Active激活),那么一下寄存器的参数值(设置SPI通信时序)必须设置为一样。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.5.4 SPI时序中的时隙配置

1)MSPInSEUPm、MSPInHOLDm的空闲时间、MSPInIDLEm、MSPInINDAm可以分别独立设置MSPInCS的设置时间(Setup time)、保持时间(Hold time)、空闲时间(Hold time)和每个CS的数据间时间(inter-data-time)。

2)通过将MSPInFIDLm设置为1,可以在两个连续的通信之间插入一个空闲时间。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区


AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

Note: 配置不同SPI外挂设备,除了SPI通信波特率不一样外,就是上诉这些时隙时间配置不一样了。

3.5.5 Master模式下SPI时钟极性和数据相位

1) MSPInCKR配置时钟默认状态(Low Level or High Level)

2) MSPInCFGm1. MSPInCPOLm配置时钟极性

3) MSPInCFGm1.MSPInCPHAm配置数据相位

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.5.6 通道优先级

1)MSPInCFGmMSPInPRIOm[2:0]可以为每个通道独立设置优先级。通道优先级可以设置为0到7,0为最高级别,7为最低级别。

2)如果多个通道的优先级设置相同,则最低的中断通道号具有优先级。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

3.5.7 SPI通信波特率

如果我们在AUTOSAR_MCU模块中SPI的时钟配置为80MHz。

AUTOSAR-MCAL--SPI模块详解(二) -汽车开发者社区

MSPInCDIVm = 7

MSPInPRCSm=1

MSPInSCK=80 000000/(4^1 * 7 * 2) = 5714285 Hz

3.6 内存模式

1)MSPI有一个可配置的RAM,可用于缓冲I/O。

2)MSPI RAM由每个通道共享。每个通道都有一个寄存器,用来设置要使用的RAM区域。

3)MSPI有三种内存模式,而MSPI的可配置RAM用于两种内存模式。

4)可以为每个通道设置内存模式。

5)MSPI RAM可以通过CPU/DMA直接访问。

3.6.1 直接内存模式--Direct Memory Mode

1) 在直接访问存储器模式下,通道不使用RAM,通信使用MSPInTXDAm0寄存器传输数据,使用MSPInRXDAm0寄存器接收接收数据。

2) 每个传输和接收都输出中断,通信由CPU/DMA控制。

3.6.2 固定缓冲内存模式--Fixed Buffer Memory Mode

1)在固定的缓冲区内存模式下,通道使用MSPI RAM。使用直接写入MSPI RAM的数据作为传输数据,接收到的数据存储在MSPI RAM中。


2)在开始通信之前,必须写入所有的传输数据。在所有通信完成后,必须读取所有接收数据。

3.6.3 固定缓冲队列内存模式--Fixed FIFO Memory Mode

1)在固定的FIFO内存模式下,通道使用MSPIRAM

2)从CPU/DMA写入到MSPInTXDAm0寄存器的传输数据将自动存储在MSPIRAM中。接收数据自动存储在MSPIRAM中,CPU/DMA可以使用MSPInRXDAm0读取接收到的数据。

3)当MSPInSIZEm[1:0]设置的FIFO级数的一半的缓冲区为空时,输出传输中断;当MSPInSInSIZEm[1:0]设置的FIFO级数的一半的缓冲区充满接收数据时,输出接收中断。

3.7 小结

RH850-U2A16芯片的SPI资源非常丰富配置也非常复杂。在具体使用时需要结合具体的外设芯片的datasheet来具体配置,根据个人使用经验,其中最主要的就是配置SPI时钟及时序配置。下一篇先会介绍具体的一块SPI通信的外设芯片,后面基于RH850芯片及L9301底边驱动的SPI模块将详细介绍SPI的实际配置,请关注本公众号后续的文章。


文章转载自公众号:汽车电子嵌入式


分类
收藏
回复
举报
回复
相关推荐