如何使用HT66FB550 USB模块及IAP功能实现Flash ROM更新
- 格式:pdf
- 大小:881.66 KB
- 文档页数:11
基于IAP功能的USB方式软件更新方案
陈家义
【期刊名称】《自动化与信息工程》
【年(卷),期】2009(030)004
【摘要】文章在阐述应用编程(In Application Programming,IAP)原理的基础上,以LPC2214为平台设计并实现了基于ARM7的通用控制器的U盘软件升级方案.该方案方便快捷,摒弃了以往软件升级前的手工跳线、设备拆装等过程,并解决了升级过程意外中断、传输误码等技术问题.
【总页数】3页(P47-49)
【作者】陈家义
【作者单位】广西北海职业学院
【正文语种】中文
【相关文献】
1.基于USB总线方式的家庭内部联网解决方案 [J], 刘景磊;李晗;欧阳聪星;周建明
2.基于MC68HC908的系统软件更新方式的探讨 [J], 曹健;彭海静
3.基于 IAP 和 USB 技术的嵌入式系统应用程序升级新方法 [J], 张秀国
4.基于IAP和USB技术的嵌入式程序升级方法 [J], 孟志强;朱良焱;石瑜
5.赛普拉斯激活USB3.0市场——基于ARM9的高可编程性和差异化解决方案开启各式USB3.0应用 [J], 徐俊毅
因版权原因,仅展示原文概要,查看原文内容请购买。
基于IAP和USB技术的嵌入式系统应用程序升级新方法作者:张秀国来源:《计算机光盘软件与应用》2012年第22期摘要:对于内含IAP功能的嵌入式微控制器提出基于IAP和USB技术的系统应用程序升级的新方法。
U盘被用作程序代码的存储设备,将微控制器的存储器Flash和SRAM进行有效的区间分配,经外部扩展接口USB,微控制器将U盘里面的代码读入SRAM里的相应区间,再通过微控制器IAP功能把SRAM代码写入相对应的Flash分区里,实现嵌入式系统应用程序在线升级。
该方案受环境的影响非常小,嵌入式系统采取这种方法,应用程序的在线升级变的非常简单。
本文给出了这种方法详细的程序流程图以及实现技术。
关键词:IAP功能;USB技术;嵌入式系统;在线升级中图分类号:TP311.11 文献标识码:A 文章编号:1007-9599 (2012) 22-0000-031 IAP、USB技术及嵌入式系统的含义IAP(In Application Programming)是指在应用编程。
就是在程序运行过程中的编程,片子提供一系列机制(软件或硬件上的)当片子运行时候可以提供改变flash里面的数据的方法。
简单点讲,就是程序本身可向程序的存储器里修改程序或者写数据。
典型使用这种方式的应用就是通过一小段的代码实现程序下载,单片机里ISP功能就是IAP技术实现的,就是片子在出厂之前就有一段boot程序存在里面,当片子上电之后,这段程序就开始运行,一经检测到上位机上面有下载的要求就和上位机发生通信,接着就下载数据到达存储区。
USB(通用串行总线)是英文Universal Serial BUS的缩写,中文简称是“通串线,是一个外部总线的标准,用来规范外部设备和电脑的通讯及连接。
是个接口技术主要应用在PC领域,USB的接口支持设备热插拔及即插即用的功能。
嵌入式操作系统(Embedded Operating System,简称:EOS),即用在嵌入式系统里的操作系统。
基于 IAP 和 USB 技术的嵌入式系统应用程序升级新方法张秀国
【期刊名称】《计算机光盘软件与应用》
【年(卷),期】2012(000)022
【摘要】对于内含 IAP 功能的嵌入式微控制器提出基于 IAP 和 USB 技术的系统应用程序升级的新方法.U 盘被用作程序代码的存储设备,将微控制器的存储器Flash 和 SRAM 进行有效的区间分配,经外部扩展接口 USB,微控制器将 U盘里面的代码读入 SRAM 里的相应区间,再通过微控制器 IAP 功能把 SRAM 代码写入相对应的 Flash 分区里,实现嵌入式系统应用程序在线升级.该方案受环境的影响非常小,嵌入式系统采取这种方法,应用程序的在线升级变的非常简单.本文给出了这种方法详细的程序流程图以及实现技术.
【总页数】3页(P40-41,48)
【作者】张秀国
【作者单位】珠海城市职业技术学院,广东珠海 519090
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.基于无线IAP的工业嵌入式系统升级技术应用 [J], 彭亮;沈安文;张宁;周立峰
2.基于IAP的煤矿安检分站远程升级技术的研究 [J], 卢名哲
3.基于IAP的微控制器程序升级技术 [J], 顾程华;林宏飞;徐文卿
4.基于IAP和USB技术的嵌入式程序升级方法 [J], 孟志强;朱良焱;石瑜
5.基于ARM的煤矿监控分站IAP远程升级技术 [J], 丁远;刘鹏;邹德东;宁亮;毛红民
因版权原因,仅展示原文概要,查看原文内容请购买。
主板BIOS很容易受到各种各样的病毒侵扰,事实上也有众多的厂商将实用的技术投入到BIOS中去。
微星一年多开发的M-Flash功能正是这一技术的支持者之一,使用了这一技术的MSI主板即使在单BIOS的情况下刷新BIOS失败,也能通过特殊途径恢复主板,可惜的是这一功能并未受到广泛关注甚至很多人不知道如何使用。
因此特地联系MSI将这一操作过程汇聚成详细的图文说明,甚至不惜在更新BIOS到一半时故意关机,试验BIOS修复功能。
希望对微星的使用者有所帮助。
本文图片和教学以P55-GD65主板为例:一、准备U盘准备一个U盘,格式化为FAT/FAT32。
可以用XP的格式化工具。
大于1GB的U盘,如果想做成可以启动DOS的U盘,可以用HP的格式化工具。
不要用USBOOT软件格式化和制作可启动DOS的U盘。
二、M-FLASH菜单介绍开机时按Delete(DEL)键,进入BIOS设置界面。
右边有M-FLASH选项,光标移到此项,敲ENTER进入:进入M-FLASH菜单后,可以看到菜单分为2大部分:第一部分是:BIOS Update or Boot 2nd BIOS From USB Drive。
这里包括2项功能:更新BIOS和从U盘的BIOS启动。
第二部分是:Backup BIOS to USB Drive。
这是备份BIOS到U盘。
第一部分的右侧帮助栏提示:[BIOS Update]是从选定的文件更新BIOS ROM芯片数据。
[Boot]是指定BIOS文件后,系统将从存储在U盘的BIOS启动。
特别要注意的是红色文字提示:仅支持文件名为[A7583IMS]的BIOS文件和FAT/FAT32格式。
这里说明U盘必须是FAT/FAT32格式的,而且必须是该主板的BIOS。
在右侧下部可以看到主板的当前BIOS版本。
此例是[A7583IMS.141]。
三、更新BIOS我们先看看“更新BIOS”的操作。
先把下载的BIOS拷贝到U盘,插入U盘开机。
HT66FB5x0 / HT68FB5x0 USB Flash系列IC具备ISP功能的开发流程文件编码:HA0328S简介HOLTEK USB Flash MCU为新一代USB MCU,提供在线更新模式(ISP),包含HT66FB5x0(A/D type) 与HT68FB5x0 (I/O type) 两系列。
由HT-IDE3000的项目设置选择具有Bootloader,即可搭配HOPE3000、I3000等软件更新Flash。
本文将介绍如何搭配HT-IDE3000、HOPE3000、I3000、USB workshop、库文件Enable_BootLoder vx.x.lib来实现ISP烧录。
Bootloader功能及ISP烧录简介启用IDE3000的Bootloader功能,会占用0.5K Words的Flash ROM空间,如图1。
例如HT66FB550的Flash程序存储器大小为8K×16,若使用Bootloader功能,实际只有7.5K×16可供用户开发程序(该Bootloader Code只能通过e-WriterPro +HOPE3000软件烧录到IC中)。
因此程序可以分成两个部分,Bootloader Code和User Code,当要进行ISP烧录时,需要连接PC端的软件I3000.exe,它通过和Bootloader Code建立连接,来更新User Code部分的Flash ROM。
图1 带Bootloader的Flash程序存储器结构当程序执行在User Code,且要进行ISP烧录时,需要将程序跳转到Bootloader Code,方可连上I3000.exe进行ISP烧录,为此,HOLTEK提供了一个库文件,用户在IDE3000将其添加到项目中,在程序中判断到符合跳转到Bootloader的条件时,调用库文件Enable_BootLoader vx.x.lib提供的子程序ENABLE_BL来实现跳转,并通过标志位B_ENABLE_BL_OK判断是否成功跳转到Bootloader Code。
升级程序流程如图1所示,将nand flash划分为以下几个区域:一、u-loader存储u-loader启动程序区域,长度为1M。
二、u-bootBootcode程序主要有以下几点功能:1)系统启动硬件环境配置,包括PLL、Timer、DRAM控制配置。
2)基本外设驱动,包括调试UART、LCD、USB Mass Storage、NAND。
3)支持zlib库完成解压升级包。
(升级包采用zlib压缩)4)通过分区信息区提供的分区信息引导Linux内核。
5)通过在线升级区提供的升级包和系统参数区提供的信息升级软件系统。
6)通过USB Mass Storage设备和系统参数区提供的信息升级软件系统。
三、系统参数如图2所示,系统参数存储区域是存储系统的所有信息,包括主板硬件信息、屏信息、机身参数信息、软件中非用户操作信息(例如软件版本信息、MAC地址和HDMI码等等)、升级界面图片数据、升级标志位信息等等。
该区域的头为系统参数区域的幻数和有效地址长度。
该区域的有效数据累加和在本区域的最后32位存储区域,它是包括幻数在内的所有该区域的有效地址空间的累加和。
(每次系统启动需要完成该区域的累加和校验,如更改系统参数区域的数据则需要重新计算累加和。
)具体信息配置如下:系统参数区的幻数:0x0000ffff紧跟幻数的是系统参数区有效长度/**************************/主板信息存储数据结构体hardware_info是存储主板、硬件等各方面的信息。
/**************************/Struct hardware_info{Char memory_info[40];//内存信息Char cpu_info[40];//CPU信息Char flash_info[40];//flash信息Char motherboard_version[40];//电路板生产信息Char screen_info[40];//屏信息Char reserve0[40];Char reserve1[40];Char reserve2[40];DWORD reserve3;DWORD reserve4;DWORD reserve5;};/**************************/结构体tv_info是存储电视机型号、机芯型号等信息。
如何使用HT66FB550 USB模块及IAP 功能实现Flash ROM更新文件编码:HA0345S简介HT6xFB5x0系列MCU的Program Memory是Flash类型,其不仅提供ISP功能,还提供IAP功能。
IAP(In-Application Programming)是在线应用可编程,它可以使用内部程序更新存至Program Memory部分数据(如常量数组),而不需要烧录器。
本文将介绍如何使用HT66FB550的USB模块及IAP功能来实现Flash ROM的更新。
工作原理本文是通过HT66FB550的USB模块,从PC端向指定地址的Flash ROM空间发送更新数据或读取数据的命令,再通过IAP功能将从PC端接收到的数据写入Flash ROM或从FlashROM读出数据并返回给AP。
IAP功能IAP功能是MCU利用程序操作内部Flash相关的寄存器来实现擦除、写、读Flash ROM的内容。
HT66FB550与Flash ROM读写相关的寄存器有1组地址寄存器FARL、FARH,4组数据寄存器FDnL、FDnH(n=0~3)、2个控制寄存器FCR、FRCR。
写数据到数据寄存器时,先写低字节,再写高字节,写数据到数据寄存器的高字节时,地址寄存器会自动加"1"。
FARL和FDnL位于Bank 0中,它们能像其他特殊功能寄存器一样可以直接被访问。
而FARH,FDnH,FRCR和FCR位于Bank1中,不能直接被访问,只能通过MP1和IAR1进行间接读取或写入。
工作原理此IAP烧录主要实现的功能是通过USB模块及IAP功能来对IC需要更新的Flash ROM空间进行Program、Read、Erase等操作。
本文的下位机(HT6xFB5x0 Device端)程序中会定义一个16字节的常量数组,用来储存显示在数码管上的数据,该数组占用的ROM空间为待更新区域。
AP会发送Read Status命令从下位机读取该区域地址范围(具体命令格式请参见“通信协议”部分),并显示在AP的“ADDR”上。
AP可通过USB模块对该Flash ROM进行更新操作,再通过数码管将更新后的数据显示出来。
先在PC端AP上指定要烧录、读取及擦除的地址(在该待更新区域范围内),再操作AP 通过端点0控制传输方式(Get Report/Set Report)对下位机发送命令。
如果是Program命令,会将AP界面上输入的要更新的数据,通过端点1以中断传输方式发给下位机,由下位机通过IAP功能将这些数据写到Flash ROM中。
如果是Read 命令,会由端点2以中断传输方式返回指定地址的ROM data给AP。
通信协议Erase Command (Action_ Erase =0x01)•Action_ Erase(0x01)Erase下位机Flash ROM data的命令。
•StartAddrH/StartAddrL开始擦除的地址的高低字节。
•Bytes_S第一个Page擦除的字节数(只有一个Page时,当成首页),擦除时按Flash ROM地址操作,地址每加"1",对应擦除一个word,故该值为2至64(最大pagesize)间的偶数(包含2、64)。
•Bytes_E最后一个Page擦除的字节数,该值也为2至64间的偶数。
•PageCount需要擦除的Page数(包含第一个和最后一个Page)。
•CheckSumAP计算的checksum(前面7个字节的和取反加"1"),与Get Report阶段返回下位机计算出的checksum 比较,若二者不同,则数据有误,不进行Erase、Read、Program等命令的操作。
•VerifyChecksum下位机计算出的checksum,为Set Report阶段前面7个字节的和取反加"1"。
Read Command (Action_ Read =0x02)•Action_ Read(0x02)Read下位机Flash ROM data的命令。
当AP执行校验和查空时,也是向下位机发送read命令Program Command (Action_ Program =0x03)•Action_ Program(0x03)Program 下位机Flash ROM data的命令。
AP执行Program动作时由下面三个命令组成:Action_ Erase(先擦除) → Action_ Program(烧录) → Action_ Read(校验);Read Status (Action_ReadStatus =0x04)•Action_ ReadStatus(0x04)当下位机连上PC或要执行Program、Read、Erase操作时,AP会发送此命令来读取下位机相关信息。
•ActionStatus下位机当前的状态,空闲(0x00)或Erase或Read或Write。
•ICType返回IC型号代码(HT66FB550的IC Type暂定为"01")。
•ProgramStartAddrH/L待更新区域的起始地址高低字节。
•ProgramEndAddrH/L待更新区域的末地址高低字节。
Note:返回给AP的待更新区域地址范围为下位机指定的常量数组的地址范围,AP读回后会显示在界面"ADDR"上。
应用电路图应用电路主要由USB通信接口、数码管、复位电路、MCU等电路组成。
USB接口电路中USB信号在线的电阻电容主要是为了信号线的阻抗匹配,以减少干扰,提高通信的可靠性,减少USB数据传输过程中出现Data Error的概率。
整个电路由USB主机供电,若需使用烧录器烧录程序,请移除USB主机供电。
本文进行相关操作的Flash存储器地址设为0x0800~0x0807,用来存放16字节的常量数组,对应数码管显示的0~F的编码,连上AP后,通过USB通信及IAP功能重新编排数组里面元素顺序,从而改变数码管0~F显示的顺序。
也可连上烧录器e-WriterPro读出相应地址的数据进行比对。
S/W Function Block Flowchart程序主要实现的功能是在上电后,HT66FB550根据待更新区域的ROM data显示数码管,并使能USB模块,当枚举成功且连上PC端的AP时,由AP发送的命令,及USB端点1、2收发的数据,对指定地址范围的Flash ROM执行Program、Read及Erase等动作。
Program成功后,数码管显示的即是更新后的数据。
程序结构可分成主程序部分、USB枚举及数据传输、IAP相关操作等。
主程序部分流程图主要完成的功能有:数码管显示及判断是否进行IAP相关操作。
访问端点数据收发子程序EnableUSBBoot()流程图主要实现的功能有:根据访问的USB端点,来传输相应的数据,端点0主要进行枚举及接收、返回AP发送的命令,端点1用来接收要烧录的数据,端点2用来返回AP读取的ROM 数据。
端点1每次接收的数据均为64个字节,按page传送,即每个page占64个字节,当首末页不足一个page大小时,AP会自动将不足的部分填零,再发送给下位机。
端点2同理,在发送数据给AP时,会将不足一个page大小的部分填零。
端点0数据处理子程序AccessFIFO0()流程图主要实现的功能有:•根据端点0接收到的USB请求来返回相应的数据,完成枚举;•解析Set Report请求,获知AP接下来是要执行Program、Read还是Erase,并计算checksum;•解析Get Report请求,根据在Set Report阶段AP下达的命令,返回相应的数据,具体的数据格式可参考“通信协议”部分。
IAP烧录子程序IAPProgram()流程图主要实现的功能有:根据AP发送的命令是Program、Read还是Erase,对Flash ROM执行相应的动作。
AP程序主要函数说明程序中用到的访问USB的API函数属于hid.lib和setupapi.lib,hid.lib可参考附件AP程序文件,setupapi.lib为VS2008自带的库。
下面主要介绍程序里在查找USB设备、发送命令及收发数据时用到的几个函数:1.API_HIDFindDevice(HIDPARAMENT *nHIDParament,int nReadWrite);函数功能:根据nHIDParament 中的信息查找HID设备,并返回句柄。
HIDPARAMENT是在HID_Lib.h中声明的一个结构体,包含了VID、PID、Usage等信息。
nReadWrite为0时表示返回读句柄,为1时返回写句柄。
2.API_HIDReadFeture(HANDLE hHandle,BYTE *Buf1,BYTE *Buf2);函数功能:hHandle 为通过API_HIDFindDevice 获得的写句柄,Buf1用来存储对device下达的命令,并将device返回的信息保存在Buf2。
两个buffer第一个byte均为Report ID。
3.ReadFile(hReadHandle, //读文件句柄ReadReportBuffer, //将从device读取的数据保存到ReadReportBuffer65, //要读入的字节数,Report ID占一个byte,再加传送的数据大小NULL, //指向实际读取字节数的指针&ReadOverlapped //指定为异步读取数据); //用来从device读取flash ROM data4.WriteFile(hWriteHandle, //写文件句柄WriteReportBuffer, //数据缓存区指针,发送WriteReportBuffer的数据给device65, //要发送的字节数,Report ID占一个byte,再加传送的数据大小&BytesWritten, //用于保存实际写入字节数的存储区域的指针NULL //指定为同步读取数据); //用来向device发送写入flash ROM的数据上位机AP使用简介上位机AP界面当下位机(Device)连上PC时,AP会自动查找Device,并在界面显示Device的VID、PID及使用的IC型号,在"ADDR" 处会显示可编辑地址范围。
AP可根据"ADDR" 处的地址范围来对下位机相应地址的Flash ROM空间执行Erase、Program、Read等操作。
需要注意的是"ADDR" 上指定的地址须在可编辑地址范围内,否则AP会提示"Address format iserror ! " 的警告。