1.安全调试简介
安全调试,即在调试的时候需要密码校验,一共有2个位置需要进行密码校验
- 在使用Renesas Flash Programmer硬刷软件的时候需要输入32字节的OCDID作为校验密码
- GHS进行调试程序的时候需要输入32字节的OCDID作为校验密码
2.安全调试使用步骤
2.1设置安全调试密码
使用CAN工具,对DID:2E2E写入32字节的OCDID作为安全调试密码
2.2 Renesas Flash Programmer硬刷
选择设备认证
勾选ocdid认证
开始刷写
输入ocdid
如果ocdid输入错误,会提示认证密码匹配失败
如果ocdid输入正确,会提示操作完成
2.3 GHS调试
点击debug
点击播放,点击编辑下载设置
设置ocdid
如果ocdid输入错误,会提示密码校验错误
如果ocdid输入正确,会提示选择芯片核
3 安全调试的代码逻辑
3.1安全调试密码的写入
使用DID:2E2E写入OCDID作为安全调试密码,在DID:2E2E的回调内执行安全区域设置的函数PropertyAreaControl
3.2 控制安全设置区域来设置安全调试密码
ocdid的存储位置位于安全设置区域,所以通过控制安全设置区域来设置ocdid。安全设置区域存在
front side(当前有效面)和back side(当前无效面),程序运行在有效面,修改无效面的安全设置区域,然后将无效面更新到有效面,从而实现设置安全设置区域的ocdid的功能
3.2.1 获得FACI目标
要写安全设置区域,即写入DataFlash的一块区域,写入DataFlash需要操作FACI,操作FACI需要先知道是要操作哪一个FACI,使用R_RFD_PropertyAddressToFaciNumber获取当前的FACI号
3.2.2 读取front side的数据
以下是安全设置区域的基地址
安全设置区域可写入区域是在安全设置区域的基地址偏移0x200的地址开始的
安全设置区域可写入区域一共分为三段
第一段:
第二段:
第三段:
根据以上的位置信息,读取front side的数据,即读取三段安全设置区域的数据
3.2.3 填入ocdid
将2E写入的ocdid按照合理的字节续填入
front side的缓存数组。包括u8的数组转化为u32的数组,u32的数组里面的数据进行大小端转换,u32的数组里面的数据进行倒序
3.2.4 擦除back side的数据
擦除
back side的数据,在
除
back side的数据之前需要开启P/E mode
3.2.5 写入back side的数据
写入
back side的数据也同样是3段安全设置区域的3段区域
3.2.6 比较front side的数据和back side的数据
比较
front side的数据和back side的数据是否相同,来判断数据有没有正确写入back side
3.2.7 选择有效安全设置区域
在确定
back side的数据正确写入之后,选择要切换的安全设置区域,先缓存在i_pu4_Data数组内,后续写入SVA寄存器
3.2.8 擦除Switch Area
Switch Area是用来切换有效安全设置区域的,此处先擦除
3.2.9 写入Switch Area
写入Switch Area来完成有效安全设置区域的切换
3.2.10 擦除Tag Area
Tag Area是用来切换FACI基地地址和FACI命令发布区域,此处先擦除
3.2.11 更新Tag Area
Tag Area区域更新完成后,成功切换了FACI基地地址和FACI命令发布区域,ocdid也成功写入有效区的安全设置区域,从而完成调试密码注入。更新完Tag Area区域之后要切换至读取模式
版权归原作者 屿北_ 所有, 如有侵权,请联系我们删除。