AUTOSAR-BSW EEPROM模块解读

news2024/11/22 15:43:36

参考文件
AUTOSAR_SWS_EEPROMDriver(4.3.0)
AUTOSAR_SWS_BSWGeneral(4.3.0)

EEPROM Module 文件结构

File structure
如上图所示 EEPROM Module应该主要包含Eep.c,Eep.h,Eep_Cfg.c,Eep_MemMmap.h,Eep_Lcfg.c和Eep_PBcfg.c文件,如果使用了中断则还应该包含Eep_Irq.c文件。
EEPROM Module 会使用一些通用的变量类型存在于Std_Type.h,Dem.h等文件中。

EEPROM Module 功能要求

EEPROM Module 通用的要求

EEPROM 模块应该包括内部Eeprom和外部Eeprom。
EEPROM模块应该包含基本的读、写、擦、比较四个作业,且必须全部异步实现功能。
EEPROM模块同一时间只能执行一个作业且不应该拥有作业的缓存队列等待功能。即同一时间只能存在一个队列,在作业执行中不应该接收其他作业请求。

错误分类

EEPROM模块应该分为=两大类错误,分别是:
1.开发错误:该类错误应该在产品开发阶段被检测到,基本为软件错误,当产品软件完成发布后不应该存在此类错误。
2.产品错误:该类错误为在产品中硬件错误或者软件无法避免的错误

开发错误

应该存在一个预编译的选项使得产品开发过程中可以选择是否检测开发错误
在这里插入图片描述

扩展的产品错误

EEP_E_ERASE_FAILED
EEP_E_WRITE_FAILED
EEP_E_READ_FAILED
EEP_E_READ_FAILED
当作业应该硬件原因失败时应该报告对应的产品错误,而当作业成功时也应该报告PASSED.

错误处理

开发错误应该使用通知函数的方式通知给Det模块,这些错误的出现将会停止正常的执行流程,停止或者重置ECU。

错误检测

API参数错误检测

如果EEPROM 模块使能了默认错误检测的预编译选项,则在执行Eep_Read()Eep_Write(),Eep_Erase()Eep_Compare()函数时,应该检查传入的数据地址是否合法,数据长度是否越界以及数据指针是否为空,同时返回相应的开发错误。如果默认错误检查没有使能,则错误全部返回E_NOT_OK

Eep状态检测

Eep_Read()Eep_Write(),Eep_Erase()Eep_Compare()函数中应该先检测Eep状态是否为空闲状态即MEMIF_IDLE。如果不是空闲状态,开启默认错误检测情况下,应该返回开发错误EEP_E_BUSY or EEP_E_UNINIT。否则返回E_NOT_OK

硬件错误

当遇到硬件错误时应该返回相应的扩展产品错误如下:EEP_E_ERASE_FAILED
EEP_E_WRITE_FAILED
EEP_E_READ_FAILED
EEP_E_READ_FAILED

超时错误

当作业超时时应该上报超时错误EEP_E_TIMEOUT
关于超时时间应该取决于所设定的最小数据单元写入的最大时间和作业需要写入数据单元数。

作业的执行要求

中断要求

在硬件允许的条件下,应该配置预编译指令EepUseInterrupts来配置中断或者轮询模式
如果开启了中断模式,中断函数应该调用一个额外的作业处理函数。
如果硬件不支持中断仍需要处理作业。

SPI要求

对于通过SPI驱动外部EEPROM的Eep模块:
在普通EEPROM模式下,Eep模块应该通过使用配置为正常访问SPI EEPROM的SPI通道来访问外部EEPROM。
对于通过SPI驱动外部EEPROM的Eep模块:
在快速EEPROM模式下,Eep模块应使用配置为突发访问SPI EEPROM的SPI通道访问外部EEPROM。

作业模式

对于读写擦除和比较这四个基本得作业任务,应该有两种模式可以选择,分别是正常模式和快速模式。
在普通模式下,作业应该在一个周期内只执行固定的字节大小,这个字节大小由参数EepNormalWriteBlockSize定义。
例如:
EepNormalWriteBlockSize = 1
Number of bytes to write: 4
Required number of job processing cycles: 4
Resulting write pattern: 1-1-1-1
在快速模式下,作业应该在一个周期内只执行固定的字节大小,这个字节大小由参数EepFastWriteBlockSize定义。
例如:
EepFastWriteBlockSize = 16
Number of bytes to write: 55
Required number of job processing cycles: 4
Resulting write pattern: 16-16-16-7

对于外部EEPROM驱动,如果设备不支持跨快速模式,应该使快速模式的行为与正常模式一致。

作业需求

对于写和擦除作业,应该针对当前block先读取,如果数据与写入数据一致则跳过,如果不一致则执行写入操作。对于写作业不应该在函数内执行检查写入数据的操作,这一步应该仅在需要的时候通过比较作业来确认写入数据是否正确。
当写作业完成时,Eep模块将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果配置了,Eep模块将调用配置参数EepJobEndNotification中定义的通知。
当在写作业处理过程中检测到错误时,Eep模块将中止该作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果配置了,Eep模块将调用配置参数EepJobErrorNotification中定义的通知。
当在比较作业处理过程中检测到被比较的数据区域不相等时,EEPROM驱动程序应中止该作业,设置EEPROM状态为MEMIF_IDLE,作业结果为MEMIF_BLOCK_INCONSISTENT。如果配置,则回调函数
将调用Eep_JobErrorNotification

API详述

预期的接口

强制调用的接口

Dem_SetEventStatus :由sw - c或BSW模块调用,用于向Dem报告监视器状态信息。BSW模块调用Dem_SetEventStatus可以安全地忽略返回值。

可选择的接口

Det_ReportError :用于报告开发错误的服务。

End Job Notification

当作业完成并获得积极结果时,Eep模块将调用配置参数EepJobEndNotification中定义的回调函数
Read finished & OK
Write finished & OK
Erase finished & OK
Compare finished & data blocks are equal
配置参数中定义的回调函数EepJobEndNotification应该在中断级别上被调用。

Error Job Notification

当作业被取消或终止且结果为负时,Eep模块将调用配置参数EepJobErrorNotification中定义的回调函数
Read aborted
Write aborted or failed
Erase aborted or failed
Compare aborted or data blocks are not equal.
配置参数中定义的回调函数EepJobErrorNotification应该在中断级别上被调用。

顺序图解

Initialization

在这里插入图片描述

Read/write/erase/compare

在这里插入图片描述

Cancelation of a running job

在这里插入图片描述

配置参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/631109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像分类模型嵌入flask中开发PythonWeb项目

图像分类模型嵌入flask中开发PythonWeb项目 图像分类是一种常见的计算机视觉任务,它的目的是将输入的图像分配到预定义的类别中,如猫、狗、花等。图像分类模型是一种基于深度学习的模型,它可以利用大量的图像数据来学习图像的特征和类别之间…

华为OD机试之找终点

找终点 题目描述 给定一个正整数数组&#xff0c;设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始&#xff0c;正好走到数组最后一个成员&#xff0c;所使用的最少步骤数。 要求&#xff1a; 第一步必须从第一元素开始&#xff0c;且1<第一步的步长<…

100天精通Golang(基础入门篇)——第3天:Go语言的执行原理及常用命令、编码规范和常用工具

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

java进阶—线程间通信(通俗易懂等待唤醒机制)

今天我们来看一看&#xff0c;线程之间的通信&#xff0c;也就是我们所说的等待唤醒机制 先来看三个关键方法: wait(); 当线程执行这个方法&#xff0c;它就会进入阻塞状态&#xff0c;并且释放同步监视器 notify(); 英文翻译 唤醒&#xff0c;就是说会唤醒wait的线程&…

【 图像分割 2022 ECCV】CP2

【 图像分割 2022 ECCV】CP2 论文题目&#xff1a;CP2: Copy-Paste Contrastive Pretraining for Semantic Segmentation 中文题目&#xff1a;CP2:语义分割的复制粘贴对比预训练 论文链接&#xff1a;https://arxiv.org/abs/2203.11709 论文代码&#xff1a;https://github.co…

Python3+Selenium框架搭建

Webdriver概述 Webdriver (Selenium2&#xff09;是一种用于Web应用程序的自动测试工具&#xff0c; Thoughtworks公司一个强大的基于浏览器的开源自动化测试工具&#xff0c;通常用来编写web应用的自动化测试。 Selenium 是一个用于Web应用程序测试的工具。 Selenium测试直…

异常数据检测 | Python实现支持向量机(SVM)的异常数据检测

文章目录 文章概述模型描述源码分享学习小结参考资料文章概述 SVM通常应用于监督式学习,但OneClassSVM算法可用于将异常检测这样的无监督式学习,它学习一个用于异常检测的决策函数其主要功能将新数据分类为与训练集相似的正常值或不相似的异常值。 模型描述 OneClassSVM的思…

Flink 1.17.0集群搭建

集群角色分配 HostnameIPRolehadoop01192.168.126.132 JobManager TaskManager hadoop02192.168.126.133TaskManagerhadoop03192.168.126.134TaskManager 下载flink安装包 https://archive.apache.org/dist/flink/flink-1.17.0/ 上传至hadoop01并解压&#xff1a; 修改conf/…

微软MFC技术简明介绍

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来看一下微软MFC技术简明介绍 Visual C 与 MFC 微软公司于1992年上半年推出了C/C 7.0 产品时初次向世人介绍了MFC 1.0&#xff0c;这个产品包含了20,000行C原始代码&#xff0c;60个以上的Windows相关类…

【Leetcode】贪心问题合集 | 摆动序列、K次取反最大和、加油站、分发糖果、柠檬水找零、根据身高重建队列、单调递增的数字

贪心问题感觉还是挺不好想的&#xff0c;因为每一题有每一题的策略&#xff0c;感觉只能尽量做过的记住了。 376 摆动序列 注意&#xff1a;是序列&#xff0c;而不是数组。 求最大摆动序列的长度&#xff0c;即求谷 / 峰的个数。 若走势不为一条直线。 起始count 2&…

LED显示屏静电防护指南

LED显示屏是一种电子设备&#xff0c;对静电敏感。静电放电可能会对LED显示屏的电子元件造成损坏&#xff0c;因此需要采取静电防护措施。以下是LED显示屏静电防护的一些建议和指南&#xff1a; 环境控制&#xff1a;在LED显示屏周围创建适宜的环境条件。控制湿度和温度&#x…

Yolov5(tag v7.0)网络结构解读,以yolov5s为例

最近yolov5用的多&#xff0c;发现确实好用&#xff0c;于是较深入学了一下。下面按照训练的流程梳理一下网络的结构&#xff0c;同时也是自己记一下便于后面查阅。 同时&#xff0c;我也查了一些关于yolov5网络结构介绍的资料&#xff0c;发现大多是v5.0&#xff0c;少数v6.0的…

Linux驱动IO篇——阻塞/非阻塞IO

文章目录 非阻塞IO阻塞IO等待队列等待队列变体 非阻塞IO 在应用程序中&#xff0c;使用open函数打开一个/dev目录下的一个设备文件时&#xff0c;默认是以阻塞的方式打开。 所谓阻塞&#xff0c;就是当我们请求的资源不可用时&#xff08;资源被占用&#xff0c;没有数据到达等…

让车载系统与外部系统无缝对接——掌握SOA跨系统通信技术

车载SOA架构原理 车载 SOA&#xff08;Service-Oriented Architecture&#xff0c;面向服务的架构&#xff09;是一种基于服务的体系结构&#xff0c;旨在提高车载电子系统的可维护性、可扩展性和互操作性。它将车载电子系统划分为独立的、可复用的服务单元&#xff0c;这些服…

NodeJS MongoDB⑦

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言Node&MongoDB 第一步 连接数据库 第二步 创建User Mongodb模型 第三步 简单使用 Mongodb命令 第四步 规范使用 Mongodb命令 &#xff08…

爆款视频批量剪辑生成系统源码部署

创建视频 该接口用于创建抖音视频&#xff08;支持话题, 小程序等功能&#xff09;。该接口适用于抖音。 使用限制 抖音的 OAuth API 以https://open.douyin.com/ 开头。挂载小程序请先完成注册开发者平台账号。创建抖音视频后, 会有一个审核过程, 期间只有自己可见。如果发…

docker数据管理与网络通信

一、管理docker容器中数据 管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。 1、 数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻…

leetcode11. 盛最多水的容器(java)

盛最多水的容器 leetcode11. 盛最多水的容器题目描述 解题思路代码演示二叉树专题 leetcode11. 盛最多水的容器 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/container-with-most-water 题目描述 给定一个长度为 n 的…

物联网Lora模块从入门到精通(二) LED灯泡闪烁与呼吸灯

目录 一、前言 二、实践与代码 1.电亮LED1 2.熄灭LED1 3.翻转LED电平 4.LED1与LED2交替闪烁 5.LED1呼吸灯 三、程序代码 一、前言 本篇内容属于新大陆物联网Lora模块开发&#xff0c;使用给定的Lora基础例程&#xff0c;并在其基础上开发完成&#xff0c;并可为其他版本的Lo…

Atcoder Beginner Contest 294

A - Filter AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() {int n;cin>>n;for(int i0;i<n;i){int x;cin>>x;if(x%20)cout<<x<<" ";}return 0; } …