块保护的一个用途是为引导程序(Boatloader)提供一个保护了的flash 存储区域。这样引导程序就可以
用于擦除以及重新写剩余的flash 存储器。因为引导程序被保护,所以即使MCU 在写入或者擦除操作过程中
掉电,该程序也是完整的。
4.4.7
向量重定向
无论是哪种块保护,复位和中断向量都将被保护。向量重定向允许用户修改中断向量信息而不需要取消
对引导程序和复位向量空间的保护。向NVOPT 内地址为$FFBF 的寄存器的FNORED 位写入0,可以使能
向量重定向。为了实现重定向操作,必须设置位于$FFBD 地址处的NVPROT 寄存器让flash 存储器中的一部
分而不是全部块保护。所有的中断向量($FFC0 –$FFFD) 都会重定向,除了复位向量($FFFE:$FFFF)。
举个例子,如果flash 的512 个字节被保护,保护地址区域是从$FE00 到$FFFF。则中断向量$FFC0
–$FFFD 被重定向到$FDC0 –$FDFD。以一个SPI 中断来举例,地址$FDE0: FDE1 将取代地址
$FFE0:FFE1 的值作为中断向量使用。这就允许用户将新的程序代码和新的向量值写入FALSH 中未被保护的
部分,而包含默认向量地址的被保护区域不被改写。
4.5
保护机制
MC9S08AC16 使用硬件电路来防止对flash 存储器和RAM 存储器的数据的非法访问。当使能安全机制
时,flash 和RAM 都被看作被保护资源。直接页寄存器,高地址页寄存器,背景调试控制器被看作是非保护
资源。保护区的程序执行时,可以正常访问任何位置的内存数据和资源,但通过背景调试接口或来自非保护存
储空间的程序执行来访问保护资源是被禁止的( 写操作被忽略,读时总为0)。
是否使用保护机制是由FOPT 中的非易失性的寄存器位SEC01:SEC00 来设置的。在芯片复位时,非易
失性的NVOPT 的内容从flash 中复制到工作着的高地址页寄存器FOPT 中。在写flash 时,用户通过写
NVOPT 来使用MCU 的安全机制。如果是1:0 状态,则取消MCU 保密性,其他的组合都启用MCU 保密性。
注意擦除的状态(1:1) 使能MCU 保护机制。在开发过程中,无论flash 何时被擦除,立即将NVOPT 中的
SEC00 位清0 是提倡的操作,SEC01:SEC00=1:0。这样就可以在复位以后让MCU 仍然是非保护的。
当MCU 处于保护模式时,芯片的调试模式是被禁止的。这个独立的背景调试控制器仍然用于背景存储器
访问命令,但是,MCU 不会进入背景调试模式,除非在复位的上升沿,保持BKGD/MS 引脚低电平。
用户可以通过8 字节的后门密钥来允许或者禁止安全机制。如果NVOPT 或者FOPT 中的非易失性位
KEYEN 是0,后门密钥是无效的,这时如果没有擦除整个的flash 就没有方法离开保护模式。如果KEYEN 是
1,一个在保护模式下的用户程序可以通过以下的方法暂时离开保护模式:
• 将FCNFG 的KEYACC 位置1。这使flash 模块将后门密钥地址(NVBACKKEY 到NVBACKKEY+7)
写入的数据解释为比较密钥,而不是flash 写入或擦除的第一步。
• 向NVBACKKEY 到NVBACKKEY+7 的位置依次写入8 字节的用户进入密钥值。写入顺序为
NVBACKKEY 开始,NVBACKKEY +7 结束。STHX 不在这些写入中使用,因为这些写入不能在一
个邻近的总线周期完成。通常,用户程序可以从MCU 系统外部通过一个通讯接口( 如SCI) 获得该密
钥。
• 将FCNFG 的KEYACC 位置0,如果用户写入的8 字节和其在flash 之中的8 字节位置是匹配的,
MCU 将SEC01:SEC00 改写成1:0,在下次复位前都会保护模式被取消。
安全密钥只能从保护存储器(RAM 或flash)写入。如果没有保护用户程序的协调不能由背景调试命令
进入。
后门密钥(NVBACKKEY 到NVBACKKEY+7) 分布在flash 存储器的非易失性寄存器空间中,因此用户可
以象写其他flash 寄存器一样写这些寄存器。这个非易失性的寄存器与复位和中断向量一起都位于同样的一块
MC9S08AC16 系列微控制器数据手册, 第6 版
#
飞思卡尔半导体公司