【Autosar】MCAL - FLS(NXP - S32K14x)

2023-11-11 06:41
文章标签 autosar nxp fls mcal s32k14x

本文主要是介绍【Autosar】MCAL - FLS(NXP - S32K14x),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • MCAL - FLS(NXP - S32K14x)
    • 1. 概述
      • 1.3 内存介绍
      • 1.2 虚拟内存
      • 1.3 任务处理
      • 1.4 Access Code
    • 2. API
    • 3. 配置介绍
      • 3.1 General
        • 3.1.1 FlsConfigSet
        • 3.1.2 FlsGeneral
      • 3.2 FlsSector

MCAL - FLS(NXP - S32K14x)

MCAL - 汇总

  • 配置工具:EB Tresos Studio
  • 芯片类型:S32K146

1. 概述

1.3 内存介绍

Flash组成:Code Falsh(program flash) / Data Flash(FlexNVM)。Data Flash一般用来储存数据,通过配置也可以用作模拟EEPROM的备份。

从下图可以看到,S32K146you 1M的Code Flash和64K的Data Flash:

在这里插入图片描述

从下面的配置表界面可以看到,Fls Physical Sector中已经设定好了32个FLS DATA(2k)和256个FLS CODE(4k)供用户选择:

在这里插入图片描述

1.2 虚拟内存

从配置界面下可以看到,有Fls Physical SectorFls Sector两个配置,分别对应物理内存虚拟内存

在这里插入图片描述

如下图所示,假设用户配置了3个扇区的虚拟内存(每个扇区大小4K),用户在配置的时候将虚拟内存对应到物理内存,在软件操作的时候,用户都是面向虚拟内存,FLS模块底层会根据配置信息将虚拟内存对应到实际的物理内存。

在这里插入图片描述

1.3 任务处理

FLS所有的提交任务都是以异步的方式处理的,它的原理就是通过Fls_MainFunction函数轮询当前的任务状态,当有任务时就去处理,处理完成后触发回调函数。Fls_MainFunction就是一个状态机,Fls_EraseFls_WriteFls_Read等函数都是用来提交任务,将当前需要处理的数据的信息(起始地址、大小、读/写等)"提交"后(公共变量复制),由Fls_MainFunction去处理。(当前任务处理未完成的情况下,新的任务不能提交)。FLS回调函数没有参数,上层用户无法通过回调获取当前执行的任务信息,所以用户需要自己保存任务信息,当FLS触发回调之后,再根据信息去处理接下去的任务。

按照这种异步的设计方式,上层用户使用FLS的时候有两种方式:

  • 上层提交任务后,通过FLS的完成回调函数通知上层,上层再根据本地保存信息处理后续任务。
  • 上层提交任务后,通过轮询的方式查看FLS的状态来判断是否完成任务。

1.4 Access Code

Access Code是一段专门用于擦/写操作的代码,这部分代码独立在Fls_Ac.c中。由于不规范的Flash操作可能会导致RWW(Read while write)问题出现,RWW问题意思就是在同一时刻对同分区内存既又(擦/写),这里的不是指用户从内存读数据,而是MCU从内存中取指令。由于硬件(flash访问接口)的原因,假设你的代码运行在FLASH - A中,在这期间你是不能执行(写/擦)操作的,但是你可以去(擦/写)FLASH- B。因此FLS模块的设计包含将AC代码搬移到其他区执行的功能(用户根据自己的内存分配来决定是否开启该功能)。下图为不同分区内存之间允许同时进行的操作描述图:

在这里插入图片描述
S32k146的内存分区如下所示(此图没有画出P-RAM),从下图我们可以看到,Code Flash有2个分区,每个分区512k,Data Flash是一个分区,FlexRam是一个分区,P-RAM是一个分区。

例 - 1:程序设计将数据保存在Data Flash中,(擦 / 写)代码运行在Code Flash中,那么不需要开启AC搬移的功能,因为这是两个不同的分区。

例 - 2:程序设计将数据保存在Code Flash中,恰好与(擦 / 写)代码所处于同一分区,那么此时要开启AC搬移功能,先将AC搬移到指定的内存(其他分区)中再执行。

在这里插入图片描述

2. API

函数描述
Fls_Init初始化FLS模块
Fls_Erase擦除内存数据
Fls_Write写入内存数据
Fls_Read读取内存数据
Fls_Cancel取消当前操作
Fls_GetStatus获取当前工作状态
Fls_GetJobResult获取任务执行结果
Fls_Compare数据比较
Fls_SetMode设置工作模式
Fls_MainFunction任务处理函数(状态机)

3. 配置介绍

3.1 General

3.1.1 FlsConfigSet

在这里插入图片描述
Fls Access Code Erase:RAM地址

Fls Access Code Write:RAM地址

AC code加载地址,当Fls Load Access Code On Job Start 开启时需要关注

Fls Access Code Erase Pointer:NULL_PTR

Fls Access Code Write Pointer:NULL_PTR

除非用户要自己实现擦/写函数,如果自己实现,并且开启AC搬移,需注意代码的地址无关

Fls Default Mode:FLASH初始运行模式

Fls AC Callback:Access Code回调函数

Fls Job End Notification:任务执行完成回调

Fls Job Error Notification:任务执行错误回调

Fls Start Flash Access Notification:AC代码执行前回调

Fls Finished Flash Access Notification:AC代码执行后回调

在这里插入图片描述

Fls Max Read FastMode:快速模式下单次数据读取最大长度

Fls Max Read Normal Mode:普通模式下单次数据读取最大长度

读取数据,不要超过FLASH大小

Fls Max Write Fast Mode:快速模式下单次数据写入最大长度

Fls Max Write Normal Mode:普通模式下单次数据写入最大长度

数据写入,必须大于0且是8的倍数

在这里插入图片描述

3.1.2 FlsGeneral

在这里插入图片描述

Fls Load Access Code On Job Start:AC代码搬移

当未开启的时候,配置项中(擦/写)函数直接引用AC函数,存放的是函数地址,如下图所示:

在这里插入图片描述

当开启的时候,配置项中存放的是用户配置的RAM地址,在(擦/写)操作开始之前,将ROM中的AC代码搬移到这个RAM地址中去,如下图所示:

在这里插入图片描述

因此用户需要合理的指定RAM的地址,并且将AC代码固定到指定的地址,这样才能进行数据搬移。AC代码固定到指定的地址,S32DS就去改写ld文件,IAR就去改写icf文件等。

注意:开启了该选项后,在程序和擦除地址在同一分区的情况下,(擦/写)模式不能配置为异步操作,必须是同步操作。

3.2 FlsSector

在这里插入图片描述

Fls Physical Sector Unlock:在初始化的时候对扇区解锁

Fls Physical Sector:物理扇区选择

Fls Physical Sector Size:物理扇区大小

Fls Number Of Sector:仅针对于外部Flash描述相同且连续的扇区,内部FLASH只能填1

Fls Page Size:扇区页大小

Fls Sector Size:扇区大小

Fls Sector Start Address:扇区起始位置

Fls Sector Erase Asynch:擦除(异步模式)

Fls Page Write Asynch:写入(异步模式)

异步模式:擦/写动作执行完成后,不是阻塞等待结果,通过Fls_MainFunction轮询查询结果


参考资料:

S32K-RM.pdf - NXP

AUTOSAR_MCAL_FLS_UM[1].pdf - NXP

这篇关于【Autosar】MCAL - FLS(NXP - S32K14x)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388228

相关文章

基于Hypervisor智能驾舱的AUTOSAR解决方案

MENTOR嵌入式管理程序 目前,通常使用两种类型的管理程序(图6): Type 1本机管理程序:一种在硬件上本机运行的管理程序,因为它充当核心中的操作系统。Type 2托管虚拟机监控程序:此类型的虚拟机监控程序必须由另一个操作系统托管,并且仅负责使用主机操作系统可用的资源来虚拟化客户操作系统。 图6:虚拟机管理程序 虚拟化的工作原理是从硬件上运行的应用程序中抽象出物理硬件和设备。虚拟化流程管理

Autosar(Davinci) --- 创建一个S/R类型的port(下)

前言:         前面章节我们讲解了S/R类型的Port如何创建,这一章节,我们着重讲一下生成的代码,以及我们如何添加代码让这些门与灯之间的关系产生连接。 一、CtSaDoor.c 在【Rte.c】的【IO_TASK】中我们可以看到,反复的判断Rte_Ev_Cyclic_IO_Task_0_200ms这个条件是否成立,当200ms到达时,调用RCtSaDoorReadDoor函数,去读

NXP,S32K1XX汽车通用微控制器开发笔记

文章目录 1. 概述2. 开发环境配置2.1 S32 Design Studio2.2 安装SDK2.3 新建demo工程2.4 字体配置2.5 按需求修改demo2.5.1 修改pin脚定义2.5.2 增加串口打印功能 2.6 编译代码2.7 debuger 配置 参考 1. 概述 S32K1系列32位微控制器(MCU)提供基于Arm® Cortex®-M的MCU,以及基

NXP S32DS IDE设置背景护眼色

NXP的S32DS是基于eclipse开发的,因此可以搜eclipse的一些配置,基本上可以设置。

AUTOSAR Adaptive与智能汽车E/E架构发展趋势

AUTOSAR Adaptive是一个面向现代汽车应用需求的标准,特别适用于那些需要高计算能力和灵活性的应用。以下是AUTOSAR Adaptive的典型特性: 高计算能力:AUTOSAR Adaptive支持使用MPU(微处理器),这些处理器的性能与PC或智能手机中的处理器相当。这样的高计算能力是实现半自动驾驶和其他复杂功能所必需的。动态更新和管理:AUTOSAR Adaptive的架构允

LIN协议栈 AUTOSAR架构下 状态管理

一、LIN State Manager 概述 功能 :负责控制 LIN 总线的通信状态,包括切换调度表(仅 LIN 主节点)、处理睡眠和唤醒操作、通知上层新状态等。约束 :每个 ECU 中最多有一个实例;所有关于调度表的操作仅适用于 LIN 主节点;适用于所有使用 LIN 的汽车领域。依赖关系 :依赖于 Communication Manager(ComM)和 LIN Interface(Lin

Autosar OS基础知识导图

Autosar OS基础 概述 Autosar简介 定义 Autosar(汽车开放系统架构)是由汽车制造商,软件供应商及其他相关厂商专为汽车软件合作指定的规范、标准、架构。 目标 建立一个独立于硬件的分层软件架构‌:‌实现高内聚、‌低耦合,‌提高软件的可重用性、‌可扩展性和互操作性。为应用实施提供一套方法论‌:‌包括制定无缝的软件架构堆叠流程,‌并将应用软件无缝整合至ECU中。制定统一的车

AUTOSAR开源OS——Trampoline的编译与使用(一)

环境准备 本人环境 CentOS7 代码下载 GitHub上去clone对应的代码到本地 git clone https://github.com/TrampolineRTOS/trampoline.git 编译goil 进入到如下目录/trampoline/goil/makefile-unix cd /trampoline/goil/makefile-unix 使用如下命令

【MCAL】TC397+EB-tresos之SPI配置实战 - (同步/异步)

本篇文章首先从理论讲起,从AUTOSAR规范以及MCAL手册两个不同角度(前者偏理论,后者偏实践)介绍了SPI模块的背景概念与理论,帮助读者在实际配置之前能有个理论的框架。然后详细的介绍了在TC397平台使用EB tresos对SPI驱动模块进行配置与调试的实战过程,帮助第一次接触这个模块的读者能够更快的上手来实现符合自己项目要求的开发工作,完成SPI通信。文章分别从同步和异步两种方式介绍了配置

AUTOSAR_EXP_ARAComAPI的5章笔记(1)

5.1 High Level API Structure ara::com提供了一个支持AUTOSAR服务模型的API。服务有Method、Event、Filed和Trigger。 Method:在服务应用程序中执行一个可以返回值的函数(如校准方法)。 Event:当特定条件发生时(例如制动事件),服务应用程序发送一个事件(也可能包括一个值)。客户端应用程序可以订阅事件。 Filed:在