AUTOSAR存储协议栈-- EEPROM Driver模块介绍

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

前言

存储协议栈负责ECU中非易失性数据的存储管理。存储协议栈的分享包括NVM、MemI、Ea、Fea、Eep、Fls模块的详细介绍及代码分析,具体的项目实战请关注本号的后续文章,本篇为EEPROM Driver(Eep)模块详细介绍篇。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

正文

1.功能简介

MemIf模提供统一的接口让NVRAM管理器访问几个内存抽象模块(FEE或EA模块)。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

图1:存储协议栈分层架构


EEPROM驱动程序提供从EEPROM中读取、写、擦除的服务。它还提供了用于比较EEPROM中的数据块和内存中的数据块的服务(例如RAM)的服务。EEPROM模块提供的服务都是异步的。


内部EEPROM的驱动程序直接访问微控制器硬件,并且位于微控制器抽象层中。外部EEPROM使用和外部设备通信的驱动程序(在大多数情况下是SPI)来访问外部EEPROM设备。它位于ECU抽象层。

2.关键概念

Data block:一个数据块可能包含1..n字节,并在EEPROM驱动程序的API中使用。数据块通过一下信息传递给EEPROM驱动程序:

. EEPROM中的地址偏移

. 指向内存位置的指针

. 数据长度


Data unit:EEPROM中最小的数据实体。这些实体的读/写/删除操作可能会有所不同。

示例: Motorola STAR12

Read: 1 byte

Write: 2 bytes

Erase: 4 bytes


一些外部SPI EEPROM设备提供了不同的访问模式的可能性:

Normal mode:通过SPI与EEPROM设备进行的数据交换是按字节顺序执行的。这允许SPI与其他SPI设备,如外部看门狗等一起协同使用。


Burst mode:通过SPI与EEPROM设备的数据交换按块顺序执行。块的大小取决于EEPROM属性,例如是64字节。由于传输大块,SPI被突发模式的EEPROM访问阻塞。此模式在需要快速读写数据的ECU启动和关闭阶段使用。

3.功能详解

Eep SWS为EEPROM操作定义了异步服务(read/write/erase/compare)。Eep模块不得缓冲作业。Eep模块一次只能接受一个任务(Job)。在作业处理过程中,Eep模块不接受其他作业(Job)。


Eep模块不得缓冲要读取或写入的数据。Eep模块应使用通过API传递的指针所引用的应用程序数据缓冲区。


Eep驱动器应在内部处理数据缓冲区对齐。与其对RAM缓冲区的对齐施加任何要求(因为它们是uint8*),它应该将传递的指针处理为只是字节对齐的。

3.1 Job通用需求

Eep模块应允许配置为中断或轮询控制的作业处理(如果EEPROM硬件支持它)。如果硬件支持并启用了中断控制的作业处理,则位于Eep_Irq.c中的外部中断服务例程应调用一个额外的作业处理函数。


没有硬件中断支持处理的作业(例如读取和比较作业)和超时监督仍然需要Eep_MainFunction函数。


如果底层EEPROM技术要求读地址或长度信息有一定的位置对齐,如果读或比较作业的地址和/或长度参数没有正确对齐,则Eep_MainFunction应在内部补偿这个缺失的对齐,即Eep_MainFunction应对闪存提供字节级读访问,无论硬件施加的任何对齐限制。


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


对于通过SPI驱动外部EEPROM的Eep模块:Eep的配置应使配置参数的值符合正常SPI模式下可读的字节数。


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


对于通过SPI驱动外部EEPROM的Eep模块:Eep的配置应使配置参数EepFastReadBlockSize的值符合在突发(Burst)SPI模式下可读的字节数。

3.2 Read作业处理

Eep模块应该提供两种读模式:

. Normal 模式

. Fast 模式


对于驱动外部EEPROM的Eep模块:如果外部EEPROM不支持突发模式,Eep模块应接受快速读取模式的选择,但行为应与正常模式相同(不关心模式参数)。


在正常EEPROM模式下,Eep模块应在一个作业处理周期内周期性读取EepNormalReadBlockSize参数指定的字节数,直到把把这个作业(Job)的数据读完。


示例:

. EepNormalReadBlockSize = 4

. 要读取的字节数:21

. 所需的作业处理周期数:6个

. 结果读取模式:4-4-4-4-4-1


在快速(Fast)EEPROM模式下,Eep模块应在一个作业处理周期内周期性读取EepFastReadBlockSize参数指定的字节数,直到把把这个作业(Job)的数据读完。


示例:

. EepFastReadBlockSize= 32

. 要读取的字节数:110

. 所需的作业处理周期数:4个

. 结果读取模式:32-32-32-4


当一个读取作业成功完成时,Eep模块应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果配置了Callback函数,Eep模块应调用配置参数EepJobEndNotification中定义的通知函数。


当在读取作业处理过程中检测到错误时,Eep模块应中止作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果配置了Callback函数,Eep模块应调用配置参数EepJobErrorNotification中定义的通知函数。

3.3 Write作业处理

Eep模块只能在一个作业处理周期内向EEPROM硬件写入(和擦除)多个字节。


对于内部的eeprom,通常每次可以编写1个数据字。一些外部EEPROM提供了一个RAM缓冲区(例如页面Page缓冲区),允许在一个步骤中写入多个字节。


Eep模块应提供两种不同的写入模式:

. Normal模式

. Fast模式


对于Eep模块驱动外部EEPROM的情况:如果外部EEPROM不提供突发(Burst)模式,Eep模块应接受快速模式的选择,但行为应与正常模式相同(不注意模式参数)。


在正常的EEPROM模式下,Eep模块应在一个作业处理周期内写入(并擦除)参数EepNormalWriteBlockSize指定的字节数。


示例:

. EepNormalWriteBlockSize = 1

. 要写入的字节数: 4

. 要求的作业处理周期数:4

. 生成的写入模式:1-1-1-1


在快速写入模式下,Eep模块应在一个作业处理周期内写入(和擦除)由参数EepFastWriteBlockSize指定的字节数


. EepFastWriteBlockSize= 15

. 要写入的字节数: 55

. 要求的作业处理周期数:4

. 生成的写入模式:16-16-16-7


如果要写入EEPROM单元的值已经包含在EEPROM单元中,如果Eep模块通过配置参数EepWriteCycleReduction被配置为这样做,那么Eep模块应该跳过该单元的编程。


如果EEPROM硬件没有自动完成这一工作,eeep模块应在写入EEPROM单元之前擦除该单元。


如果要写入的字节数小于可擦除和/或可写数据单元,Eep模块应通过读-修改-写操作来保存受影响的EEPROM单元的数据。


如果给定的参数(EepromAddress和Length)与可擦/可写数据单元不一致,Eep模块应通过读-修改-写操作来保存受影响的EEPROM单元的数据。


在写入数据块时,Eep模块应尽量减少读-修改-写操作的次数。


当一个写作业成功完成时,Eep模块将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果配置了,Eep模块将调用在配置参数EepJobEndNotification中定义的通知。


当写作业处理过程中检测到错误时,Eep模块应中止作业,并将EEPROM状态设置为MEMIF_IDLE,将作业结果设置为MEMIF_JOB_FAILED。如果配置了,Eep模块将调用在配置参数EepJobErrorNotification中定义的通知。


注意:写入EEPROM的数据不会在写入作业处理函数中进行验证。如果一个数据块需要这样做,那么必须在写作业完成后调用compare函数。这优化了写入速度,因为数据验证(回读和写入后比较数据)只在需要的地方进行。

3.4 Erase作业处理

在一个作业处理周期内,EEPROM模块只能擦除EEPROM硬件所支持的字节数。如果EEPROM硬件支持且给定参数(EepromAddress和Length)与可擦除块对齐,则Eep模块应使用块擦除命令。


如果给定的擦除参数(EepromAddress和Length)与可擦除数据单元不一致,Eep模块应通过读-修改-写操作保存受影响的EEPROM单元的内容。


当一次擦除作业成功完成时,Eep模块将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果配置了,Eep模块将调用在配置参数EepJobEndNotification中定义的通知。


当erase作业处理过程中检测到错误时,Eep模块中止作业,设置EEPROM状态为MEMIF_IDLE,设置作业结果为MEMIF_JOB_FAILED。如果配置了,Eep模块将调用在配置参数EepJobErrorNotification中定义的通知。

3.5 Compare作业处理

当比较作业成功完成时,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将被调用。

4.关键API定义

4.1 Eep_Read

Std_ReturnType Eep_Read(

Eep_AddressType EepromAddress,

uint8* DataBufferPtr,

Eep_LengthType Length

)


Eep_Read函数复制给定参数,启动读作业,设置EEPROM状态为MEMIF_BUSY,设置作业结果为MEMIF_JOB_PENDING,然后返回。


在Eep模块的作业处理功能中,读取作业应异步执行。在作业处理过程中,Eep模块从EepromAddress + EEPROM基址读入一个长度为Length的数据块到*DataBufferPtr。

4.2 Eep_Write

Std_ReturnType Eep_Write(

Eep_AddressType EepromAddress,

const uint8* DataBufferPtr,

Eep_LengthType Length

)


Eep_Write函数复制给定参数,启动写作业,设置EEPROM状态为MEMIF_BUSY,设置作业结果为MEMIF_JOB_PENDING,然后返回。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

Eep模块应在其作业处理功能内异步执行写作业。在作业处理过程中,Eep模块将一个长度为Length的数据块从*DataBufferPtr写入EepromAddress+ EEPROM基址。

4.3 Eep_Erase

Std_ReturnType Eep_Erase(

Eep_AddressType EepromAddress,

Eep_LengthType Length

)

Eep_Erase函数复制给定参数,启动erase作业,设置EEPROM状态为MEMIF_BUSY,设置作业结果为MEMIF_JOB_PENDING,然后返回。


Eep模块应该在Eep模块的作业处理功能中异步执行擦除作业。eeep模块应该擦除一个EEPROM块,从EepromAddress +大小为Length的EEPROM基址开始。

4.4 Eep_Compare

Std_ReturnType Eep_Compare(

Eep_AddressType EepromAddress,

const uint8* DataBufferPtr,

Eep_LengthType Length

)


Eep_Compare函数复制给定参数,启动比较作业,设置EEPROM状态为MEMIF_BUSY,设置作业结果为MEMIF_JOB_PENDING,然后返回。


Eep模块应在Eep模块的作业处理功能中异步执行比较作业。在作业处理过程中,Eep模块将大小为Length的EepromAddress + EEPROM基址的EEPROM数据块与相同长度的*DataBufferPtr数据块进行比较。

4.5 Eep_Cancel

void Eep_Cancel(

void

)


Eep_Cancel函数将取消正在进行的EEPROM读、写、擦除或比较作业。Eep_Cancel函数会同步中止正在运行的作业,这样从该函数返回后,上级可以直接请求新的作业。


注意:Eep_Cancel函数在其行为上是同步的,但同时也是异步的。Eep_Cancel函数的任务(即让模块为新的任务请求做好准备)在返回调用者时完成(因此它是同步的),但另一方面,一个擦除任务可能仍然在硬件设备中进行(因此它是异步的。)


Eep_Cancel函数将EEP模块状态设置为MEMIF_IDLE。


如果配置了,Eep_Cancel将调用EepJobErrorNotification中定义的错误通知函数,以便通知调用方作业的取消。


如果作业结果当前为MEMIF_JOB_PENDING值,则Eep_Cancel函数将作业结果设置为MEMIF_JOB_CANCELED。否则作业结果不变。


Eep模块的用户不能在运行Eep_MainFunction()函数时调用Eep_Cancel()函数。


可以通过以下调度配置之一实现:

·可能性1:NVRAM管理器和EEPROM驱动程序的工作功能是同步的(例如,在一个任务中顺序调用)

·可能性2:调用Eep_MainFunction函数的任务不能被其他任务抢占。


注意:当使用Eep_Cancel函数取消正在进行的写或擦除作业时,受影响的EEPROM单元的状态和数据将是未定义的。


只有NVRAM Manager有权使用Eep_Cancel功能。


取消外部EEPROM设备中正在使用Eep_Cancel服务的任何作业可能会使该服务处于阻塞状态。

4.6 Eep_MainFunction

void Eep_MainFunction(

void

)

Eep_MainFunction函数将执行EEPROM读、写、擦除和比较作业的处理。当一个任务被启动时,Eep的用户应该循环调用Eep_MainFunction函数,直到任务完成。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

如果实现和/或底层硬件需要,配置参数EepJobCallCycle应使用用于EEPROM驱动程序的内部计时(截止日期监视、写入和擦除计时等)。


如果没有待处理的任务,函数Eep_MainFunction将返回而不做任何操作。

5.外部EEPROM-M95256分析

5.1 功能特点

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

. 兼容串行外围接口(SPI)总线

. 256K bit(32 Kbyte)大小,64 byte页(Page)大小,按块写保护

. 写周期短,4ms内完成字节写活按页写

. 循环写次数多,25℃下能写4百万次,85℃下能写120万次

5.2 功能描述

该存储器阵列是基于先进的真正的EEPROM技术(电可擦除可编程存储器)。M95256-A125和M95256-A145是字节可变存储器(32768 × 8位),组织为512页64字节,其中数据完整性通过嵌入的错误纠正码逻辑显著提高。


M95256通过一个简单的串行SPI兼容接口访问,运行频率高达20 MHz。


M95256-A125和M95256-A145是256-Kbit串行EEPROM汽车级器件,工作温度高达145°C。它们符合汽车标准AEC-Q100 0级定义的非常高的可靠性水平。


M95256-A125和M95256-A145提供了一个额外的识别页(64字节),其中可以读取ST设备标识。此页面还可用于存储敏感的应用程序参数,这些参数稍后可以永久锁定为只读模式。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.3 Pin脚定义

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

M95256在硬件设计上一般只使用SPI通信的四个引脚(接到MCU端),其他Pin脚接地或者接电源。Eep模块的软件设计上也就只用考虑通过SPI通信来访问M95256即可。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

按上图所示,我们的M95256不使用写保护和Hold的模式。

5.4 SPI模式

M95256支持两种SPI通信模式:

•CPOL=0, CPHA=0

•CPOL=1, CPHA=1

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

对于这两种模式,输入数据被锁定在串行时钟(C)的上升边缘上,输出数据可以从串行时钟(C)的下降边缘获得。

5.5 协议控制和数据保护

5.5.1 协议控制

片选信号(S)输入提供了内置的安全功能,因为片选信号S输入是边缘敏感的和水平敏感的:通电后,直到在片选信号(S)上第一次检测到下降边缘,才选择设备。这确保芯片选择(S)必须在下降之前是高的,以便开始第一次操作。


对于要接受和执行的写命令(Write, WRSR, WRID, LID):

. Write Enable Latch (WEL)位必须由Write Enable (WREN)指令设置

. 在整个命令过程中,片选信号(S)上的下降沿和低状态必须被解码

. 指令、地址和输入数据必须以8位的倍数发送

. 该命令至少包含一个数据字节

. 片选信号(S)必须在数据字节边界之后精确地驱动高

写入命令可以在任何时候被位于字节边界外的片选信号(S)上的上升沿丢弃。


要执行Read命令(Read, RDSR, RDID, rls),设备必须解码:

. 在整个命令过程中,片选信号(S)上有一个下降沿和一个低电平

. 指令和地址为8位(字节)的倍数

从这一步开始,数据位被移出,直到片选信号(S)的上升边缘。

5.5.2 状态寄存器及数据保护

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

WIP bit:

WIP位(Write In Progress)是一个只读标志,表示设备处于就绪/忙碌状态。当一个写命令(Write, WRSR, WRID, LID)已经解码,并且正在进行一个写周期(tW)时,设备处于繁忙状态,WIP位设置为1。当WIP=0时,设备准备解码新命令。


在写周期中,连续读取WIP位可以检测设备何时准备好解码新命令(WIP=0)。


WEL bit:

WEL位(Write Enable Latch)位是一个标志,表示内部Write Enable Latch的状态。当WEL设置为1时,执行写指令(Write, WRSR, WRID, LID);当WEL设置为0时,不执行任何解码的Write指令。


在WREN指令中,WEL位被设置为1。WEL位在以下事件后重置为0:

. Write Disable (WRDI)指令完成

. 写指令(Write, WRSR, WRID, LID)完成,包括写周期时间tW

. Power-up


BP1, BP0 bits:

块保护位(BP1, BP0)是非易失性的。BP1,BP0位定义了被写入指令保护的内存块的大小,这些位是用写状态寄存器(WRSR)指令写的,前提是状态寄存器不受保护。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

SRWD bit and W input signal

状态寄存器写禁用(SRWD)位与写保护引脚(W)信号一起工作。当SRWD位被写为0时,就可能写入状态寄存器,无论引脚写保护(W)是高还是低。


当SRWD位写入1时,必须考虑两种情况,这取决于W输入引脚的状态:

•情况1:如果引脚W被高驱动,可以写入状态寄存器。

•情况2:如果引脚W被低驱动,它不可能写入状态寄存器(WRSR是

因此,SRWD、BP1、BP0位不能改变(BP1、BP0位定义的受保护内存块的大小被冻结)。


案例2可以按任意顺序输入:

•驱动W引脚低后写入SRWD位到1,或

•写入SRWD位到1后驱动销子W降低。

唯一退出情况2的方法是将销子W拉高。

注意:如果W引脚被固定在高位,状态寄存器不能写保护。

设备的保护特性总结在表4中。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.6 产品识别信息(Identification page)

M95256-A125和M95256-A145除了提供识别页(64字节)

每秒256比特的记忆。Identification页面包含两个字段:

•设备标识:第一个字节的三个由STMicroelectronics编写,并使用设备标识代码,如表5所示。

•应用参数:设备识别码后的字节用于应用相关数据。


注:如果终端应用不需要读取设备识别码,该字段可以覆盖,用于存储应用特定的数据。在将特定于应用程序的数据写入identify页面之后,整个identify页面应该被永久锁定在Read-only模式中。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7 指令集

每个命令由字节(首先传输的是MSBit)组成,由指令字节发起,如表6所示。

如果发送了无效指令(表6中没有包含),设备自动进入等待状态,直到取消选中。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

对于内存阵列和识别页的读写命令,地址由两个字节定义,如表7所示。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.1 Write Enable (WREN)

WREN指令必须在写入指令(write, WRSR, WRID或LID)之前由设备解码。

如图5所示,为了向设备发送这条指令,片选信号(S)被驱动为低电平,片选信号(S)输入被驱动为高电平和设置WEL位(状态寄存器位)之后,在串行数据输入(D)上,指令字节的位首先被移到(MSB)。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.2 Write Disable (WRDI)

重置WEL位(在状态寄存器中)的一种方法是向设备发送Write Disable指令。

如图6所示,为了向设备发送这条指令,在串行数据输入(D)上,Chip Select (S)被驱动为低电平,指令字节的位被移到(首先是MSB),之后Chip Select (S)输入被驱动为高电平,WEL位被重置(状态寄存器位)。

如果当前正在进行Write循环,则WRDI指令将被解码并执行,WEL位将被重置为0,而不会对正在进行的Write循环产生影响。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.3 Read Status Register (RDSR)

读取状态寄存器(RDSR)指令用于读取状态寄存器的内容。

如图7所示,为了向设备发送此指令,Chip Select (S)首先被驱动到低电平。在串行数据输入(D)上,指令字节的位首先被移进(MSB first),然后在串行数据输出(Q)上,状态寄存器的内容首先被移出(MSB first)。

如果芯片选择(S)继续被低驱动,状态寄存器的内容不断被移出。

状态寄存器总是可以被读取的,即使写周期(tW)正在进行。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.4 Write Status Register (WRSR)

写状态寄存器(WRSR)指令允许向状态寄存器写入新的值。在接受它之前,必须先执行Write Enable (WREN)指令。

写状态寄存器(WRSR)指令是通过驱动片选信号(S)低电平进入(MSB首先),发送指令代码和串行数据输入(D)上的数据字节,驱动片选信号(S)信号高电平进入。

SRWD和BP1、BP0的内容在WRSRR指令完成后更新,包括写入周期(tW)。

写状态寄存器(WRSR)指令对状态寄存器中的b6、b5、b4、b1和b0位没有影响。

如果当前正在进行Write循环,则该指令不被接受,也不被执行。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.5 Read from Memory Array (READ)

READ指令用于读取内存的内容。

如图9所示,为了向设备发送此指令,Chip Select (S)首先被驱动到低电平。

在串行数据输入(D)上,指令字节和地址字节的位被先移进(MSB first),然后在串行数据输出(Q)上,寻址数据字节被先移出(MSB first)。第一个寻址的字节可以是任何页面中的任何字节。

如果芯片选择(S)继续被低驱动,内部地址寄存器自动增加,数据的下一个字节被移出。因此,整个内存可以用一条read指令读取。

当到达最高地址时,地址计数器转到零,允许Read循环无限地继续。

当串行数据输出(Q)上的数据位被移出时,通过驱动芯片选择(S)在任何时候终止读取周期。

如果当前正在进行Write循环,则该指令不被接受,也不被执行。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.7.6 Write to Memory Array (WRITE)

WRITE指令用于向内存中写入新数据。

如图10所示,为了将此指令发送给设备,Chip Select (S)首先被驱动到低电平。然后,在串行数据输入(D)上,指令字节、地址字节和至少一个数据字节的位(首先是MSB)被移位。通过在数据字节边界处驱动芯片选择(S)终止指令。图10显示了一个单字节写入。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

Page write用于在一个页面内写入几个字节,使用单个内部write循环。


对于Page写入,Chip Select (S)必须保持低电平,如图11所示,以便将下一个数据字节移进来。每当一个新的数据字节被移入时,内部地址计数器的最低有效位就会增加。如果地址计数器超过页面边界(页面大小为64字节),内部地址指针会滚动到将写入下一个数据字节的同一页面的开头。如果接收到超过64字节,则只写入最后64字节。


对于Byte写和Page写,自定时的write周期从Chip Select (S)的上升沿开始,并持续一个周期tW(如表15所示)。

在以下情况下,指令被丢弃,不再执行:

•如果一个写周期已经在进行中

•如果地址页在块保护(BP1和BP0)位保护的区域内

注意: self-timed Write cycle tW在内部以两个连续的序列执行

事件:[Erase addressed byte(s)],后面跟着[[Program addressed byte(s)]。一个被擦除的位被读为“0”,一个被编程的位被读为“1”。

AUTOSAR存储协议栈-- EEPROM Driver模块介绍 -汽车开发者社区

5.8 SPI时序

SPI时序参数用来配置MCU Master端SPI时序,具体配置可以参考<< ​AUTOSAR-MCAL--SPI模块详解(三)​>>一文。

6.小结

1-4小节详细介绍了AUTOSAR架构下EEPROM DRIVER模块的详细设计内容,包括功能需求及标准接口定义。第5小节详细介绍了SPI通信的EEPROM-M95256芯片,主要包括协议控制、指令集及SPI时序。


以上所有的内容介绍都是为我们实现一个AUTOSAR架构下的EEP软件模块做准备。理解了以上内容后,我们要实现一个具体的Eep_SW应该要做以下工作:

. 配置MCAL_SPI模块,包括:更加芯片时序进行SPI时序配置,根据具体实现(命令-CMD、地址-Address、数据-Data)设计Channel、Job、Sequence。

. EEP_SW代码实现,可以参考<<​Autosar架构下的模块详细设计及代码实现--基于配置的编程方法​>>一文,一般包括配置结构体设计、状态结构体设计、Runnable主逻辑实现、控制API实现(缓冲Requests)、状态API实现(返回状态信息)。

. 模块测试


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

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