AT91SAM7Sxx系列MCU Boot-Loader的设计

发布者:bln898最新更新时间:2011-08-27 关键字:AT91SAM7Sxx  VID  Flash 手机看文章 扫描二维码
随时随地手机看文章

AT91SAM7xx 系列是Atmel 公司推出的基于ARM7内核的32位MCU。用户代码编译在Thumb 模式下可获得16位指令宽度,从而节约内部程序空间。目前这个系列芯片的内部Flash空间范围从32KB到256KB, RAM空间范围是8KB 到 6?KB。除了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字节的固件数据。[page]

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端程序实现的具体方法。

图 Boot-loader 在Flash中的位置(以SAM7S256为例)

4 结论

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

参考文献

[1] at91sam7s_full.pdf. Http://www.at91.com
[2] HID1_11.pdf. Http://www.usb.org
[3] Stuart Allman Using the HID class eases the job of writing USB device drivers. Http://www.edn.com

关键字:AT91SAM7Sxx  VID  Flash 引用地址:AT91SAM7Sxx系列MCU Boot-Loader的设计

上一篇:NUC1xx微控制器(MCU)的省电方式
下一篇:基于ARM7处理器LPC2119的USB-CAN转换器设计

推荐阅读最新更新时间:2024-03-16 12:40

avr中把大数据放入flash中的方法
GCC中把大数组存入flash区的方法大全 AVRGCC中将变量定义在flash空间的方法(大数据存储) (1)flash常量: #include avrpgmspace.h //须增加的头文件 const prog_uchar FlashConst = 3; //定义uchar型的常量n定义在flash里(flash常量) unsigned char RamVar; //定义无符号整型变量(Ram变量) RamVar = pgm_read_byt
[单片机]
STM32 flash 读写操作
一、Flash简介   通过对stm32内部的flash的读写可以实现对stm32的编程操作。   stm32的内置可编程Flash在许多场合具有十分重要的意义。如其支持ICP(In Circuit Programming,在电路编程;在线编程)特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写;支持IAP(In Application Programming,在应用中编程)使得开发人员可以在stm32运行程序的时候对其内部程序进行更新操作。对一些对数据安全有要求的场合,可编程FLASH可以结合stm32内部唯一的身份标识实现各种各样的防破解方案。并且stm32的FLASH在一
[单片机]
东芝宣布兴建第 7 座 NAND Flash 工厂
2017 年是 NAND Flash 闪存厂商丰收的一年,零售价格的暴涨带动了厂商的营收,同时还对获利有了巨大贡献。 所以,当前全球的 4 大 NAND Flash 厂商,包括三星、Intel/美光、东芝、SK 海力士也有了充足的资金来进行新一波的投资。 而根据外电的报导,东芝就最新宣布,将拿出 70 亿日圆的金额,准备兴建第 7 座闪存工厂(Fab7),地点就在日本的四日市(Yokkaichi)。 事实上,目前东芝的第 6 座工厂(Fab 6)正在建设当中,预计将于 2018 年第 4 季完工。 不过,面对市场的强烈需求,东芝扩产的步伐似乎还不打算停下来。 因此,东芝在 21 日宣布,将投资 70 亿日圆用于 Fab7 厂的兴建
[半导体设计/制造]
51单片机控制K9K8G08U0C NAND Flash读写程序
#include STC12C5A60S2.H #include intrins.h #include SMG.h /********************************************/ sbit NF_CLE=P0^3; //命令锁存使能(输出) CLE D3 sbit NF_ALE=P3^4; //地址锁存使能(输出) ALE RS sbit NF_WE=P1^3; //NAND Flash写使能(输出) /WE DB4 sbit NF_RE=P1^2; //NAND Flash读使能(输出) /RE DB3 sbit NF_CE
[单片机]
STM32笔记(十二)---SPI读写FLASH
一、SPI协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。 1.1 SPI 物理层 SPI 通讯设备之间的常用连接方式见图1。 图1 常见的 SPI 通讯系统 SPI 通讯使用 3 条总线及片选线, 3 条总线分别为 SCK、 MOSI、 MISO,片选线为CS(NSS)。它们的作用介绍如下: /SS( Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、 CS,以下用 NSS 表示。 当有多个
[单片机]
STM32笔记(十二)---SPI读写<font color='red'>FLASH</font>
分析师:NAND Flash 价格有望在今年 Q3 止跌
据台湾地区经济日报报道,有分析师认为,今年下半年在消费性电子需求不进一步恶化的前提下,NAND Flash 价格有望在今年第三季度止跌。 台媒指出,NAND Flash 为闪存,应用范围比 DRAM 更广,被大量使用在各种产品上。全球通货膨胀影响消费性终端产品需求量,內存大厂铠侠、美光、SK 海力士等陆续宣布减产后,三星在上月底终于松口,本季度会主动降低产能。 TrendForce 集邦咨询今年 1 月表示,由于多数供应商已开始减产,2023 年第一季度 NAND Flash 价格季跌幅将收敛至 10%-15%,削价竞争也在原厂启动减产后获控制。 据悉,NAND Flash 历经 2022 下半年剧烈跌价,促使供应商积极
[半导体设计/制造]
单片机上Flash和EEPROM的异同
FLASH的全称是FLASHEEPROM,但跟常规EEPROM的操作方法不同。 FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。 至于那个“总工”说的话如果不是张一刀记
[单片机]
Flash为基础的FPGA大幅降低功耗
  Actel面向高性能及对功耗敏感的系统设计人员推出ProASIC3L系列现场可编程门阵列 (FPGA)。相比前一代ProASIC3 FPGA,新推出的以 Flash为基础的FPGA系列可以在350MHz的工作频率下大幅降低功耗,能分别对动态和静态功耗降低达40% 和 90%。ProASIC3L系列还支持FPGA优化32位ARM Cortex-M1处理器的免费实现。   Actel 高级副总裁Fares Mubarak称:“对我们来说,功耗的重要性绝对毋庸置疑。随着工艺节点不断缩小,静态功耗成为了主要的关注焦点。但过去数年,Actel已大幅降低了静态功耗,使到我们可集中研究动态功耗,而目前动态功耗在功率预算中所占的比例越来越大
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved