中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 存储设计 >>电子行业新闻正文

AT91SAM7Sxx系列MCU Boot-Loader的设计

时间:2006/12/1 11:39:00  作者:  来源:ic72  浏览人数:1879
 
 

      引言

      AT91SAM7xx 系列是Atmel 公司推出的基于ARM7内核的32位MCU。用户代码编译在Thumb 模式下可获得16位指令宽度,从而节约内部程序空间。目前这个系列芯片的内部Flash空间范围从32KB到256KB, RAM空间范围是8KB 到 64KB。除了SAM7S32外,这个系列的芯片都内嵌有USB2.0全速通讯模块。本文介绍的就是基于USB接口的用户程序升级工具。

      我们知道 Atmel 公司为这个系列芯片提供了 SAM-BA 下载工具。这个工具在产品阶段的应用有一定的局限,就是为了启动芯片内部的 SAM-BA 程序,用户需要短接芯片的TST引脚到电源端,然后上电10秒钟,再重新上电.本文介绍的Boot-loader 程序常驻在芯片内部Flash空间,启动方法是用户按住产品的一个特定的按键然后上电。这样大大简化了产品固件的升级过程。

      1 Boot-loader 在Flash中的位置

      为了在整个SAM7Sxx系列中通用同一个Boot-Loader程序,我们把它定位在Flash的低端位置偏移量为0x800至0x15ff位置,共占用3584个字节空间。相应的用户程序在链接时要避开使用这段地址。笔者采用的是IAR编译环境,需要修改链接目标定位控制文件达到定位目标文件的目的。以S256为例,需要修改at91SAM7S256_NoRemap.xcl 文件

Boot-loader 的链接控制文件中需要修改的项目有:

      -DROMSTART1=00 中断向量表起始位置

      -DROMEND1=3F 中断向量表结束位置

      -DROMSTART2=800 目标程序起始位置

      -DROMEND2=15FF 目标程序结束位置

      CODE, ICODE CONST 的定位同样需要相应的修改。

      Boot-loader 启动文件为Atmel提供(Cstartup.s79),但需要作一定修改:

      RSEG ICODE:CODE:ROOT(2) 改为RSEG INTVEC:CODE:ROOT(2) 把异常向量表定位在0x00至0x3f.

      异常向量表的末端添加语句RSEG ICODE:CODE:ROOT(2) 把启动代码定位在CODE段.

      用户应用项目需要修改at91SAM7S256_NoRemap.xcl文件中

      -DROMSTART1=00 中断向量表及启动代码起始位置

      -DROMEND1=7FF 中断向量表及启动代码结束位置

      -DROMSTART2=1600 目标程序起始位置

      -DROMEND2=3FFFF 目标程序结束位置

      CODE, ICODE CONST 的定位同样需要相应的修改。以避免和Boot-Loader 地址重叠。

      2 Boot-Loader 的实现

      2.1 Boot-Loader 的启动

      上电复位后,PC指针首先指向Boot-Loader,Boot-Loader首先初始化IO口,然后判断用户有无按下启动Boot-Loader的按键。如果该键没有被按下,同时Flash内有用户代码,则跳到用户程序入口。下面代码是用汇编写用户入口子程序。

      PUBLIC EnterUser

      CODE16

      EnterUser:

      ldr r1, = 0x15fc ; 0x15fc 保存用户入口地址

      ldr r0, [r1,#0]

      bx r0

      如果用户在上电时有按下该键,则运行Boot-Loader 的主循环。

      2.2 USB 驱动

      USB驱动采用HID类以省下开发驱动程序的需要.HID的报表采用如下结构:

      const char LoaderDescriptor[] = {

      0x06, 0xA0, 0xFF, // 厂家定义用途

      0x09, 0x01, // 厂家定义用途

      0xA1, 0x01, // 报表集合:应用

      // The Input report

      0x09, 0x03, // 厂家定义的报表ID

      0x15, 0x00, // 逻辑最小值 (0)

      0x26, 0xFF, 0x00, // 逻辑最大值(255)

      0x75, 0x08, // 报表位宽(8 位)

      0x95, 0x03, // 报表长度(3 )

      0x81, 0x02, // 输入报表

      // The Output report

      0x09, 0x04, // 厂家定义的报表ID

      0x15, 0x00, // 逻辑最小值 (0)

      0x26, 0xFF, 0x00, // 逻辑最大值 (255)

      0x75, 0x08, // 报表位宽

      0x96, 0x04, 0x01, // 报表长度(260 字节)

      0x91, 0x02, // 输出报表

      0xC0}; // 集合结束

      这样PC下传的数据报大小是260B,其中第一字节为写命令,第二,第三字节是用户固件的页地址(用户固件需编译为二进制文件*.bin).接下来是256字节的固件数据。

      2.3 Flash 的操作

      把所有操作Flash的函数定义在RAM空间,例如:

      __ramfunc int CFlash::Erase_All(void)

      因为SAM7Sxx系列的Flash采用单层结构,不允许程序在Flash上运行的同时改写Flash的内容, 所以要将操作Flash的程序放在RAM中运行.

      2.4 数据包的处理

      第一个数据包包含用户启动代码和异常向量表。Boot-Loader需要修改复位向量,并保存用户入口地址(伪代码如下)

      if (Page == 0) {

      Get User Entrance Address

      Replace User Entrance Address with Boot-Loader Entrance Address

      Program first page into Flash

      Set flag to indicate an unfinished task

      Calculate checksum and return to PC

      }

      收到结束指令后需要设置完成标志(伪代码如下):

      if (Command == END_OF_TASK) {

      Write last page into Flash

      Reset unfinished flag

      Calculate checksum and return to PC

      }

      如果页地址与boot-loader 重叠,则不进行写操作,仅返成功标志给PC:

      if ( (Page >= BL_START_PAGE) && (Page <= BL_END_PAGE) ) {

      ret = true ;

      break ;

      }

      3 PC端下载软件的实现简介

      下面是标准的PC端操作流程:

      - 获得USB HID 类GUID

      - 获得所有HID设备结构数组

      - 根据VID PID 获得设备信息

      - 打开设备句柄

      - 与Boot-Loader 进行通讯

      以上操作步骤在Windows, MacOS, Linux 中都是通用的,读者可以在参考文献3找到关于PC端程序实现的具体方法。

      4 结论

      本文介绍的实现方法简化了AT91SAM7Sxx系列用户程序升级过程。HID类的USB接口增加了产品跨平台应用的灵活性。笔者测试下载25K代码约2秒钟,具有一定实用价值。

 
【相关文章】
·Microchip扩展32Kb SPI串行EEPROM系列
·新型大容量闪存芯片-K9K2GXXU0M
·铁电存储器在新型语音电子门锁系统中的应用
·uClinux平台下的Flash存储技术
·IC卡数据循环存储及文件管理
·Renesas 将停止8 Gbit AG-AND闪存开发
·大容量闪烁存储器AT45D081及其在税控加油机中的应用
·铁电存储器原理及应用比较
·英特尔和意法半导体公布公用存储器子系统规范
·单片机系统中数据存储器的系统扩展
·嵌入式存储器面面观
·存储器介绍
·非易失性并行存储器的应用(一)
·基于PC/104的实时姿态数据采集系统的设计
·AT91SAM7Sxx系列MCU Boot-Loader的设计
·基于DSP+FPGA的便携数字存储示波表设计
·基于DSP的磁存储设备抗冲击技术控制系统设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9