FlashTest_集成手册
目标
本文档用于指导客户进行FlashTest集成,文档主要包括FlashTest集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。
通过阅读本文档,用户可以了解代码集成过程,ORIENTAIS配置工具的配置过程,以及如何应用配置工具生成的配置文件。由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。
缩写词和术语
缩写词 |
描述 |
ECU |
Electric Control Unit 电气控制单元 |
CRC |
Cyclic Redundancy Check 循环冗余校验 |
MCAL |
Microcontroller Abstraction Layer 单片机抽象层 |
DEM |
Diagnostic Event Manager 诊断事件管理器 |
OS |
Operating System 操作系统 |
ECC |
Error Correction Code 错误校正码 |
术语 |
描述 |
Background test |
后台测试由调度程序周期性 地调用,并且是可中断的。测试被划分到许多计划任务中。 Background test is called periodically by a scheduler, and is interruptible. The test is split up over many scheduled tasks. |
Foreground test |
前台测试通过用户来调用。 Foreground test is called via users call. |
Flash cell |
要寻址的最小实体,在本例中为字节应使用。 Smallest entity to be addressed, in this case bytes shall be used |
Invariable memory |
不变存储器可以是PFlash、 PSRAM、锁定缓存和只读存储器。 Invariable memory can be program flash, program SRAM, locked cache and ROM |
Test block |
定义了要在前台和后台模式下测试的内存区域。 Defined memory area to be tested in foreground and background mode. |
Test interval |
在后台模式下完成一次Flash测试的时间间隔 Interval of a complete Flash test in background mode. |
Test time |
在一个计划任务中定义的部分测试时间。 Time for partial test defined within one scheduled task. |
Signature |
特定内存块内容的唯一计算结果。 Unique calculation result of the content of a specific memory block. |
Memory block |
定义的内存区域。 Defined memory area. |
参考文档
暂无
FlashTest集成
项目交付的内容为:FlashTest源码和ORIENTAIS Configurator配置工具。FlashTest各配置模块的功能介绍,参见表4-1 FlashTest各配置模块介绍。
使用FlashTest源码和配置工具,进行FlashTest的集成的步骤,参见表 4‑2 FlashTest集成的步骤。
模 块名 |
功能 |
Fl ashTest |
内存块测试块配置。 |
步 骤 * |
操作 |
说明 |
1 |
ORIENTAIS Configurator配置工具工 程搭建和FlashTest模块加载 |
若配置工具已经搭建,则 仅需进行FlashTest模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程、Flas hTest源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
注意:FlashTest模块前台测试,为了更好的计算性能依赖硬件的CRC和DMA功能,FlashTest集成之前,用户须确保已经有基础工程,且FlashTest相关的其他协议栈能正常工作。
新建ORIENTAIS Configurator配置工程及模块加载
安装ORIENTAIS Configurator软件后,双击软件图标打开软件。
菜单栏File🡪New🡪Project,新建工程。
图 4‑3新建工程
在弹出的窗口中输入工程名,选择Finish。
在弹出的窗口中选择Yes。
图 4‑5完成新建工程
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 4‑6新建ECU
在弹出的窗口中输入ECU名,然后选择Next。
图 4‑7选择芯片平台
在弹出的窗口中勾选需添加的模块,点击Finish。
图 4‑8完成ECU配置
新建工程如下所示,步骤⑧中添加的模块已经被加入到工程中。
图 4‑9工程列表界面
模块配置及生产代码
模块配置
模块的具体配置,取决于具体的项目需求。配置代码生成
在ORIENTAIS Configurator主界面左方,选择对应的协议栈,单击右键弹出Validate All和Generate All菜单。
图 4‑10代码生成
选择Validate All对本协议栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。
选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。
图 4‑11代码生成提示界面
将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。
功能集成
代码集成
FlashTest代码包括两部分:项目提供的FlashTest源码和ORIENTAIS Configurator配置生成代码。
用户须将FlashTest源码和章节4.2.1生成的源代码添加到集成开发工具的对应文件夹。FlashTest集成的文件结构,见章节5.2.4。
集成注意事项
对于集成过程中,FlashTest特殊要求和用户经常出现的问题,归类总结形成表 4‑3 FlashTest集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。
编 号 * |
类别* |
约束限制 |
** 1** |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。 |
** 2** |
头文件 |
栈代码之后,用户需更新集成开发工具中的头文件路径。
|
** 3** |
初始化 |
FlashTest的初始化API:FlsTst_Init |
** 4** |
周 期函数 |
FlsTst_MainFunction需要被周期性任务函数调用。 |
** 5** |
前 台测试 |
前台测试使用CRC3 2算法依赖硬件CRC和DMA,则需要确保相关驱动程序正常, 中断开启,以及在硬件CRC计算完成的中断函数设置标志。 |
** 6** |
依赖 |
软件依赖
度周期调用FlsTst_MainFunction提供周期后台测试调度。
|
集成示例
本章节向用户展示FlashTest的集成过程。用户可以据此熟悉FlashTest配置工具的配置过程,以及如何应用配置工具生成的配置文件。
本章节先完成基本FlashTest配置,使得工程可以编译通过,并实现FlashTest测试,然后根据具体需求服务进行添加或修改。
注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。
集成目标
通过搭建基础工程,实现FlashTest测试功能。具体测试功能如下:
前台测试 - 在前台实现对所配置的Memory Block用选定的算法进行。测试块参数配置如表5-1:
测 试类型 |
起 始地址 |
测 试长度 |
测 试算法 |
CRC* 地址* |
** 测试使用方法** |
前台测试 |
0x10800 |
0x60000 |
CRC32 |
0xF0010 |
前台测试 |
后台测试 - 在后台实现对所配置的Memory Block分为原子操作,用选定的算法进行异步的细分测试。参数配置如表5-2:
测 试类型 |
起 始地址 |
测试 长度 |
测 试算法 |
CRC* 地址* |
测试使用方法* |
后台测试 |
0x10800 |
0x60000 |
CRC32 |
0xF0010 |
后台测试 |
模块的配置
新建配置工程及模块加载操作,请参考本文档4.1章节。生成代码过程请参考章节4.2。
FlsTstGeneral配置
在此处进行一些功能的开启与禁用,以及配置FlashTest模块的一些常规功能属性。
打开FlsTstGeneral模块配置界面。
FlsTstDevErrorDetect:预处理器开关,以禁用/启用开发时的错误检测。在开发阶段需要开启,在发布时需要关闭。
FlsTstMainFunctionPeriod:FlsTst_MainFunction的调用周期,以秒(s)为单位,通常放在低优先级的任务当中,如100ms任务或1s的任务中。
FlsTstNumberOfTestedCells:配置在后台测试一次任务测试的Flash单元的数量,后台测试的每次执行计算的字节数量由FlsTstNumberOfTestedCells和FlsTstNumberOfTestedCellsAtomic两个配置项共同决定,具体的配置需根据实际的运算时间估算。
FlsTstNumberOfTestedCellsAtomic:定义一个Flash单元的大小,即单次原子操作计算的大小(单位为Bytes)。
FlsTstTestCompletedNotificationSupported:预处理器开关,以禁用/启用回调函数功能。
FlsTstTestIntervalIdEndValue:定义后台测试的测试间隔ID的最大值。后台测试,对配置的顺序对配置的后台测试下所有的memory block完成一次计算,叫做一次测试间隔,每个间隔具有一个ID,每次测试间隔完成后此ID自加1,当这个ID到达配置的最大值时,将会继续从0开始递增。
FlsTstInitECC:预处理器开关,以在初始化函数中禁用/启用硬件ECC报错功能,在硬件不支持测试时,通常不开启。
FlsTstExtendedSafetyMode:预处理器开关,以禁用/启用扩展安全模式,在扩展安全模式下,FlashTest将在初始化和运行过程中执行更多的检测功能。
FlsTstFgndTimeOut:定义前台测试的超时计数值,如执行时间超过配置的超时计数,前台测试将返回错误并退出。一般根据前台测试的时间得出一个经验值。
FlsTstEcucPartitionRef:将Flash测试驱动程序映射到零个或一个ECUC分区,以使驱动程序API在该分区中可用。
配置FlsTstGeneral模块配置界面。FlashTest模块工具默认配置了相关参数供用户做默认生成,用户应根据实际需求,对相关配置项做出修改。
FlsTstConfigSet配置
此处进行FlashTest 待测Memory Block进行配置。FlsTstConfigSet配置页面包含前台测试下的块属性配置和后台测试下的块属性配置,以及回调函数的配置。
打开FlsTstConfigSet模块配置界面。
FlsTstBgnds容器在FlsTstConfigSet配置页面中,用于配置后台测试下的块属性。
FlsTstBgndBlockId:由配置工具自动计算块ID号,默认从0开始,新建一个块,块ID加1。
FlsTstBlockBaseAddress:配置的内存块的起始地址。
FlsTstBlockSize:配置的内存块的长度。
FlsTstSignatureAddress:当前内存块的签名数据存放的起始地址。
FlsTstTestAlgorithm:选择Flash test算法类型。
FlsTstFgnds容器在FlsTstConfigSet配置页面中,用于配置前台测试下的块属性。配置项和FlsTstBgnds相同。
FlsTstTestCompletedNotification:用于配置后台测试完成时的回调函数,该配置项依赖于FlsTstGenerl下FlsTstTestCompletedNotificationSupported配置项,只有在FlsTstTestCompletedNotificationSupported配置为true时,且不为NULL_PTR时,FlsTstTestCompletedNotification才会生成回调函数相关的代码。
配置FlsTstConfigSet相关属性。
用户需关注前台测试和后台测试下的内存块属性,并对FlsTstTestCompletedNotification进行配置。
在FlsTstConfigSet->FlsTstConfigSet->FlsTstBlockBgnds,鼠标点击右键,添加新的Memory Block,添加待测的后台测试内存块,并根据配置参数表填写FlsTstBlockbaseAddress、lststBlockSize、FlsTstSignatureAddress的参数,并选择对应的FlsTstTestAlgorithm。
在FlsTstConfigSet->FlsTstConfigSet->FlsTstBlockFgnds,鼠标点击右键,添加新的Memory Block,添加待测的前台测试内存块,并根据配置参数表填写FlsTstBlockbaseAddress、lststBlockSize、FlsTstSignatureAddress的参数,并选择对应的FlsTstTestAlgorithm。
在FlsTstConfigSet->FlsTstConfigSet容器点击鼠标左键,对FlsTstTestCompletedNotification配置相应的回调函数。
FlsTstConfigurationOfApiServices配置
此处进行FlashTest功能API的配置。打开模块配置界面,根据实际需求对相关API进行配置。
图 5‑4 FlsTstConfigurationOfApiServices配置
FlsTstDemEventParameterRefs配置
选中FlsTstDemEventParameterRefss容器,鼠标右键选择New FlsTstDemEventParameterRefs,新建Dem参数引用。
选择FlsTstDemEventParameterRefs配置界面。
勾选FLSTST_E_FLSTST_FAILURE,并从下拉框中选择对应的Dem配置项。(注:需要DEM模块先配置相关的参数)
源代码集成
项目交付给用户的工程结构如下:
Config目录,这个目录用来存放配置工具生成的配置文件,FlashTest有关的配置文件放在BSW_Config文件夹中。
BSW目录,存放模块相关的源代码。可以看到BSW目录下各个文件夹下是各个模块的源代码。
FlashTest源代码集成步骤如下:
将5.2章节中ORIENTAIS Configurator生成的配置文件复制到BSW_Config文件 夹中。
将项目提供的协议栈源代码文件复制到BSW/Memory/FlsTst文件夹中。
CRC结果存放
以S32K146芯片平台做集成示例,使用S32K14X_MCAL4_2_RTM_1_0_4版本的MCAL开发,因其依赖于硬件的CRC和DMA。如果MCAL版本的变更,有关功能需要重新调试和验证。
在集成时,FlashTest模块需要将CRC等Memory的信息存储在芯片上的固定地址,而在代码的配置阶段,因为本身的代码会引入配置代码,导致当前的CRC值无法确定,配置时只能指定特定的地址,通常只能在代码定版后,对hex文件进行计算,并将CRC结果存放到Hex文件中指定的地址,需要注意CRC值的大小端问题。
在验证时,如果没有计算hex文件的工具或方法,可以使用另一种方式对Flashtest模块进行集成验证,可以通过代码链接的方式将需要写入的信息链接到指定的地址,这种方式需要修改代码的链接文件。
图 5‑9 链接文件修改 划分区域
图 5‑10 链接文件修改 定义段
相关代码定义如下:
const uint8 FlsTst_StoredInfo[] __attribute__ ((section(“.FlsTst_Info “))) =
{
0x5a,0x5a,0x5a,0x5a,
0x00,0x00,0x00,0x01,
0x00,0x01,0x08,0x00,
0x00,0x06,0x00,0x00,
0xBF,0x60,0x10,0xA9
};
其中,
0x5A5A5A5A表示FlashTest存储信息的有效标志;
0x00000001表示当前的Memory Block的个数;
0x00010800表示第一个Memory block的起始地址
0x00060000表示第一个Memory block的计算大小
0xBF6010A9表示第一个Memory block的CRC值。
在链接文件中,需要对FlsTst_Info这个段,做好链接划分并指定地址。编译下载后,FlashTest所需要的信息即存储在芯片的指定位置。在集成FlashTest模块后,因为CRC值尚无法确定,可通过DEBUG的方式,先通过芯片计算出一个正确的CRC值,再用计算的CRC结果来修改FlsTst_StoredInfo中Memory block的CRC值。
FlashTest调度集成
FlashTest调度集成步骤如下:
FlashTest调度集成,需要逐一排查并实现表 4‑3 FlashTest集成约束清单所罗列的问题,以避免集成出现差错。
编译链接代码,将生成的elf文件烧写进芯片。
初始化代码如下:
FlsTst_Init(&FlsTst_Config);应在合适的位置进行初始化。
前台测试代码如下:
TASK(OsTask_Init)
{
Std_ReturnType FlsTstReturn;
FlsTst_TestResultFgndType FgndBlockResult;
FlsTstReturn = FlsTst_StartFgnd(0U);
FgndBlockResult = FlsTst_GetTestResultFgnd();
……
}
前台测试代码需要依赖硬件CRC和DMA,用户需要配置对应的中断函数,并在中断函数中实现对FlashTest计算完成的标志置位,实现代码如下:
void Crcu_AsyncCalculateCrcCompleteNotif()
{
/* Used for FlsTst_StartFgnd */
CrcCompleted = 1U;
}
后台测试代码如下:
FlsTst_MainFunction();应放在周期较大,优先级较低的任务中。
验证结果
验证前台测试
将工程编译通过后,使用调试工具进行调试,当执行FlsTstReturn = FlsTst_StartFgnd ()语句后,FlsTstReturn表示前台测试的执行成功是否成功,再调用FlsTst_GetTestResultFgnd ()获取前台测试的结果,编译下载调试时,在获取结果后打断点,如果计算的CRC值和存储的CRC值一致,测试结果为FLSTST_OK。
验证后台测试
将工程编译通过后,使用调试工具进行调试,周期调用FlsTst_MainFunction(),编译下载仿真时,当后台测试完成时,会调用FlsTst_TestCompletedNotification()回调函数,在回调函数里面再调用FlsTst_GetTestResult()获取结果,可以看见返回测试结果为FLSTST_OK。