英飞凌TriCore AURIX启动安全测试与初始化详解

需积分: 48 26 下载量 82 浏览量 更新于2024-08-06 收藏 2MB PDF 举报
"启动阶段的安全测试和初始化在AURIX微控制器中的实施是确保系统安全性的关键步骤。这个过程涉及到多个层次的测试和初始化,主要目标是检测和预防潜在的硬件故障。" 在启动阶段,AURIX微控制器的启动安全测试和初始化主要包括以下几个方面: 1. **前期安全测试钩子**:START驱动程序提供了钩子函数,这些函数可以调用通用安全程序库或特定应用的安全初始化函数。这允许应用程序在启动时根据配置信息进行必要的安全测试。 2. **预初始化**:这一阶段确保关键测试所需的资源和变量已经准备就绪,内存也已经初始化。共享资源由主核初始化,而每个核独有的资源则由相应的内核初始化。 3. **关键部件测试**:根据安全级别,每个工作循环都会对关键部件进行测试。例如,CPU及其锁步比较器(SBST)、关键静态内存(使用MBIST进行ECC和寻址故障测试)、关键FLASH(检查ECC故障)以及存储保护单元(MPU)。 4. **处理器核心完整性测试**:需要提供一种方法来独立测试每个处理器和锁步核的完整性。 5. **内存测试**:START驱动程序对关键内存执行启动测试,使用March、Checkerboard或Parity测试等算法,最多可测试16个内存区域。错误发生时,会抛出异常并返回错误地址。内存ECC电路测试在每个工作循环中检查ECC错误,但不会引起复位或中断。 6. **Flash ECC测试**:类似地,Flash ECC电路的测试在每个工作循环中执行,使用预设ECC错误的Flash区域,不会触发复位或中断。 7. **功能安全初始化**:驱动初始化和多核启动后,会执行SMU初始化、激活和安全看门狗初始化。这些步骤的顺序取决于系统层面的综合考虑。 8. **预运行测试**:通过调用服务函数,执行不同参数的测试,以验证不同功能模块。这些测试包括特定报警测试,可以在OS运行前或运行后执行,例如对CPU和总线的MPU、中断路由的测试。测试结果可以用于失效判断,且测试签名动态生成,防止粘滞故障。 9. **存储保护测试**:这类测试必须在OS启动后进行,以确保中断关闭,并且在安全测试完成后,基本的存储访问保护机制才会初始化,以防止非安全软硬件组件引发系统崩溃。 AURIX微控制器的启动阶段安全测试和初始化是一个复杂的过程,涉及多层面的硬件验证,旨在确保在系统运行前就已经消除了潜在的硬件故障,从而提高系统的可靠性和安全性。

function pdemodel [pde_fig,ax]=pdeinit; pdetool('appl_cb',5); set(ax,'DataAspectRatio',[1 1 1]); set(ax,'PlotBoxAspectRatio',[1.5 1 1]); set(ax,'XLim',[-1.5 1.5]); set(ax,'YLim',[-1 1]); set(ax,'XTick',[ -1.5,... -1.2,... -0.90000000000000002,... -0.60000000000000009,... -0.30000000000000004,... 0,... 0.30000000000000004,... 0.60000000000000009,... 0.90000000000000002,... 1.2,... 1.5,... ]); set(ax,'YTickMode','auto'); pdetool('gridon','on'); % Geometry description: pderect([-1 0.5 0.5 -0.5],'R1'); set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','R1') % Boundary conditions: pdetool('changemode',0) pdesetbd(4,... 'dir',... 1,... '1',... '0') pdesetbd(3,... 'dir',... 1,... '1',... '0') pdesetbd(2,... 'dir',... 1,... '1',... '0') pdesetbd(1,... 'dir',... 1,... '1',... '200') % Mesh generation: setappdata(pde_fig,'Hgrad',1.3); setappdata(pde_fig,'refinemethod','regular'); setappdata(pde_fig,'jiggle',char('on','mean','')); setappdata(pde_fig,'MesherVersion','preR2013a'); pdetool('initmesh') % PDE coefficients: pdeseteq(1,... '1.0',... '0.0',... '0',... '1.0',... '0:10',... '0.0',... '0.0',... '[0 100]') setappdata(pde_fig,'currparam',... ['1.0';... '0 ']) % Solve parameters: setappdata(pde_fig,'solveparam',... char('0','1000','10','pdeadworst',... '0.5','longest','0','1E-4','','fixed','Inf')) % Plotflags and user data strings: setappdata(pde_fig,'plotflags',[2 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1]); setappdata(pde_fig,'colstring',''); setappdata(pde_fig,'arrowstring',''); setappdata(pde_fig,'deformstring',''); setappdata(pde_fig,'heightstring',''); % Solve PDE: pdetool('solve')

2023-07-23 上传