该芯片内部有256KB的Flash空间用于存放bin固件,并且支持启动。升级整个Firmware(bin文件)遇到的问题:1、片内Flash的写操作;2、升级用的此部分代码的运行域的定位。
一、片内Flash操作
ATMEL提供了EFC(嵌入式Flash控制器)以确保片内Flash与32位内部总线的接口,读Flash没有问题,编程、擦除、加解锁则由一套命令集控制。
1、读 操作
通过编程MC_FMR模式寄存器来优化对代码的获取。设置FWS等待状态数目;如果需要进行Lock、GPNVM、Security位操作,FMCN位必须设置成与主时钟一致。
2、写、擦除、锁、GPNVM位 操作
有一套完整的命令集控制。
(1)写:先把数据写入相应的page,然后按照Datasheet上的流程图操作。
(2)擦除:此芯片把Flash空间分成16个region,要全部解锁之后,才能整体擦除。
(3)GPNVM:将MC_FSR的bit[10](GPNVM2)置位,即可从Flash启动。
二、固件升级
对这个型号的处理器,片内RAM为64KB,不足以让整个bin固件在里面运行,所以需要将编程Flash的code处于RAM中运行,要保证编程Flash时,不能在上Flash运行程序。
这里我在ADS编译连接bin文件时用分散加载,将升级固件的完整执行代码(包括RO,RW,ZI段)的运行域定位在RAM空间(0x200000),成功实现对Flash的编程。写入全新的Bin文件之后,需要置位GPNVM Bit 2,使其从Flash启动。然后直接跳转到Bootloader的首地址,实现升级完成后的重启。
Name: Jacky Xu
MSN: sure365@hotmail.com
E-mail:sure365@gmail.com
阅读(4200) | 评论(0) | 转发(0) |