【简介】
在之前的帖子(【S32K3XX】FLASH 的 DID 保护机制)和 (【S32K3XX】FLASH的访问锁保护机制)的帖子中对FLASH的保护机制有介绍,我们基于以上两篇帖子的基础上进一步梳理Flash 的解锁流程。
S32K3 芯片的FLASH 区域按照类型分为UTEST/DFLASH/PFLASH三种类型,每个类型内部又被划分为多个Sector. 以下的这组信号可以用来获取和设置和获取当前Sector 的状态。

从以下的寄存器定义可以看出,对应的Sector 芯片设计时划分为普通的Sector 和 Super Sector 和UTEST
__IO uint32_t PFCBLK_SPELOCK[PFLASH_PFCBLKI_SPELOCK_COUNT]; /**< Block n Sector Program Erase Lock, array offset: 0x340, array step: 0x4 */ uint8_t RESERVED_3[4]; __IO uint32_t PFCBLKU_SPELOCK[PFLASH_U_PFCBLKI_SPELOCK_COUNT]; /**< Block UTEST Sector Program Erase Lock, array offset: 0x358, array step: 0x4 */ __IO uint32_t PFCBLK_SSPELOCK[PFLASH_PFCBLKI_SSPELOCK_COUNT]; /**< Block n Super Sector Program Erase Lock, array offset: 0x35C, array step: 0x4 */
其中 PFCBLK_SPELOCK 寄存器按照BLOCK 管理最多五组区域,0 对应DFLASH,1~4 对应每组FLASH 的最后的32个8KB的区域。

对应的C40 IP 的如下驱动接口就时读取该寄存器信息来返回当前sector 的lock 状态。
因为S32K3 芯片内部有多个domain 为了避免多个domain 同时擦写同一个Sector 的flash,如下的寄存器可以获取当前Sector是否可以解锁处理。


只有该信号为1 时才可以操作FLASH 的lock 寄存器。上述提到了当前Sector 是被哪个domain 所持有只有其他domain无法操作该Sector 的flash,对应的值可以从该组寄存器来获取。


该寄存器用8个bit 定义当前Sector 是被哪个master 所持有,只有持有Lock 的master 才可以对flash进行擦写操作。
我要赚赏金
