目录
前言
正文
1.功能简介
2.关键概念
3.功能详解
3.1 Job通用需求
3.2 Read作业处理
3.3 Write作业处理
3.4 Erase作业处理
3.5 Compare作业处理
4.关键API定义
4.1 Eep_Read
4.2 Eep_Write
4.3 Eep_Erase
4.5 Eep_Cancel
4.5 Eep_MainFunction
5.外部EEPROM-M95256分析
5.1 功能特点
5.2 功能描述
5.3 Pin脚定义
5.3 SPI模式
5.4 协议控制和数据保护
5.4.1 协议控制
5.4.2 状态寄存器及数据保护
5.5 产品识别信息(Identification page)
5.6 指令集
5.6.1 Write Enable (WREN)
5.6.2 Write Disable (WRDI)
5.6.3 Read Status Register (RDSR)
5.6.4 Write Status Register (WRSR)
5.6.5 Read from Memory Array (READ)
5.6.6 Write to Memory Array (WRITE)
5.7 SPI时序
6.小结
前言
存储协议栈负责ECU中非易失性数据的存储管理。存储协议栈的分享包括NVM、MemI、Ea、Fea、Eep、Fls模块的详细介绍及代码分析,具体的项目实战请关注本号的后续文章,本篇为EEPROM Driver(Eep)模块详细介绍篇。
正文
1.功能简介
MemIf模提供统一的接口让NVRAM管理器访问几个内存抽象模块(FEE或EA模块)。
图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,然后返回。
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.5 Eep_MainFunction
void Eep_MainFunction(
void
)
Eep_MainFunction函数将执行EEPROM读、写、擦除和比较作业的处理。当一个任务被启动时,Eep的用户应该循环调用Eep_MainFunction函数,直到任务完成。
如果实现和/或底层硬件需要,配置参数EepJobCallCycle应使用用于EEPROM驱动程序的内部计时(截止日期监视、写入和擦除计时等)。
如果没有待处理的任务,函数Eep_MainFunction将返回而不做任何操作。
5.外部EEPROM-M95256分析
5.1 功能特点
. 兼容串行外围接口(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设备标识。此页面还可用于存储敏感的应用程序参数,这些参数稍后可以永久锁定为只读模式。
5.3 Pin脚定义
M95256在硬件设计上一般只使用SPI通信的四个引脚(接到MCU端),其他Pin脚接地或者接电源。Eep模块的软件设计上也就只用考虑通过SPI通信来访问M95256即可。
按上图所示,我们的M95256不使用写保护和Hold的模式。
5.3 SPI模式
M95256支持两种SPI通信模式:
•CPOL=0, CPHA=0
•CPOL=1, CPHA=1
对于这两种模式,输入数据被锁定在串行时钟(C)的上升边缘上,输出数据可以从串行时钟(C)的下降边缘获得。
5.4 协议控制和数据保护
5.4.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.4.2 状态寄存器及数据保护
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)指令写的,前提是状态寄存器不受保护。
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中。
5.5 产品识别信息(Identification page)
M95256-A125和M95256-A145除了提供识别页(64字节)
每秒256比特的记忆。Identification页面包含两个字段:
•设备标识:第一个字节的三个由STMicroelectronics编写,并使用设备标识代码,如表5所示。
•应用参数:设备识别码后的字节用于应用相关数据。
注:如果终端应用不需要读取设备识别码,该字段可以覆盖,用于存储应用特定的数据。在将特定于应用程序的数据写入identify页面之后,整个identify页面应该被永久锁定在Read-only模式中。
5.6 指令集
每个命令由字节(首先传输的是MSBit)组成,由指令字节发起,如表6所示。
如果发送了无效指令(表6中没有包含),设备自动进入等待状态,直到取消选中。
对于内存阵列和识别页的读写命令,地址由两个字节定义,如表7所示。
5.6.1 Write Enable (WREN)
WREN指令必须在写入指令(write, WRSR, WRID或LID)之前由设备解码。
如图5所示,为了向设备发送这条指令,片选信号(S)被驱动为低电平,片选信号(S)输入被驱动为高电平和设置WEL位(状态寄存器位)之后,在串行数据输入(D)上,指令字节的位首先被移到(MSB)。
5.6.2 Write Disable (WRDI)
重置WEL位(在状态寄存器中)的一种方法是向设备发送Write Disable指令。
如图6所示,为了向设备发送这条指令,在串行数据输入(D)上,Chip Select (S)被驱动为低电平,指令字节的位被移到(首先是MSB),之后Chip Select (S)输入被驱动为高电平,WEL位被重置(状态寄存器位)。
如果当前正在进行Write循环,则WRDI指令将被解码并执行,WEL位将被重置为0,而不会对正在进行的Write循环产生影响。
5.6.3 Read Status Register (RDSR)
读取状态寄存器(RDSR)指令用于读取状态寄存器的内容。
如图7所示,为了向设备发送此指令,Chip Select (S)首先被驱动到低电平。在串行数据输入(D)上,指令字节的位首先被移进(MSB first),然后在串行数据输出(Q)上,状态寄存器的内容首先被移出(MSB first)。
如果芯片选择(S)继续被低驱动,状态寄存器的内容不断被移出。
状态寄存器总是可以被读取的,即使写周期(tW)正在进行。
5.6.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循环,则该指令不被接受,也不被执行。
5.6.5 Read from Memory Array (READ)
READ指令用于读取内存的内容。
如图9所示,为了向设备发送此指令,Chip Select (S)首先被驱动到低电平。
在串行数据输入(D)上,指令字节和地址字节的位被先移进(MSB first),然后在串行数据输出(Q)上,寻址数据字节被先移出(MSB first)。第一个寻址的字节可以是任何页面中的任何字节。
如果芯片选择(S)继续被低驱动,内部地址寄存器自动增加,数据的下一个字节被移出。因此,整个内存可以用一条read指令读取。
当到达最高地址时,地址计数器转到零,允许Read循环无限地继续。
当串行数据输出(Q)上的数据位被移出时,通过驱动芯片选择(S)在任何时候终止读取周期。
如果当前正在进行Write循环,则该指令不被接受,也不被执行。
5.6.6 Write to Memory Array (WRITE)
WRITE指令用于向内存中写入新数据。
如图10所示,为了将此指令发送给设备,Chip Select (S)首先被驱动到低电平。然后,在串行数据输入(D)上,指令字节、地址字节和至少一个数据字节的位(首先是MSB)被移位。通过在数据字节边界处驱动芯片选择(S)终止指令。图10显示了一个单字节写入。
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”。
5.7 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实现(返回状态信息)。
. 模块测试