本帖最后由 顾博文 于 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。
|