Chinaunix首页 | 论坛 | 博客
  • 博客访问: 275776
  • 博文数量: 11
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-05 20:59
文章分类
文章存档

2010年(1)

2008年(10)

我的朋友

分类:

2008-05-22 12:58:52

  该芯片内部有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
阅读(4130) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~