AT91SAM7Sxx系列MCUBoot-Loader的设计-开云(中国)Kaiyun
发布时间:2024-11-07 23:51
本文摘要:章节AT91SAM7xx系列是Atmel公司发售的基于ARM7内核的32位MCU。

章节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空间,启动方法是用户按钮产品的一个特定的按键然后上电。这样大大简化了产品固件的升级过程。

1Boot-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,ICODECONST的定位某种程度必须适当的改动。?Boot-loader启动文件为Atmel获取(Cstartup.s79),但必须不作一定改动:RSEGICODE:CODE:ROOT(2)改回RSEGINTVEC:CODE:ROOT(2)把出现异常向量表格定位在0x00至0x3f.出现异常向量表的末端加到语句RSEGICODE:CODE:ROOT(2)把启动代码定位在CODE段.?用户应用于项目必须改动at91SAM7S256_NoRemap.xcl文件中-DROMSTART1=00中断向量表及启动代码接续方位-DROMEND1=7FF中断向量表及启动代码完结方位-DROMSTART2=1600目标程序接续方位-DROMEND2=3FFFF目标程序完结方位CODE,ICODECONST的定位某种程度必须适当的改动。

以防止和Boot-Loader地址重合。2Boot-Loader的构建2.1Boot-Loader的启动上电废黜后,PC指针首先指向Boot-Loader,Boot-Loader首先初始化IO口,然后辨别用户若无按下启动Boot-Loader的按键。如果该键没被按下,同时Flash内有用户代码,则跳跃到用户程序入口。

下面代码是用编撰写出用户入口子程序。PUBLICEnterUserCODE16EnterUser:ldrr1,=0x15fc;0x15fc留存用户入口地址ldrr0,[r1,#0]bxr0如果用户在上电时有按下该键,则运营Boot-Loader的主循环。2.2USB驱动USB驱动使用HID类以省下研发驱动程序的必须.HID的报表使用如下结构:constcharLoaderDescriptor[]={0x06,0xA0,0xFF,//厂家定义用途0x09,0x01,//厂家定义用途0xA1,0x01,//报表子集:应用于//TheInputreport0x09,0x03,//厂家定义的报表ID0x15,0x00,//逻辑最小值(0)0x26,0xFF,0x00,//逻辑最大值(255)0x75,0x08,//报表位宽(8位)0x95,0x03,//报表长度(3)0x81,0x02,//输出报表//TheOutputreport0x09,0x04,//厂家定义的报表ID0x15,0x00,//逻辑最小值(0)0x26,0xFF,0x00,//逻辑最大值(255)0x75,0x08,//报表位宽0x96,0x04,0x01,//报表长度(260字节)0x91,0x02,//输入报表0xC0};//子集完结这样PC下传的数据报大小是260B,其中第一字节为写出命令,第二,第三字节是用户固件的页地址(用户固件须要编译器为二进制文件*.bin).接下来是256字节的固件数据。2.3Flash的操作者把所有操作者Flash的函数定义在RAM空间,例如:__ramfuncintCFlash::Erase_All(void)因为SAM7Sxx系列的Flash使用单层结构,不容许程序在Flash上运营的同时重写Flash的内容,所以要将操作者Flash的程序放到RAM中运营.2.4数据包的处置第一个数据包包括用户启动代码和出现异常向量表格。

Boot-Loader必须改动废黜向量,并留存用户入口地址(伪代码如下)if(Page==0){GetUserEntranceAddressReplaceUserEntranceAddresswithBoot-LoaderEntranceAddressProgramfirstpageintoFlashSetflagtoindicateanunfinishedtaskCalculatechecksumandreturntoPC}接到完结指令后必须设置已完成标志(伪代码如下):if(Command==END_OF_TASK){WritelastpageintoFlashResetunfinishedflagCalculatechecksumandreturntoPC}如果页地址与boot-loader重合,则不展开写出操作者,仅有抵顺利标志给PC:if((Page=BL_START_PAGE)(Page=BL_END_PAGE)){ret=true;break;}3PC末端iTunes软件的构建概述下面是标准的PC末端操作者流程:-取得USBHID类GUID-取得所有HID设备结构数组-根据VIDPID取得设备信息-关上设备句柄-与Boot-Loader展开通讯以上操作步骤在Windows,MacOS,Linux中都是标准化的,读者可以在参考文献3寻找关于PC末端程序实现的具体方法。图Boot-loader在Flash中的方位(以SAM7S256为事例)4结论本文讲解的构建方法修改了AT91SAM7Sxx系列用户程序升级过程。HID类的USB模块减少了产品跨平台应用于的灵活性。

笔者测试iTunes25K代码大约2秒钟,具备一定实用价值。参考文献[1]at91sam7s_full.pdf.Http://[2]HID1_11.pdf.。


本文关键词:开云(中国)Kaiyun,开云(中国)Kaiyun·官方网站,kaiyun全站app登录入口,云开kaiyun官方网站登录,kaiyun官方网站登录入口,yunkai云开网页版登录入口

本文来源:开云(中国)Kaiyun-www.bccs0769.com

「急」速开通,立刻拥有
注册
选择
购买
成功
高端售后服务
购买帮助
后台学习
故障修复
图片设计
技术支持