查看: 3007|回复: 0

(QA): 331x芯片如何将程序FLASH做数据存储使用?其是否支持程序区加密?

[复制链接]

151

主题

845

帖子

4405

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4405
发表于 2019-1-21 11:10:52 | 显示全部楼层 |阅读模式
本帖最后由 顾博文 于 2019-1-21 11:21 编辑

下图是331x芯片的系统地址分配图,其中RAM被同时映射到数据总线和程序总线,以便于CPU从RAM取指运行。
1、 Flash最高地址(0xFDFF)的扇区作为UOB(User Option Bytes)扇区,其中最高两字节地址为UCP(User Code Protection)和BCP(Boot Code Protection),此扇区可以由用户代码或Bootloader改写,以使能代码保护功能。一旦启动代码保护,JTAG将不能随意改写UOB。UOB中其余地址可用于用户程序或者用户数据存储。
2、芯片内部有64K的程序Flash,其中最后一个扇区需作为加密区域,不可使用,其余部分都可以作为数据存储使用。在对Flash进行擦除或编程操作时,为了避免软件意外擦写Flash,芯片提供了Flash Key保护功能,在对Flash进行擦除或编程操作的时,必须首先对Flash Key寄存器写入两个正确的Key值(单字节编程时顺序写入8'hA5和8'hF1,缓存编程时顺序写入8'hA5和8'hC4,扇区擦时顺序写入8'h96和8'h7D),写入顺序错误或写入值错误,亦或者在Flash Key验证正确之前就进行擦除或编程Flash操作将会进入错误状态,并产生相应中断。Flash Key认证错误之后将禁止软件擦写Flash直到下一次芯片复位。


3、FM3316支持软件擦写Flash(IAP),Flash擦写必须使用8MHzRCHF作为系统时钟,并且擦写前应保证RCHF频率经过校准。
4、Flash的擦除都是以扇区(512字节)为单位,每次擦除一个扇区。
5、如果不是要更新扇区内的全部数据,则软件应注意对扇区内不需要更新的数据进行保存,以便在擦除后重新写入。Flash编程有单字节模式和扇区缓存模式。单字节模式每次操作仅写入一个字节;扇区缓存模式则将待写入的完整扇区数据保存在RAM中(4K字节中的最高512字节),每次操作将写入完整的一个扇区。
6、针对程序区加密:
芯片支持程序区加密,也就是用户代码保护,简称UCP(User Code Protection),用于防止用户代码被非授权的第三方通过JTAG接口读出或改写。
7、UCP通过将UOB扇区最高字节(0xFFFF)改写成非FF实现,用户代码或Bootloader程序都可以改写UOB扇区(0xFDFF~0xFFFF)以使能UCP,改写完成后进行一次软件复位即可启动UCP。
启动UCP之后,除了UOB扇区,Flash其余地址对于Bird接口全都不可访问,亦不可擦除或改写。退出UCP的方式是Bird-JTAG发起一次全擦,伪全擦操作后Flash内数据全部擦除,最后擦除UOB扇区,使芯片退出UCP。




2019-01-21_111026.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表