STM32L4 Series self-test library 初探

1.STM32CubeProgrammer使用

使用STM32CubeProgrammer的命令行模式之前,需把STM32_Programmer_CLI.exe的目录添加到环境变量PATH中。

-sl命令:通过添加加载区(段)来修改固件文件,加载区(段)中包含有用户程序计算出的CRC值。

-sl <file_path> <start_address> <end_address> <slice_size>

<file_path>:文件路径(bin、elf、hex或Srec)

<start_address>:闪存起始地址

<end_address>:闪存结束地址     

<slice_size>:每个CRC值对应的数据区块大小

闪存程序存储器分为多个slice,对于每个片段分别计算CRC值并将其置于CRC区域中,CRC区位于闪存末尾。CRC区域中的CRC值根据闪存中用户程序的位置依次放置。

IDE的命令行添加后处理命令:STM32_Programmer_CLI.exe -sl "$PROJ_DIR$\Release\Exe\Project.bin" 0x08000000 0x08040000 0x400

CRC区域的地址和大小确定如下:

CRCs_Area_Size = Flash_Size / Slice_Size * 4 bytes, so 0x40000/0x400*4=1 Kbytes

CRCs_Start_Address = Flash_End_Address - CRCs_Area_Size, so 0x08040000-0x400=0x803FC00

执行此命令,先扩充bin至256KB,每1KB计算一个4bytes CRC值,放在0x803FC00开始的地方。

CRC区域内的CRC范围地址计算如下:

@=CRCs_Start_Address+(UserProg_Start_Address-Flash_Start_Address)/Slice_Size*4 bytes

 

2.X-CUBE-STL self-test libraries

1.ST分别提供了对应的功能安全设计包:

SIL功能安全设计包,针对IEC61508标准,覆盖STM32系列产品。

ASIL功能安全设计包,针对汽车行业的ISO26262标准,支持STM8AF系列MCU。

ClassB功能安全设计包,针对家电应用领域的IEC60335-1/60730-1标准,覆盖STM32和STM8系列产品。

2.使用X-CUBE-STL 自检库,单个STM32最高可以满足SIL2的要求,要达到SIL3系统必须是两颗STM32的1oo2架构,保证当一颗MCU出现故障后,系统还可以正常工作。

3.ST提供的SIL自检库只是实现功能安全所需的安全机制的子集。用户可以将自检库压缩包中的库文件添加到实际工程中,该自检库仅包括对CPU,FLASHSRAM这些与具体应用无关部分的检测。用户还要再根据实际工程的需要,参考安全手册中列出的安全检测机制,自己通过代码实现其他的检测。比如用到了中断或者I2C,而且跟安全功能相关,就要根据安全手册中这两部分的内容,添加额外检测代码。

4.与终端用户的具体应用无关,与编译器无关,与HAL、STD、LL等库无关,与BSP、CMSIS无关。官方使用HAL库,此测试使用LL库进行。

5.The claimed diagnostic coverages of medium (90%) for CPU and RAM tests and high (99%) for ROM test can be confirmed.

6.终端用户必须满足Table 7. Conditions of use for X-CUBE-STL-F4所有条件,因为任何关于诊断能力的声明都是基于此假设。

3.测试项

3.1 CPU

CPU的测试包括以下内容:

• TM1: implements the test of general purpose register

• TM1L: implements a simplified version for the test of general purpose register

• TM2: implements the test of arithmetic functions

• TM3: implements the test of multiplier functions

• TM4: implements the test of control flow instructions

• TM5: implements the test of load/store unit(s)

• TM6: implements the test of shift and rotate functions

• TM7: implements the test of both stack pointers, MSP and PSP

• TM8: implements the test of pipeline functions

• TM9: implements the test of the Arm Cortex M4 DSP functions.

• TM10: implements the test of the FPU register bank. This TM must not be used by the application unless the FPU is activated.

• TM11: implements the test of the FPU functions. This TM must not be used by the application unless the FPU is activated.

TIM1和TIM1L可以任选一项。

另外有两项测试比较特殊:TM8 and interrupts TM11 and specific FPU interrupt。

3.2 Flash

定义了4种Flash区域类型:

Block,连续的4字节(FLASH_BLOCK_SIZE)区域,在STL中固定写死。

Section,连续的1024字节(FLASH_SECTION_SIZE)区域,与物理扇区无关,在STL中固定写死。

Binary(用户程序),编译器提供的连续的一段代码区,往往从段首(每个1024字节区域的开始)开始,但结尾不一定用完一整段,所以需要32位对齐。

Subset,除CRC数值以外的可用连续区域。用户程序可以定义一个或多个Subset,一个subset必须位于Binary区域内,起始地址以32位对齐。当Subset的最后Section是Binary的最后一部分时,该部分可能不完整,用户应用程序必须将Subset的末尾与Binary区域的结束地址对齐。如果一组完整的section被单独测试,Subset的结束地址必须与最后一个测试section的结尾对齐。

Subset size = K * FLASH_SECTION_SIZE+ L * FLASH_BLOCK_SIZE

– K is an integer ≥ 0

– L is an integer < (FLASH_SECTION_SIZE / FLASH_BLOCK_SIZE) – only when the last section of a binary is incomplete

即子集大小为:0或多个1024字节区域 加 总和小于1024字节的若干个4字节区。

计算Flash的N值要参考map文件,要使得EndAddr正好是用户程序的最后地址,否则测试不通过。

Unused ranges:

         From           To      Size

   0x800'8f00   0x803'ffff  0x3'7100

3.3 RAM

定义了3种RAM区域类型:

Block,连续的16字节(RAM_BLOCK_SIZE)区域,与物理扇区无关,在STL中固定写死。

Section,连续的128字节(RAM_SECTION_SIZE)区域,在STL中固定写死。

Subset,32字节整数倍的连续区域,起始地址以32位对齐。Subset的大小不需要是128字节的整数倍,最后一个Subset可以比128字节小。

Subset size = N * RAM_SECTION_SIZE+ 2 * M RAM_BLOCK_SIZE

N is an integer ≥ 0,M is an integer < (RAM_SECTION_SIZE / (2 * RAM_BLOCK_SIZE))

即子集大小为:0或多个128字节区域 加 总和小于128字节的若干个32字节区。

4.诊断时间问题

官方测试条件如下:

Compiled SW configuration with:

– AHB clock set to 80 MHz

– Flash latency set to 4 wait states

– Flash prefetch enabled

– Nucleo STM32L476RG, board MB1136 Rev C

采用硬件CRC的情况下,诊断128KB SRAM 消耗72346μs;诊断17KB Flash消耗550μs;在此基础上再加诊断CPU的部分,共消耗73727μs。这个时间非常之长,因此需要严格控制安全相关的代码ROM和数据RAM容量,尽量缩短诊断间隔时间,以提高响应速度。

 

移植到STM32L431CC,STM32L431CC共有256KB Flash,64KB SRAM。

测试例程共测试了约64KB RAM和36KB Flash,其他测试条件同上,所有测试耗时38ms,接近官方数据。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值