打印
[MM32软件]

(分享)MM32F013x——IEC60730-1 B类认证软件设计指南(六)

[复制链接]
3720|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在前面的几个章节中我们介绍了关于MM32F0130系列的ClassB 认证的实现方式,本章节中我们将为大家介绍在MM32F0130上ClassB认证的各部分代码段测试所花费的时间。
ClassB认证的各部分代码段运行都会增加MCU的负担,为防止认证代码影响应用控制,我们需要对各个部分代码执行时间进行测试,分时段利用时间空隙进行自检。耗时与很多因素有关系,MCU的性能和开发环境都会有影响,在单次运行中执行启动测试,测试时间取决于MCU性能和测试区的大小。运行期间测试逐块执行,因此其时间也取决于被测试块大小和测试的重复频率。

使用特权

评论回复
沙发
两只袜子|  楼主 | 2021-7-2 09:45 | 只看该作者
用户需要在应用所需的性能和安全认证所需的性能之间找到平衡,主要挑战在于实现较短的整体诊断测试间隔,同时保持应用过程安全时间在可接受的长度范围内。在关键情况下,运行时测试可限制在收集关键代码或数据的区域。

用户应考虑到该间隔也用于在运行期间计算系统时钟和LSI之间的时钟交叉参考率,因而其长度不得低于时钟交叉测量所用的LSI周期数相应间隔。

使用特权

评论回复
板凳
两只袜子|  楼主 | 2021-7-2 09:48 | 只看该作者
当特定测试(RAM、Flash、时钟)启动时及每次完成测试程序(启动时和运行期间)时,通过切换I/O的翻转来测试各个部分的耗时。其中,在启动时和运行期间,这些I/O可用于测量测试长度、局部测试的频率及完成整个单测试周期所需的时间。完全检测被测试的专用区域后,一组局部测试又重新开始。

在ClassB自检的过程中,ClassB自检流程分为启动自检与运行自检两个部分,本次例程我们将采用翻转GPIO口的方式来测试ClassB启动自检以及运行自检所花费的时间。

使用特权

评论回复
地板
两只袜子|  楼主 | 2021-7-2 09:53 | 只看该作者
本次测试我们翻转PA0来进行计算时间(即在自检之前设置为低电平,自检完成以后设置为高电平,然后使用逻辑分析仪抓取低电平的持续时间即为自检部分花费的时间)。启动自检
启动自检部分包含CPU寄存器自检,看门狗自检,FLASH自检,RAM自检以及时钟自检,启动自检的流程如下图所示:

使用特权

评论回复
5
两只袜子|  楼主 | 2021-7-2 09:54 | 只看该作者
01  CPU寄存器自检
CPU寄存器自检调用的函数为STL_StartUpCPUTest(), 在此函数之前我们调用GPIO的配置函数,将PA0配置为低电平,在函数运行完成后将PA0配置为高电平,然后使用逻辑分析仪抓取两次电平翻转的脉宽即可,逻辑分析仪获取波形如下:

由上图可以看出CPU寄存器的启动自检的时间为12.51us。

使用特权

评论回复
6
两只袜子|  楼主 | 2021-7-2 10:02 | 只看该作者
02  看门狗自检
看门狗自检调用的函数为STL_WDGSelfTest() ,在此函数中进行PA0的翻转设置,其操作与CPU寄存器的操作一样,但是我们需要屏蔽掉CPU寄存器自检操作过程中PA0的翻转操作(由于本次测试的内容较多,为了防止计算错误,故一个一个的测试)。


由上述逻辑分析仪抓取的波形可知看门狗自检花费的时间为3.591ms。

使用特权

评论回复
7
两只袜子|  楼主 | 2021-7-2 10:03 | 只看该作者
03 FLASH自检
FALSH自检操作在FLASH自检的地方对GPIO口进行翻转操作,逻辑分析仪获取波形如下:

由逻辑分析仪抓取的波形可知64K的FLASH自检的时间为9.36ms,其中包含crc校验等耗费的时间。

使用特权

评论回复
8
两只袜子|  楼主 | 2021-7-2 10:05 | 只看该作者
04 RAM自检
RAM自检操作在RAM自检的地方对GPIO口进行翻转操作,逻辑分析仪获取波形如下:

由上图可知16K的RAM启动自检花费的时间为1.1ms。

使用特权

评论回复
9
两只袜子|  楼主 | 2021-7-2 10:06 | 只看该作者
本帖最后由 两只袜子 于 2021-7-2 10:24 编辑


05 时钟自检
时钟自检操作在时钟自检的地方对GPIO口进行翻转操作,具体操作如下:

使用特权

评论回复
10
两只袜子|  楼主 | 2021-7-2 10:12 | 只看该作者
本帖最后由 两只袜子 于 2021-7-2 10:25 编辑

由上图可知在启动时时钟自检花费的时间为9.37ms。运行自检运行自检耗时的测试方法与启动自检的方法一致,也是通过翻转GPIO来实现的。

154524n7h7uruuwa6ewtq2.png.thumb.jpg (111.76 KB )

154524n7h7uruuwa6ewtq2.png.thumb.jpg

使用特权

评论回复
11
两只袜子|  楼主 | 2021-7-2 10:29 | 只看该作者
运行自检周期直接调用函数STL_DoRuntimeChecks()函数即可,在函数中包含了所有的运行自检的流程,下面我们来测试运行自检花费的时间。
测试运行自检周期如下所示:



使用特权

评论回复
12
两只袜子|  楼主 | 2021-7-2 10:36 | 只看该作者
由上图可知,官方例程设置自检周期的时间为10.008ms。

测试CPU寄存器运行自检所花费的时间如下所示:

由上图可知CPU寄存器运行自检的时间为10.18us。

使用特权

评论回复
13
两只袜子|  楼主 | 2021-7-2 10:37 | 只看该作者
运行期间的测试逐块执行,因此其时间也取决于被测试块大小和测试的重复频率,同时开发环境也影响执行效率,使用IAR和MDK开发的执行时间也有差异,本次实验系统时钟设置48MHz,基于MDK5.27版本的工程测试得出的数据。

对算法在运行时间和存储空间这两种资源的利用效率进行研究是一门学问,研究如何用更小的空间、更短的时间完成所需要的功能是一件很有意思的工作,有兴趣的可以深入研究一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2055

主题

7455

帖子

10

粉丝