当前位置RFID世界网 > 技术文章 > 其它 > 正文

AT91SAM7Sxx系列MCU Boot-Loader的设计

作者:李隆庆 来源:希尔思仪表(深圳)有限公司 2012-03-21 09:08:24

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

关键词:AT91SAM7Sxx[0篇]  Boot-Loader [0篇]  ATMEL[1篇]  

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

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

 已有0条评论 我要评论 联系编辑 分享到:网易新浪腾讯人人开心网豆瓣MSN


最新评论(加载最新评论):


上一篇:基于射频识别的无线传感网节点设计研究

下一篇:基于MFRC522的热量表预付费模块设计


相关文章:


关键字搜索:


新闻中心:AT91SAM7Sxx[0篇]  Boot-Loader [0篇]  ATMEL[29篇]  

成功应用:AT91SAM7Sxx[0篇]  Boot-Loader [0篇]  ATMEL[0篇]  

解决方案:AT91SAM7Sxx[0篇]  Boot-Loader [0篇]  ATMEL[0篇]  


图片文章:

热点专题