MC9S12XE的模拟EEPROM综述

2019-04-15 14:34发布

class="markdown_views prism-atom-one-light"> 嵌入式开发中常有存储一些下电后不丢失的数据的需求,RAM访问起来很方便,但是下电后数据会丢失,而MC9S12XE提供了D-Flash和EEPROM用于存储非易失性数据。之前一直只是知道这个东西,但是一直都是看着prm中的这个地址范围干瞪眼,不知道怎么用,正好官方文档上有讲这个,赶快下下来学习学习。 翻译的资料是公开的,在这里下载https://www.nxp.com/products/microcontrollers-and-processors/additional-processors-and-mcus/8-16-bit-mcus/16-bit-s12-and-s12x-mcus/ultra-reliable-s12xe-high-performance-automotive-and-industrial-microcontrollers:S12XE?tab=Documentation_Tab,我想应该不会有什么版权问题,如涉及版权问题,请联系我删除文章。另感谢NXP提供的学习资料。

Overview of the MC9S12XE Emulated EEPROM

by: Martyn Gallop
East Kilbride, Scotland 译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条。此为官方文档AN3490,仅供学习交流使用,请勿用于商业用途。

介绍

MC9S12XEP100是S12X微控制器家族中第一个用上低能耗0.18μ技术的。这个文档介绍了S12XE对于一个新的、具有高度灵活性和扩展性的模拟EEPROM(EEE)架构的支持。 由于FTM存储控制器提供的高度的整合,访问与更新EEE中的数据就好似使用一个NVRAM。在配置了它之后,应用程序就可以像访问普通RAM那样访问动态的NVM数据了,但这个数据可是下电不丢失的哦。

目标

这篇文档的目标是详述可以怎么使用存储控制器命令来配置和使用EEE。其中还综述了EEE的实现以及应用应该考虑的一些东西。

综述

S12XE EEE可以大大减少典型的用软件管理EEPROM的开销。
有以下特性:
  • 一个专用的RAM缓存,其会在重置时自动被初始化,应用程序会把它看做一个虚拟的NVRAM — 不需要为EEPROM数据配一个独立的RAM镜像。
  • 当缓存RAM内容被修改时自动地编程NVM。
  • (相比于之前的EEPROM技术)更高的 写入/擦除 性能— 通过更高的NVM转数据数据率和使用wear leveling算法。
  • 对NVM数据的硬件ECC支持。
和典型的软件驱动一样,EEE支持让应用程序
  • 在任何时刻读/写EEE数据
  • 停止编程操作
    • 进行中的EEE写入可以暂停
    • 存储控制器可以进入空闲状态
  • 确定是否还挂起着编程操作。
EEE架构
图 1.EEE架构 作为16位S12X家族的一员,EEE是针对 字对齐数据(16位) 优化设计的,之前的S12X设备的EEPROM也是基于 字对齐数据 的。RAM和flash EEE资源都是按照字组织的。 字节数据也被EEE无缝地管理。使用字节数据与使用字对齐数据对于NVM来说开销是一样的,所以在EEE NVM存储器中使用字节数据的效率不是很高。 字不对齐数据也由EEE清晰地管理;然而并不推荐这样用,因为这会占用更多EEE NVM时钟周期并且有数据损坏的风险,当在所有EEE数据被成功编程进EEE NVM之前发生了设备重置或者下电的话数据就有可能损坏。还有许多对现存的面向字节或面向字的EEPROM方案的考虑。(见 “跨RAM字边界的数据一致性”)

EEE 数据频率

S12XE EEE方案很适合于那些更新频繁的数据。尽管由EEE管理很简单,常量数据(比如那些从不或者极少更新的数据)会有一些其他的考虑,并且可能更适合于直接在模块生成期间或者由应用程序直接编程进flash存储器 — 之后会讨论更多的细节。 为了满足不同的数据需求,EEE资源可以按照实际需要进行配置。
注意:
这篇文档中把那些数值从不改变或者极少改变的数据称为常量数据。不要把这与高级编程语言中的常量数据类型混为一谈(尽管放在EEE中的常量类型数据元素会产生常量EEE数据)。

资源

EEE子系统包含在 flash存储模块(FTM) 中。关键资源是缓存RAM和D-flash(数据flash)块。 EEE资源可以被配置一次,典型地是在ECU模块生产期间(在特殊模式下,EEE可以为了应用开发而被重新划分)。没有被分配给EEE的缓存RAM和D-flash资源仍然可以被应用软件访问。任何分配给EEE的D-flash(EEE NVM分区)都会被自动地保护以防被应用程序不小心损坏。 S12XEP100 EEE内存资源
图 2.S12XEP100 EEE内存资源 EEE资源可以
  • 被应用程序作为SRAM和小扇区flash存储器独立地使用(用户RAM和用户D-flash)
  • 被存储控制器用于支持EEE(EEE RAM和EEE NVM)
  • 混合以上两种使用方式
存储控制器负责协调所有的NVM和EEE动作。

地址记号

这篇文档中的所有地址引用都是用S12X全局地址映射(带有G后缀)。这是23位线性地址格式。

FTM存储控制器

FTM是S12XE上的一个模块,它包含许多P-flash存储块、一个D-flash存储块和一个用于管理它们的存储控制器状态机。FTM可以被当做有三个独立的应用程序接口,每个都有自己的反馈机制(比如,标志位)。 常用命令对象(CCOB)命令
  • 用于编程/擦除P-flash和D-flash及配置EEE
  • 参数位于CCOB寄存器内
  • FTM重置序列(包括EEE拷贝活动)可以被认为是一个隐藏CCOB命令
  • 状态和作物标志位位于FSTAT寄存器内
EEE子系统
  • 用户数据是通过EEE RAM分区来访问的(部分或全部的缓存RAM) — 写入EEE RAM能自动地生成NVM记录。
  • 可以在EEE数据被写入后立刻地读取它
  • EEE记录被存储在EEE NVM分区(部分或全部的D-flash)
  • 可以通过ETAG计数寄存器、FSTAT寄存器中的MGBUSY标志位和EEE查询CCOB命令来监控状态。
  • 错误标志位位于FSTAT和FERSTAT寄存器中
P-flash和D-flash读取
  • 用于读取/验证P-flash和D-flash中的代码和常量数据
  • ECC错误标志位位于FERSTAT寄存器中
  • ECC错误的细节由FECCR寄存器报告

FTM常用命令对象(CCOB)

FTM的初始化要通过向一个被称做常用命令对象(CCOB)的寄存器集合中写入命令信息(典型的包括数据和全局地址信息),包括六个宽度为一个字的寄存器,然后清零FSTAT命令寄存器中的CCIF标志位(CCIF标志位是通过写1来清零的)以发送命令来实现的。 CCOB寄存器组会与存储控制器交换命令和参数信息。 当CCOB命令完成时,CCIF就会被存储控制器置位,FSTAT寄存器内的错误标志位和状态标志位就会指示是否FTM命令被成功地执行。 并没有像0.25μ S12X上那样的命令序列。当启动了一个命令后,在这个命令完成(比如,CCIF标志位被置位)之前是不能写CCOB寄存器的。 在配置或控制EEE时,你必须遵循数据手册中通用的flash命令写入顺序,不管是在应用代码中还是在任何开发工具脚本中。最重要的是,在写CCOB以启动任何命令之前,必须要先等待CCIF标志位置位。还强烈建议你在执行任何命令之后都要检查下错误标志位。CCIF标志位有专用的一个中断向量。FTM命令流可以使用轮询或者中断驱动的方式来实现。 有五种控制EEE运行的CCOB命令
- 完全分区D-flash(Full partition D-flash) — 擦除和配置EEE记录系统(只在特殊模式下可用) - 分区D-flash(Partition D-flash) — 配置EEE记录系统 - 使能EE模拟(Enable EE emulation) — 开启EEE NVM记录编程 - 禁用EE模拟(Disable EE emulation) — 关闭EEE NVM记录编程 - EEE查询(EEE Query) — 报告EEE参数和状态。 - 小心:
在发起任何会涉及到编程或擦除操作的FTM命令之前,必须先配置FTM时钟分频器(FCLKDIV),不然就会生产访问错误(FSTAT寄存器内的ACCERR位被置位)。

D-Flash

D-flash是一个独立的flash块,它带有为存储NVM数据服务的错误校验编码(ECC)。在S12XEP100上,D-flash大小为16K的字。 D-flash
  • 被实现为16位数据 + 6位EEE syndrome
  • 一次性擦除128字
  • 必须总是以字对齐数据来编程,这样才能产生6位ECC。
  • 是面向字对齐数据的
  • 一次可以通过CCOB直接编程1到4个字。
  • 可以由EEE隐藏编程细节
  • 可以灵活的分区以使得一部分被应用程序直接访问,另一部分由EEE使用。

缓存RAM

缓存RAM可以灵活地分区为用户RAM或EEE RAM。用户RAM可以在任何时刻被读写。EEE RAM可以在FTM重置序列结束后的任何时刻被读写。可以通过配置EPROT寄存器来保护部分或全部的EEE RAM免于不小心的修改。缓存RAM可以基于字来访问。 EEE记录系统是基于EEE RAM中的字对齐数据的。向EEE RAM中写入单字节数据会生成与之相关的包含这个字节的字对齐数据的单条记录。在EEE RAM中访问跨越对齐字的边界的多字节数据会透明地涉及跨多个EEE记录的存储。见”跨RAM字边界的数据一致性” 以了解更多关于数据一致性的考虑。 为了优化EEE写入周期,如果写入EEE RAM的数据与原先的数据相同,S12XE会自动地忽略它,从而不会为 字对齐数据 创建新的NVM记录。 在不管什么样的重置后,EEE RAM中的数据会从EEE NVM中初始化。这个拷贝过程的结束是由存储控制器置位CCIF来通知的。如果EEE RAM在复制过程中被应用访问了,CPU就会停止运行直到拷贝过程完成,这时EEE RAM数据就是有效的了(见 “重置释放”)。 EEE有一个隐藏的数据优先级。当有许多挂起的EEE数据时,会从EEE RAM中地址最高的挂起的数据开始把数据编程进EEE NVM(见 “数据写入”)。

配置EEE大小

在可以使用EEE之前,必须先配置它的大小。默认的,新的设备会被完全地擦除,结果就是所有的D-falsh和缓存RAM都会被配置为用户D-flash和用户RAM,没有EEE分区。
注意:
D-flash和P-flash的标准装箱条件是在禁用加密下将其擦除;然而,我们推荐在工厂编程(factory programming)前擦除每个块或扇区,这样就能确保用到全部的数据保持能力。
两个分区D-flash命令(见 “EEE CCOB命令”)之一必须在应用的生命周期内在存储控制器上运行一次以授权EEE使用以上的一些资源。 D-flash是使用CCOB命令来分区的,有两个参数: ERPART = 缓存RAM中给EEE用的128字区块的数量 DFPART = 保留作用户D-flash的128字D-flash扇区的数量 我们在这里使用扇区和区块这两个词是因为,flash扇区是由扇区擦除边界定义的物理入口,而RAM区块只是一个想象的入口。 这是一个定义EEE分区的合理方式。它定义了应用程序要用到的EEE和用户D-flash,然后把剩下的所有D-flash都分配给EEE以尽可能优化EEE写入周期。重置后的拷贝时间有多久主要取决于EEE NVM分区的大小。对于那些不怎么关心最大写入周期而最关心拷贝时间的应用,选择一个较小的EEE NVM以达到较短的拷贝时间可能更有利。 配置参数被存储在D-flash中的一个非易失性信息行中,在ECU生产流程中其必须被配置一次且仅有一次。在开发中,它们可以按照需要被配置。对于每个被用作EEE的缓存RAM区块来说,需要的最小D-flash数量是:
  • (128–DFPART)/ERPART 必须至少为8
  • 如果ERPART == 1,那么(128–DFPART) 必须至少是12
更高的比例能提高写入/擦除的效率。见 “写入周期”。 分区命令会格式化EEE NVM以用于数据记录存储。在分区之后,所有的EEE RAM地址处的数据都被擦除,读出来都是0xFFFF。 在分区之后,任何分配给EEE的D-flash扇区(EEE NVM)都会被自动地保护,以避免被CCOB命令不小心地修改。 在分区时遇到的任何问题都会被FSTAT错误标志位报告(见 “MCU系统考虑”)。EEE 查询命令也可以在任意时刻被用于读取分区配置。这可以被用作分区之后的附加验证,也可以用于应用程序中来检查是否EEE被正确的配置为应用的需求。 应该尽一切努力避免在分区过程中的重置,特别是在应用程序级别的措施,比如确保这时候不会发生外部看门狗超时。 对于在已经开始编程EEE信息后的分区过程中的发生重置的情况,这会被FTM重置序列探测到,并报告为EEE格式故障(见 “重置行为”)。 如果在分区过程中发生了重置(不管是在普通模式还是特殊模式下),EEE配置可以在特殊模式下恢复,通过使用 全分区D-Flash CCOB命令 或通过使用 擦除所有块CCOB命令。

读取和写入EEE

基本的应用程序API

应用程序数据变量可以被直接放在EEE RAM区。 EEE RAM中的内容会以字对齐数据记录的形式备份在EEE NVM中。可以使用 使能和禁用EEE CCOB命令来使能和禁用 EEE NVM数据的编程(见 “使能EE模拟” 和 “禁用EE模拟”)。重置后默认EEE NVM编程是禁用的。 应用程序还要考虑当发生意外下电时,那些横跨EEE RAM字边界的变量元素的数据一致性(见 “跨RAM字边界的数据一致性”)。

读取数据

从应用程序的角度来看,从EEE RAM中读取数据与从设备上的RAM中读取数据没有什么差别(时钟周期可能稍微有点差别)。

写入数据

往EEE RAM中写入数据与往设备上的RAM中写入数据没有什么差别(时钟周期可能稍微有点差别)。 写入EEE RAM(除了那些内容没有改变的字对齐数据)还会递增存储控制器的计数器(ETAG寄存器内)。这个计数器的值表明某一时刻挂起了多少个EEE NVM写入操作。 如果在之前的数据被存储控制器编程入EEE NVM前(可能因为存储控制器没忙得过来或者EEE被禁用了),又有数据写入了同个EEE RAM地址,只会修改RAM的内容,计数器的值不会增加。

存储控制器的EEE活动

数据读取

读取EEE RAM数据不会产生EEE活动。

数据写入

当使能了EEE(比如,已经执行了一个使能EEE命令),存储控制器会由非0的ETAG计数器值触发。它会自动地递减 挂起数据计数值并为EEE RAM中所有挂起的数据中地址最高的那个数据生成新的EEE NVM记录。这个活动不会与后面的CPU写EEE RAM操作产生冲突。 挂起的EEE RAM中的地址最高的数据会首先被编程进EEE NVM中(比如,首先会为地址最接近0x13_FFFF’G的数据创建记录)。如果有需要优先写入EEE NVM的数据的话,将其放在较高的EEE RAM地址那。这个优先级只对挂起的EEE数据有作用,当正在编程较低地址的数据时,即使更高地址的EEE RAM被写入,它也必须等待进行中的那个编程过程完成。 存储控制器CCOB命令,如那些用于编程用户D-falsh的和用于禁用编程EEE NVM的,有比挂起的EEE数据更高的优先级,并且不会和EEE活动产生冲突。
小心:
当EEE子系统正在访问D-flash时,任何 CPU对用户D-flash分区数据的读取都有损坏数据的风险(见 “访问用户D-flash的考虑”)。

监控EEE活动

ETAG寄存器保存着挂起的EEE数据的计数值(EEE RAM中还没有被存储控制器读取的新数据)。写入EEE RAM会自动地递增ETAG值,所以只要里头的值不是0就表明有挂起的EEE数据。ETAG计数值会在每次存储控制器从EEE RAM中读取数据时递减,而不是在成功把数据编程进EEE NVM后,所以即使ETAG的值为0也不代表所有的新EEE数据已经被编程进EEE NVM了。 在任何存储控制器活动期间会置位MGBUSY标志位。当ETAG为0且MGBUSY标志位被清零,则说明所有挂起的EEE数据已经被编程并且所有的CCOB命令已经完成。 代码示例: while((ETAG > 0) || (MGBUSY == 1)){ /* wait for EEE to */ } /* to finish */ 这两个元素,MGBUSY标志位和ETAG计数值,会由存储控制器自动地管理,并且是独立的,不依赖于任何活动的耗时。

重置活动

重置释放

在系统通知了重置事件后,FTM重置序列就会作为MCU重置的一部分被激活。这包括core-hold阶段(CPU不活跃)以及之后的core-active阶段(CPU运行指令)。 FTM重置序列可以被当做一个隐藏的FTM命令,执行时CCOB寄存器被锁定并且在完成时会置位CCIF。在这个序列中
  • FTM在忙,无法执行存储控制器命令
  • EEE RAM不可访问
每个重置阶段都有相关的EEE活动。在core-hold阶段
  • EEE保护(EPROT寄存器)被配置
  • ERPART/DFPART配置被检查以确定是否配置过EEE分区
CPU 内核锁定会在完成时被释放。如果在EEE配置期间探测到了任何错误,可以通过MGSTAT的位来确定是什么问题。 在core-active阶段
  • EEE挂起计数器被清零
  • EEE数据被从NVM EEE拷贝到 RAM EEE
在完成时,CCOB寄存器会被解锁,FSTAT寄存器中的CCIF标志位会被置位,在重置过程中探测到的任何错误也会在对应的MGSTAT位(很可能是ACCERR位)被置位。
小心:
如果CPU在CCIF标志位置位之前访问了任何EEE RAM地址,CPU将会停机直到FTM重置序列结束且RAM数据有效。
小心:
如果在这个序列结束之前企图发起FTM命令,命令会被无视。

重置耗时

重置耗时主要受到EEE拷贝和EEE NVM分区的大小影响。比如,配置所有128 D-flash扇区为EEE NVM并使用一个4MHz晶振并且没有使用IPLL(即总线频率2MHz),则core-active阶段会占用大约100ms。 重置耗时与总线频率成线性相关,使用IPLL可以大大地降低core-active阶段的时间。IPLL模块的典型锁定时间(lock time)大约为200μs;在重置后立刻配置IPLL(比如,在加载栈指针后的C startup例程里的最开始)并尽快选择它为总线时钟可以最小化core-active阶段的时间占用 — 上例(所有D-flash都被配置为EEE NVM)在50MHz总线时钟时耗时可以降低到<5ms。

重置断言

在任何重置的断言(assertion)时,所有的存储控制器活动都会立即停止。任何挂起的EEE RAM数据都会丢失。任何进行中的EEE NVM编程也很可能不完整,新的EEE NVM记录也可能丢失。 在这种情况下,如果挂起的数据没有被成功地编程进EEE NVM中,重置后的EEE RAM值会恢复到最后的那次成功编程进EEE NVM的值,或者,要是这是第一次写入EEE RAM地址,就会恢复到0xFFFF。 如果重置或下电是应用程序故意所为的话,为了不要丢失最后的EEE数据值,EEE应该在断言重置之前被禁用或者被允许完成所有挂起的数据的编程。

记录系统 的格式

EEE分区命令逻辑上地把为EEE分配的物理D-flash扇区设计为一个用环形缓冲区管理的归档系统。

扇区头

每个扇区的起始都有一个包含两个字的头字段,这头字段定义了它的状态和擦除计数。扇区头格式被设计为能:
  • 让所有的状态转换使用单个编程操作来完成
  • 高效地使用D-flash ECC
  • 探测EEE重置条件
  • 基本地追踪扇区擦除计数(高达65534)

数据记录

EEE 数据被连续地存储在EEE NVM扇区内。每个EEE NVM数据记录都包含两个字段:
  • 一个16位的地址标签字段 — 指示与数据相关的EEE RAM字的地址
  • 一个16位的数据字段 — 与EEE RAM地址相关的数据
数据记录会在需要时在下一个有效的EEE NVM记录位置被创建。EEE RAM数据与其在EEE NVM分区内对应的有效数据记录没有任何固定的位置关系。

EEE NVM数据流

数据记录管理流被设计为:
  • 使用单个编程操作来生成记录
  • 高效地使用D-flash ECC
  • 在重置之后探测EEE状态
EEE NVM分区中的每个扇区都处于以下状态之一
  • 包含数据记录
  • 准备完毕(被擦除)
  • 在编程错误或者擦除错误后被标记为无效(并会被EEE流跳过)
以下描述考虑了两个特定的包含数据记录的扇区
  • 数据记录正在被编程的扇区,Active扇区
  • 包含最旧的数据的扇区,Oldest_0扇区
EEE Flash扇区组织结构
图 3.EEE Flash扇区组织结构 新写入EEE RAM的数据会生成新的EEE NVM记录,这记录会按序追加到Active扇区。 会维持4个准备完毕状态的扇区,它们处于被擦除状态。它们会被一个自动的周期性的 拷贝/擦除 进程(数据清理)用作写缓冲区,这个进程会在每个扇区被填满新数据记录后恢复那些包含过时的旧数据记录的扇区。有这4个准备完毕状态的扇区使得错误条件能被清晰地管理。

数据记录循环

Active扇区被填满后,当需要编程下一个记录时: Ready_0 成为 Active扇区
Ready_0+1 成为新的 Ready_0
Ready_0+2 成为新的 Ready_0+1
Ready_0+3 成为新的 Ready_0+2 会启动一个数据清理周期以从Oldest_0数据扇区恢复任何有效的数据记录以释放空间并让它成为新的Ready_0+3扇区。 数据清理周期会自动地创建Oldest_0中有效数据的新拷贝到新的Active扇区中。这样,冗余的Oldest_0被擦除并被配置为新的Ready_0+3(为了维持4个准备完毕状态的扇区)并且Oldest_0+1成为了新的Oldest_0扇区。在获得新的拷贝之前不擦除旧的有效数据是很有效率的方案。 用这种方式,这组准备完毕的扇区随着新数据记录的创建在EEE NVM中不断前移。当碰到EEE NVM中最后一个扇区后,就循环回分区中的首个扇区,以此类推。 这个环形特性有许多的优点:
  • 最大化flash的使用
  • 所有扇区的擦除次数很平均
  • 没有用于无效的旧数据的 写入/擦除 开销
  • 对于EEE活动期间的意外重置,可以很好的恢复
  • 只要有任何变化的数据,所有数据记录都会随着时间的流逝被刷新,这样就减少了对数据持久性的需求。
当发生了无法解决的编程错误或者擦除错误时,这个扇区会被声明无效,并被EEE流抛弃;EEE NVM中随后的循环会自动地跳过这个扇区。这被叫做抛弃的扇区或死区。

记录系统 的状态

在系统重置之后,可以检查FSTAT错误标志位来查看是否发生了EEE重置错误。 可以在重置活动后的任意时刻执行EEE查询命令来评估记录系统的状态。 EEE流中抛弃了大量的扇区的状况被认为是个极端状况,是由于D-flash的使用已经超过了它的运行寿命。如果发生这个情况,就会生成一个错误标志位,表明EEE已经用不下去了。 EEE可以管理的丢弃的EEE NVM扇区的数量被限制为最多24个(或者如果(128–DFPART)<= 28时的最大有效值)。对于更小的EEE NVM配置,允许抛弃的扇区数就更少了。 比如,当ERPART = 3且(128–DFPART) = 24时,允许抛弃的扇区数最多为13个,否则EEE就会产生格式错误。 管理EEE状态的一个更可控的推荐方式是使用EEPROM 模拟查询命令来监控抛弃的扇区数并在超过25%的分配给EEE的扇区损坏时通知系统错误。

EEE CCOB命令

有5个与EEE相关的CCOB命令:
  • 完全分区D-flash(Full partition D-flash) — 擦除和配置EEE记录系统(只在特殊模式下可用)
  • 分区D-flash(Partition D-flash) — 配置EEE记录系统
  • 使能EE模拟(Enable EE emulation) — 开启EEE NVM记录编程
  • 禁用EE模拟(Disable EE emulation) — 关闭EEE NVM记录编程
  • EEE查询(EEE Query) — 报告EEE参数和状态。
注意:
分区D-flash命令 和 EEE查询 命令在xM22E掩码组上不可用。
分区D-flash命令 用于配置分配给EEE的资源和底层格式化EEE(为默认的擦除后的值0xFFFF)。分区存储着EEE配置参数并在每个EEE NVM扇区初始化头字段。 有两个版本的分区命令,一个可以重分区EEE,是用于生产编程阶段和开发的;而另一个只可以分区一个已经被擦除的设备,是为了支持普通模式下的被boot loader程序或者被个由bootloader下载的应用程序初始化配置用的。在应用的生命周期间必须运行分区过程一次以分区EEE/D-flash。
注意:
不支持在普通模式下对EEE重分区。
如果应用程序不需要EEE,设备应该预先配置EEE为0(ERPART = 0,DFPART = 128)以避免在应用程序中意外地对EEE进行了分区。

完全分区D-flash

这不是一个应用程序级别的命令。它只在特殊模式下可用,并且应该在设备首次编程时被执行。 它会擦除所有的D-flash并初始化EEE资源。 对于产品化的设备,只应该运行它一次以根据应用程序定义设备的EEE的大小。 在开发过程中,这命令可以被运行多次。
小心:
这条命令会擦除整个D-flash,所以一定要在使用编程D-flash命令将任何应用程序静态数据编程进D-flash之前先执行这个 完全分区D-flash 命令。

分区D-flash

这是一个应用程序级别的命令,可以在普通模式下执行。它是用于支持串行bootloader和应用程序配置一次EEE的。 它会初始化EEE资源。 应该要运行它一次以配置EEE。 想要它执行成功地话,只有在D-flash分区信息是默认的工厂装箱状态或者设备被用FTM擦除所有块命令大块的擦除后(只在特殊模式下可用) — 比如,当EEE还没有被分区。如果D-flash块没有被完全地擦除,它会产生一个ACCERR标志位。
小心:
这个命令要求D-flash被完全地擦除,所以一定要在使用编程D-flash命令将任何应用程序静态数据直接编程进D-flash之前先分区好D-flash。
注意:
D-flash和P-flash的标准装箱条件是在禁用加密下将其擦除;然而,我们推荐在工厂编程(factory programming)前擦除每个块或扇区,这样就能确保用到全部的数据保持能力。

使能EE模拟

在存储控制器重置过程完成后或者使用禁用EE模拟命令后,EEE应该会处于空闲状态。写入EEE RAM会递增挂起数据的计数,但是存储控制器不会把记录编程进EEE NVM。 在执行完这条命令后,EEE应该会处于活跃状态,会为新的EEE RAM数据生成EEE NVM记录。 这个命令可以在FTM重置活动完成后的任意时刻运行,它:
  • 会处理之前因为重置而抛弃的任何EEE NVM活动。
  • 使得存储控制器能够应答挂起的EEE数据并编程EEE记录到EEE NVM中。
没有用于表明EEE是在使能状态还是禁用状态的标志位。即使已经使能了,再次执行 使能EEE命令 也没什么关系。

禁用EE模拟

使用 禁用EE命令 能确保EEE处于空闲状态。这是重置之后的EEE默认状态。 当命令完成后,EEE应该会在暂停状态。挂起的EEE RAM数据不会产生EEE NVM记录。在使用 禁用EEE命令 后重新执行 使能EEE命令 会使得挂起的EEE RAM数据继续被编程为EEE NVM记录。 禁用命令 可以在FTM重置活动完成后的任意时刻执行。它会阻止挂起的EEE RAM数据产生EEE NVM记录。 没有用于表明EEE是在使能状态还是禁用状态的标志位。即使已经禁用了,再次执行 禁用命令 也没什么关系。

EEE查询

EEE查询命令会向应用程序汇报EEE的许多参数。 这些参数表明EEE资源的配置(比如分区信息)和EEE记录系统的状态。 查询EEE命令 可以在FTM重置活动完成后的任意时刻执行。建议在任意的重置之后执行这个命令,以防有任何EEE错误。 它会按以下五个子部分详述EEE状态信息。

DFPART配置

表明分配给用户D-flash的D-flash扇区的数量。 可以用这个来对比应用程序预期的配置。这个检查的主要目的是确定EEE按照预期的那样分区,并且没有人为错误导致的问题。如果D-flash没有被分区或者分配给了zero EEE的话会返回0xFF。

ERPART配置

表明分配给EEE RAM的128字缓冲RAM区块的数量。 可以用这个来对比应用程序预期的配置。这个检查的主要目的是确定EEE按照预期的那样分区,并且没有人为错误导致的问题。

(当前的Ready_0扇区的)ECOUNT值

报告下一个可用Ready扇区(即Ready_0扇区,见”EEE NVM数据流”)已被擦除过的次数。 EEE查询命令返回的擦除计数典型地反映了EEE NVM中D-flash扇区的磨损程度。随着准备状态的扇区组(随着新数据的写入)在EEE NVM中不断的前移,不同查询命令返回的值一般是不同扇区的。在理想状况下,所有扇区的擦除计数会很接近,在每次横跨EEE NVM分区的循环后递增。每个扇区的ECOUNT值不会溢出,它会在增长到65534的时候停止增长 — 这数字已经超过了D-flash预期的50K次擦除限制了。 但是,如果在重置发生的时候正好在进行着数据清扫周期对扇区的更新操作,扇区的擦除计数有可能会丢失,并在下一个EEE使能命令后被重置为0。然后会重新从0开始增长。这对EEE倒是没有什么影响,因为EEE流并不在乎擦除的次数。 在这种情况下,由EEE查询返回的那些由于重置而损坏擦除计数的扇区的计数值就无法反应EEE NVM的真正磨损程度了。除非能确保EEE活动中不会发生重置,应用程序不应该依赖于查询命令所返回的擦除次数,而是应该进一步检查这个值,比如在每次重置后保留查询返回的值,并将EEE查询返回的值与备份的值进行比对,以防扇区计数被重置了。以及/或者 周期性地运行查询EEE命令并保留对跨多个扇区的最大ECOUNT值的追踪。

当前弃用的(或死的)扇区数

报告被EEE弃用的扇区的数量,也就是那些由于编程操作或者擦除操作失败而被EEE弃用的扇区。 推荐把分配给EEE NVM的总扇区数的25%被弃用作为一个系统错误来报告。比如,当这个数字大于0.25 * (128-DPFART)。见 “记录系统的状态” 以了解更多关于可弃用扇区最大数的细节。

当前准备完毕的(或已擦除的)扇区数

汇报准备完毕的EEE NVM扇区数,能够在 拷贝/擦除 周期中编程进数据的扇区。在大部分条件下,会有三个或四个。最起码会有一个。

数据考虑

跨RAM字边界的数据一致性

由于EEE RAM是以字为基础存入EEE NVM的,需要考虑数据一致性。在EEE RAM中的任何跨字边界的数据元素都会被跨多个记录存储,并且在存储过程中如果发生了重置,有可能会损坏。 比如,一个四字节长的long变量的位于奇地址边界,它会被存储在连续三个独立的EEE NVM记录中。如果第一个数据记录编程成功后,在编程第二个的时候发生了重置,那么这个long变量就出问题了。当前的EEPROM实现并没法发现这个变量出问题了,只能在应用级别进行验证,比如,拷贝多次或使用NVM标志位的方法。 单字节数据元素和字对齐数据元素就不用考虑这个限制了,因为EEE设计时考虑到了它们的数据一致性。
小心:
只包含单字节宽和字宽数据元素的复合高等数据结构应该要排好序以保证所有的字元素对齐偶数地址边界。

使用EEE存放常量数据

数据清扫机制这个特性意味着常量数据的记录也会随着动态数据的刷新被周期性地拷贝。 当需要编程一个新的记录并且所有在最旧扇区内的记录都是有效的数据(比如,因为它是常量数据,这个数据没有更新的记录),那么整个扇区都会被拷贝却没有释放任何空间。 因此,大量的常量数据会导致在数据清扫周期拷贝和擦除许多扇区,导致相对久的清扫周期。 如果在下电时需要保证所有数据已经被保存的话,一定要考虑它。因为常量数据的重复拷贝还会导致写周期的缓慢并会影响应用程序的写入次数。 这对应用程序存取数据的耗时没有影响,但是会影响在下电之前等待所有挂起的数据被编程完毕的最大预期时间。 在这种情况下,你应该直接存储常量数据到P-flash或者用户D-flash中而不是EEE中。

使用D-Flash存放紧急数据

数据清扫行为需要考虑的另一个因素是EEE编程紧急数据到EEE NVM中的延迟。如前所述,在编程新EEE NVM记录时如果需要,会进行数据清扫(拷贝/擦除)周期,并且特别是在有常量数据时,可能不止需要一个连续的周期。这会导致一条EEE NVM记录需要很长的编程时间。 在这个活动进行中,其他新的EEE RAM数据不会被立刻编程进EEE NVM中。但是,可以提交存储控制器命令,可以在连续的数据清扫周期间通过执行 禁用EE模拟命令 暂停EEE。然后紧急数据就可以被编程进P-flash和用户D-flash中了。 即使没有禁用EEE也可以执行编程P-flash或D-flash命令,但这样会与EEE对flash的编程产生争抢而可能导致编程延迟。 当有必须在特定条件下被紧急编程进NVM的数据时,推荐直接把它存进P-flash或用户D-flash中,而不是EEE中。

避免常量数据块

数据清扫周期会拷贝当前最旧的那个扇区中的所有仍然有效的数据到第一个可用的准备完毕扇区中。所有的常量数据记录都会被拷贝,这样就会继续留在扇区中。通过跨记录系统铺展常量数据,可以最小化在一个数据清扫周期中需要连续的数据清扫周期的可能性。 为了这样做,我们需要确保这个数据不被连续的编程进EEE NVM。典型地,在EEE分区后或者在生产编程期间,所有的EEE数据的初始值都将被编程进EEE RAM中。这个初始化数据集对应的EEE NVM记录的顺序可以通过它们写入EEE RAM的顺序来控制。 最简单的方法是适当地交错常量数据记录与动态数据记录。每个EEE NVM扇区有63条数据记录。当初始化EEE数据到EEE RAM时,应该按在以下顺序写入:
  1. 写(% 常量数据 * 63)常量数据字
  2. 写(% 动态数据 * 63)动态数据字
  3. 等待EEE完成编程(在每63字写入序列之后)
  4. 重复步骤1以初始化所有的EEE RAM数据位置
步骤3很重要,因为在循环中连续地写数据到EEE RAM中会导致记录被按照EEE地址优先级被存储,而不是按照他们被写入EEE RAM的顺序。

访问用户D-flash要考虑的

当EEE被激活时,读取D-flash用户分区的行为可能会被EEE访问EEE NVM的活动打断。 为了避免冲突,在读取D-flash数组之前使用禁用EE命令来暂停EEE。或者还可以,检查ETAG值和MGBUSY标志位是否是0(表面存储控制器在空闲状态) — 以确定没有挂起的EEE NVM活动。 当EEE被激活时,对D-flash用户分区的编程是由FTM优先级清晰的管理的。 请考虑在启用EEE前把所有的常量用户D-flash数据拷贝到RAM中。

写入周期

传统上,EEPROM的定价是由写入/擦除周期的次数限制决定的,因为每次写入都需要一次擦除。由于EEE的循环特性,考虑EEE RAM的总有效写入次数是很合理的,当还处于每个EEE NVM D-flash扇区50k次擦除周期内时。 EEE的一个写入周期可以被定义为:会产生一条新的EEE NVM数据记录的对EEE RAM地址的任何写入。 写入EEE RAM的字不对齐数据会产生两条数据记录,这必须每次都被当做两个写入周期。这是要避免字不对齐数据的另一个原因。 EEE实现本质上使用了Wear leveling算法。 因为这是最简单的,大约8:1的EEE NVM:EEE RAM分区比例会导致每个EEE RAM字地址对应大约4个NVM数据记录。 一般情况下,实际的EEE写入周期性能不会是 EEE NVM与EEE RAM分区比例 的一个简单的函数,而是与 用到的EEE RAM字数据与EEE NVM分区的大小的比例 关系更大。比如,如果只使用一个EEE字数据,却使用了16K字的EEE NVM,会导致实际的EEE NVM:EEE RAM为16384:1。 然而,EEE数据大小:EEE NVM分区大小 并不是全部参数。EEE中数据的更新率也是函数的一部分。更新更频繁的数据会比没那么频繁的数据产生更多的EEE NVM记录。 还有,由于记录系统的循环特性,常量EEE数据的EEE NVM记录也会被数据清扫进程周期性地进行拷贝,会导致额外的 写入/擦除 开销。 由于这许多相互关联的参数,根据给定的数据需求来计算写入荷载超出了这篇文档的大纲。然而,可以使用S12XE_EEE_Calculator工具来评估,可以在www.freescale.com的S12XE design tools 页中下载它。 当前的MC9S12XEP100规范中,对于使用D-flash的所有全部16K字只用于EEE RAM中的一个字对齐数据这种情况(EEE NVM:EEE RAM = 16384),保证在汽车温度范围内,最少325百万次写入周期和平均3200百万次写入周期。

MCU系统的考虑

状态标志位组

关于FTM故障探测覆盖率

FTM和EEE子系统上专业的故障探测是为了确保应用能在发生任何故障的时候都能获得通知。这不是因为S12XE flash技术的故障率很高。 起码在发表这篇文章的时候,这个flash的所有测试数据都证明它特别可靠,故障率很低。

EEE 标志位总结

这个部分提供了EEE专用错误报告的总结。如果使用了EEE,推荐启用flash错误中断来处理错误标志位,因为他们中的许多都表明发生了关键的EEE故障。

EEE关键故障标志位

以下标志位要是有任意一个置位了,都说明存在关键的问题。只要置位了一个,就应该认为EEE没法使用。 访问错误(ACCERR)位会被以下置位:
  • 如果在没有定义EEE分区时使用了 使能EEE和弃用EEE命令。
  • 如果调用任意分区D-flash命令时指定了不合理的分区比例。
  • 如果没有定义EEE分区却调用了使能EEE命令
  • 在FTM重置序列中初始化EEE RAM时遇到了错误。
在以下行为会在重置之后置位MGSTAT0和MGSTAT1:
  • 如果EEE分区已经定义了,却调用了分区D-flash命令。
  • 读取EEE分区信息时发生无法恢复的故障 — 这种情况下,EEE会被禁用,ERPART被设为0x0000,DFPART被设为0xFFFF
  • 在读取flash配置字段中的EEE保护字节时探测到了双bit错误 — 这种情况下,EPROT寄存器会加载0x7F,也就是EEE RAM被完全保护。
当在重置之后探测到了MGSTAT位被置位了,考虑使用COP来产生一个系统重置或者使用一个非法访问以重启重置序列。 以下两个标志位报告了关键的运行状况,应该认为EEE子系统运行缓慢。EEE RAM数据可以被继续地读写。在这些位被置位的时候,会阻止编程EEE记录到EEE NVM中。 EEE 错误中断0(ERSVIF0)标志位会被置位,如果
  • 存储控制器无法重新格式化某个EEE NVM扇区
  • 没有可用的准备完毕状态扇区
  • 发生编程或擦除故障的数据扇区已经达到最大限制数量(见”记录系统的状态”)。
EEE 错误中断1(ERSVIF1)标志位会被置位,如果
  • 存储控制器无法改变某个EEE NVM扇区的状态。

EEE警告标志位

以下标志位典型地报告了会导致从EEE流中抛弃一个扇区的状况。EEE可以继续工作,直到抛弃的数量达到极限或者没有可用的准备完毕状态扇区了。 EEE擦除错误中断标志位(ERSERIF)会被置位,如果
  • EEE擦除操作失败。扇区会被EEE抛弃
EEE编程错误中断标志位(PGMERIF)会被置位,如果
  • EEE编程操作失败。扇区会被EEE抛弃
当这两个标志位之一被置位时,可以用 查询EEE命令 来确定当前可用的和抛弃的扇区数并通知系统发生了错误(见 “EEE查询”)

保护违反

这个标志位是EEE的系统等级错误标志,而不是一个EEE子系统标志位。 EEE保护违反标志位(EPVIOLIF)会被置位,如果
  • 有想要写入被EPROT设置保护的EEE RAM区域的行为。写操作会被阻止并且不会影响EEE活动。
EPROT寄存器定义哪块EEE RAM区域受到写保护,它不保护对D-flash的访问。D-flash的EEE NVM区域是被自动保护的。

EEE和D-Flash ECC

单bit错误能自动被ECC校正,这样读取的就是正确的数据。所以EEE不会报告单bit错误。 数据记录上的双bit错误是由EEE管理的。他们不会直接被直接标记为ECC读取错误。 当在编程一条数据记录的任何部分时发生了重置,就有可能发生一个双bit错误。一条记录含有两个16位数据字段和两个ECC syndromes,而重置可能发生在编程它们中的任意一个时发生。EEE重置恢复流会认为带有ECC故障的记录是由于重置而损坏的记录,并清晰地管理它们。 对于由于重置而中断的记录编程,EEE会认为它是在重置之前它还没有被编程进EEE NVM的挂起的EEE RAM那样(而在传统的EEPROM中,如果在编程数据时发生了重置,很可能会发生数据损坏或者数据边际编程)。 当探测到双bit错误时,拷贝进程会认为记录损坏了并直接忽略它。损坏的数据记录中的数据和地址信息都是不可信的,所以无法得知到底是哪个EEE RAM地址的数据损坏了,也无法得知正确的数据值到底是什么。 D-flash编程操作包含一个边际验证(margin verify),因此D-flash的数据可靠性很棒。由于EEE NVM数据被周期性地修改,EEE方案会随着时间刷新所有的数据记录(通过数据清扫机制)。尽管如此,D-flash数据的保留时间还是要考虑的,特别是在有可能长期不使用EEE或者数据循环率特别低的情况下。

低能耗模式

等待模式或者背景调试模式对FTM没有任何作用。 如果MCU正在执行一个停止命令:
  • 任何进行中的CCOB命令会在进入等待模式之前完成。
  • 在启用EEE时,任何挂起的EEE数据仍然会在存储控制器停止活动、系统时钟停止之前被编程进EEE NVM。

时钟的考虑

FTM状态机的时钟来自于系统总线时钟,而底层NVM时钟(用于编程和擦除脉冲)则来自于外部振荡器。 在所有的NVM操作期间,包括所有EEE活动和重置之后的EEE拷贝,使用一个更快的总线时钟可以最小化FTM耗时。 由于S12XE上的IPLL模块并不需要外部组件,可以在任何硬件上启用它。底层(flash硬件)编程和擦除时间不依赖于总线频率;因此,不使用IPLL也不会影响FTM编程和擦除功能,尽管会加长命令执行的时间。IPLL锁频所需要的时间总是比EEE数据拷贝过程短,因此通过在启动代码中,重置并初始化栈指针后,立刻使能和选择IPLL能够大大地加速拷贝过程(见 “重置耗时”)。
小心:
FTM时钟需要振荡器时钟;因此,在快速唤醒或者自时钟(self-clock)模式下,任何需要编程或擦除的FTM操作都是不支持的。
在使用快速唤醒模式时确保不要启用EEE。
在自时钟模式中断例程的一开始就禁用EEE。

调试的考虑

通常来说,对EEE RAM做的那些事情对于调试器应该是透明的(在拷贝活动完成后)。对EEE RAM的读写应该与对系统RAM的读写没有差别,事实上调试器确实可以把它们当成一个东西。 在EEE拷贝过程中通过BDM读取EEE RAM可能读不到有效数据,要等待EEE拷贝完成且CCIF标志位置位之后才行。在EEE拷贝过程中应该避免通过BDM写EEE RAM。其实这不太可能发生,因为尽管调试器可能会在重置之后立刻刷新展示窗口,但它应该不会往EEE RAM中写入数据。 当你要调试任何EEE NVM管理活动时,比如检查ETAG值和MGBUSY标志位,要明白以下方式有助于避免冲突。 存储控制器的运行是独立于CPU和XGATE的,它没有冻结模式,因为如果存储控制器的时钟在flash阵列上为高电压时被停止了,可能会对flash造成损害。对于任何HC12/S12/S12X NVM状态机包括EEPROM编程都是这样的。可以通过在CPU停止同时EEE启用时通过BDM写入EEE RAM来观察到。EEE NVM记录会被编程,并在下电后新的数据仍然会保留。 这个的副作用就是在开发过程中即使你暂停了CPU(通过断点或者单步调试),存储控制器也不会停止,它会继续运行直到编程完了全部挂起的数据。断点时的系统状态,由于调试器需要一段时间来读取,可能与真正的实时状态不一样。比如,如果应用程序中有一个循环测试 ((ETAG > 0) || (MGBUSY == 1)) ,然后你单步调试它,它会在第一次就通过这个测试;然而如果不是用单步测试的话,实际上会循环多次。如果你使用循环来等待CCIF由状态机或一个外部EEPROM置位,对于S12 EEPROM也会是这样的情况。 还要考虑FTM的重置活动。重置CPU为特殊单芯片模式(比如,通过BDM缆)会导致CPU进入BDM active模式而等待BDM的命令。FTM重置序列会在重置之后花费一段时间来完成EEE拷贝。开发工具的活动或者脚本必须在执行重置之后先验证CCIF位被置位,然后再去执行FTM命令或者访问EEE RAM。在第一种情况下,命令会被忽略。第二种情况下,读取的EEE RAM数据直到CCIF标志位置位前都是不可信的。推荐在任何重置之后还要检查下FSTAT寄存器中的错误标志位。

EEE耗时的一些注释

在普通运行下,EEE重置过程完成后,对EEE数据的访问耗时就是对EEE RAM的读或写。重置耗时在”重置耗时”中进行了描述。 在高层,EEE记录编程的耗时是无法预测的,依赖于 拷贝/擦除 机制。正在存储到NVM中的挂起数据的状态只可以由ETAG值和MGBUSY标志位的状态来判断。见 “监控EEE活动”。 在这篇文档发表的时候,每个EEE命令和活动的耗时计算公式可以在S12XE data sheet中找到。EEE耗时取决于 NVM 写入/擦除 和 数据处理 活动。一个参数是固定的,由flash阵列的物理特性以及固定的振荡器时钟频率决定。另一个参数与总线频率成比例,所以在使用EEE时使用尽可能快的总线时钟总是个好事。 在更快的总线时钟下,编程一个字数据记录到EEE NVM中的平均时间会比在0.25μ S12X EEPROM中修改一个字的时间明显的快(在50MHz fbus时,一个NVM记录的平均时间<1ms)。而FTM编程任意独立数据记录的操作的时间则不一定是快点还是慢点,这是由于数据清扫机制(在这里会产生拷贝和擦除的开销)的周期性特性。当存在整个扇区都是常量数据的时候这点就特别明显(对于EEE数据需要在下电之前被写入的场合中,这是首要考虑因素)。对于那些极少或没有扇区包含常量数据的情况,更快的总线速率通常会使在EEE中更新2K字比在传统的EEPROM中快。 如”使用EEE存储常量数据”中所述,碰到一个装满常量数据的EEE NVM扇区会产生额外的拷贝/擦除周期。在50MHz时,每个装满常量数据记录的EEE NVM扇区会让 拷贝/擦除 周期多花费大约38ms。连续的装满常量数据记录的EEE NVM扇区会使这个时间成比例的上升。在启用EEE并修改数据时,这也决定了FTM要延迟多久才能干其他事情。 EEE NVM擦除操作被边沿验证,可能花费 ~5ms到 ~20ms,这取决于扇区之前被擦除过的次数。这意味着EEE数据清扫周期耗时在新的设备上最快,然后随着时间以及EEE NVM擦除次数的增加会渐渐变慢。

词汇表

ACCERR — 存储控制器访问错误标志位。
字对齐(Aligned word) — 处于偶地址上的16位元素。
API — 应用程序编程接口,Application programming interface。
BDM — 背景调试模块,Background debug module。
缓存RAM(Buffer RAM) — 用于EEE的缓存RAM。
字节数据(Byte data) — 8位数据元素。
CCIF — 存储控制器命令完成中断标志位。
CCOB — 存储控制器常用命令对象。当执行FTM命令时的常用寄存器。
常量EEE数据(Constant EEE data) — 从不或者极少被应用程序更新的EEE数据
Core active阶段 — 重置序列中CPU内核在运行的那部分
Core hold阶段 — 重置序列中CPU内核不在运行的那部分
CPU — 中央处理单元,Central processing unit
数据清扫周期(Data clean-up cycle) — EEE D-flash扇区 拷贝/擦除 操作。
D-flash — 被优化用于NVM数据存储的Flash存储器。
DFPART — 分配来给应用程序直接访问的D-flash扇区的数量。
ECC — 错误校正码,Error correction coding。
ECOUNT — EEE D-flash扇区擦除计数。
ECU — 电子控制单元,Electronics control unit。
EEE — 模拟EEPROM子系统
EEE RAM — 分配给EEE的缓存RAM
EEE NVM — 分配给EEE的D-flash
EEE分区(EEE Partition) — EEE资源配置。
ERPART — 分配为EEE RAM的256字节缓存RAM区块的数量。
EEPROM — 电可擦可编程只读存储器,Electrically erasable programmable read-only memory。
EPROT — 存储控制器EEE保护寄存器。
ETAG — 包含挂起的EEE数据计数器的存储控制器寄存器。
FTM — S12XE NVM和存储控制器模块。
FTR — EEE配置flash比RAM比例。
FERSTAT — 存储控制器flash错误状态寄存器。
FSTAT — 存储控制器flash状态寄存器。
IP — 知识产权,Intellectual property。
IPLL — 带内滤波器的锁相环。
MGBUSY — 存储控制器忙标志位。
字不对齐 — 处于奇地址上的16位元素。
NVM — 非易失性存储器,Non-volatile memory。
NVRAM — 非易失性RAM,Non-volatile RAM。
RAM — 随机访问存储器,Random-access memory。
系统RAM(System RAM) — CPU和XGATE数据使用的主RAM。
用户D-flash(User D-flash) — 应用程序直接可用的D-flash扇区。
用户RAM — 没有分配给EEE的缓存RAM
Wear leveling — 一项用于最大化EEE NVM写入/擦除性能的技术。
字数据(Word Data) — 作为16位元素访问的数据。
‘G — S12X全局地址的标记
0x — 十六进制的标记