DSP在线升级程序步骤

合集下载

DSP程序在线升级报告(本人觉得最给力的资料)

DSP程序在线升级报告(本人觉得最给力的资料)

DSP程序在线升级唐俊松*******************.cn2015/12/04 1. 引言一般而言,DSP程序更新是在CCS环境下通过JTAG接口来实现的。

但JTAG烧写程序只能实现一对一烧写(即电脑到DSP),且不能远距离烧写程序。

而当产品发布后或需要同时升级多个DSP程序时,通过JTAG烧写程序则很难实现。

在线程序升级的主要思想是通过串口通信更新程序,通过串口通信可实现程序远程升级且可同时实现对多个DSP的程序更新,这有效地解决了JTAG烧写程序所存在的弊端。

1. 通过JTAG更新DSP程序2. 通过串口(RS232)更新DSP程序图1.1 通过不同方式实现DSP程序更新2. 程序在线升级的基本思想基于串口通信的程序在线升级功能框图如图2.1所示,底层程序(Prog Local)和应用程序(Prog App)分别由两个独立的CCS Project产生。

底层程序(Prog Local)是产品发布前通过JTAG烧写固化在DSP指定Flash空间中的程序,不允许用户修改和擦除,主要用于实现与上位机的通信,同时在需要升级程序时将上位机发送过来的程序代码烧写到FLASH中。

应用程序(Prog App)是可以更新的程序。

通过CCS编译产生程序代码文件(hex),然后通过RS232通信将程序代码发送到DSP,继而由底层程序(Prog Local)将应用程序代码烧写到应用程序所对应FLSH空间(Prog App)中。

图2.1 DSP程序在线升级功能框图在线升级程序流程图如图2.2所示。

DSP上电复位后先运行底层程序,在底层程序中判断是否需要升级,如不需要升级,则跳转到应用程序执行。

如需要升级,则擦除应用程序对应FLASH区,并将升级代码写入到应用程序FLASH区中。

图2.2 DSP程序更新流程图3. 在线程序升级的具体实现3.1 FLASH分配要实现程序在线升级,必须使底层程序和应用程序相互独立。

dsp28335 在线升级

dsp28335 在线升级

摘要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法。

描述了该在线升级方法的基本思想和实现步骤,给出了关键部分的程序代码。

实验证明,该方法简单可靠,可用于嵌入式设备软件程序的升级更新中。

关键词:在线升级; DSP;串口通信; FlashTMS320C2000系列DSP是美国德州仪器公司(简称TI)推出的集微控制器和高性能DSP特点于一身的DSP系列。

该系列的DSP具有强大的控制信号处理能力[1],能够实现复杂的控制算法。

随着电子技术的不断发展以及用户需求的不断提升,可能需要经常对已经投入使用的嵌入式设备程序进行更新,而目前一般的程序升级方法是实地取下设备,露出JTAG 端口后通过仿真器来更新程序[2-4]。

这种方法虽然简单有效,但对于某些特殊场合,会给程序升级带来了极大的不便[2]。

本文以TMS320F28035为例,描述了一种可以脱离JTAG仿真器,不改变DSP上电启动方式,实现TMS320C2000系列DSP应用程序在线更新的方法。

1 在线升级的基本思想一般的基于DSP的软件程序更新是在CCS环境下通过JTAG接口操作来实现的。

基于JTAG接口的方法虽然易于操作,而且调试方便,但经常受空间以及传输距离的限制。

例如一台DSP系统安装在复杂、封闭的环境下,当程序需要更新或升级时,利用JTAG接口难以实现程序的在线升级[3]。

而基于串口通信的在线升级技术是通过用底层程序烧写应用程序的方法来达到程序升级的目的,该方法则不受复杂系统和复杂环境的限制。

另外,在线升级方法不需要改变DSP的启动方式,直接采用DSP默认的内部Flash方式启动[5],从而省去了要对DSP的一些引脚进行硬件设置的麻烦。

底层程序指已经固化在DSP指定Flash空间中的程序,不允许用户修改和擦除,主要用于实现在线升级的时机判断、数据接收及代码烧写等功能,该程序中使用了Flash2803x_API库存函数(详见2.2节);应用程序即为用户的升级程序[3]。

DSP程序在线升级报告(本人觉得最给力的资料)

DSP程序在线升级报告(本人觉得最给力的资料)

DSP程序在线升级唐俊松*******************.cn2015/12/04 1. 引言一般而言,DSP程序更新是在CCS环境下通过JTAG接口来实现的。

但JTAG烧写程序只能实现一对一烧写(即电脑到DSP),且不能远距离烧写程序。

而当产品发布后或需要同时升级多个DSP程序时,通过JTAG烧写程序则很难实现。

在线程序升级的主要思想是通过串口通信更新程序,通过串口通信可实现程序远程升级且可同时实现对多个DSP的程序更新,这有效地解决了JTAG烧写程序所存在的弊端。

1. 通过JTAG更新DSP程序2. 通过串口(RS232)更新DSP程序图1.1 通过不同方式实现DSP程序更新2. 程序在线升级的基本思想基于串口通信的程序在线升级功能框图如图2.1所示,底层程序(Prog Local)和应用程序(Prog App)分别由两个独立的CCS Project产生。

底层程序(Prog Local)是产品发布前通过JTAG烧写固化在DSP指定Flash空间中的程序,不允许用户修改和擦除,主要用于实现与上位机的通信,同时在需要升级程序时将上位机发送过来的程序代码烧写到FLASH中。

应用程序(Prog App)是可以更新的程序。

通过CCS编译产生程序代码文件(hex),然后通过RS232通信将程序代码发送到DSP,继而由底层程序(Prog Local)将应用程序代码烧写到应用程序所对应FLSH空间(Prog App)中。

图2.1 DSP程序在线升级功能框图在线升级程序流程图如图2.2所示。

DSP上电复位后先运行底层程序,在底层程序中判断是否需要升级,如不需要升级,则跳转到应用程序执行。

如需要升级,则擦除应用程序对应FLASH区,并将升级代码写入到应用程序FLASH区中。

图2.2 DSP程序更新流程图3. 在线程序升级的具体实现3.1 FLASH分配要实现程序在线升级,必须使底层程序和应用程序相互独立。

一种基于DSP在线更新配置程序的实现方法

一种基于DSP在线更新配置程序的实现方法
F G 配 置数 据从 F AS 存 储 器 的 读取 和 配 置 控 制 ,以及 在 P A L H 不 进 行 加 载 配 置 时 , P对 F A H 存 储 器 的访 问 控 制 。DS DS L S P
完 成 和 工 控 机 通 信 , 收 配 置 数 据 , 入 F A H 存 储 器 相 应 接 写 LS
Ab t a t o P sr c : f GA n P p o i o nv r ls s m ei n i t d cn e h i u fo l e p o r m p ai g Us g F a d DS , r v d f ru i e s t d s , n r u i g a tc n q e o n— i r ga u d t . i a y e g o n n n l h f s m e  ̄ a mo so n c n g rt n aa c o e a n wi M CU ’ r g a , kn u e f CP D t u d t a d o f u e t r g o f u ai d t , o p rt g i i o i t h S p o r m ma i g s o L o p ae n c n g r i
总线 与 终 端 硬 件 连 接 ,终 端 硬 件 中 DS P采 用 T 3 0 6 1 , MS 2 C 4 6
F G 和 C L 采 用 A T RA公 司可 编 程 器件 。F A H 存 储 PA PD LE LS 器 芯 片 存 储 DS P相 关 程 序 和 F G 配 置 数 据 。 C L 完 成 PA PD
配 置 数 据 存 储 区 ,对 数 据 进 行 校 验 ,控 制 加 载 更 新 之 后 的程
序。
及互 操 作 能 力 ,越 来 越 多 的 系统 都 是 用能 够 重新 配 置 的软 件

DSP程序在线升级Bootloader开发指南

DSP程序在线升级Bootloader开发指南

DSP程序在线升级Bootloader开发指南一、介绍在嵌入式系统中,程序在线升级是一项非常重要的功能,能够提高系统的灵活性和可靠性。

而DSP程序在线升级则是特定于数字信号处理器(DSP)的一种实现方式,可以通过网络或其他通信方式,将新的程序固件传输到DSP芯片中,并进行升级。

二、准备工作在进行DSP程序在线升级的开发之前,需要完成以下准备工作:1.确定升级方式:选择升级的通信方式,如以太网、串口等。

2.备份原有程序:在进行升级前,应对原有程序进行备份,以防升级过程中出现问题导致程序丢失。

三、Bootloader设计1.引导程序:设计一个简单轻量的引导程序,用于控制DSP芯片的启动和升级过程。

引导程序需要能够读取外部存储器中的新程序固件,并将其加载到DSP芯片的指定存储区域中。

2.通信接口:根据选择的升级方式,设计相应的通信接口和协议。

接口可以是以太网、串口等,协议可以是TCP/IP、XMODEM等。

3.升级流程:设计升级的整个流程,包括连接建立、数据传输、校验验证等。

在升级过程中应提供重试机制和错误处理,确保升级的可靠性。

4.升级验证:设计升级完成后的验证机制,可以通过计算CRC校验、程序版本号等方式,验证新程序是否成功升级。

四、开发步骤1.编写引导程序:根据DSP芯片的文档和开发工具,编写引导程序,并将其烧录到DSP芯片中。

引导程序应能够读取外部存储器中的新程序固件,并将其加载到指定存储区域中。

2.设计通信接口:根据选择的升级方式,设计相应的通信接口和协议。

例如,如果选择以太网作为升级方式,则需要设计相应的网络通信协议,并编写相应的通信代码。

3.实现升级流程:在引导程序中实现升级的整个流程,包括连接建立、数据传输、校验验证等。

可以利用现有的通信库或协议栈来简化开发。

4.添加错误处理机制:在升级流程中添加错误处理机制,包括重试机制、错误提示等,确保升级的可靠性。

5.实现升级验证:在引导程序中添加升级完成后的验证机制,可以通过计算CRC校验、程序版本号等方式,验证新程序是否成功升级。

基于PCI总线的DSP28335程序在线升级方法的研究

基于PCI总线的DSP28335程序在线升级方法的研究

基于PCI总线的DSP28335程序在线升级方法的研究作者:李保霖蔡立华来源:《数字技术与应用》2012年第10期摘要:本文基于PCI总线的基础上,对DSP28335程序的在线升级方法进行了研究,开发了上位机端程序和DSP端核程序,为DSP技术开发和维护人员提供了一个方便快捷的维护程序的方法。

关键词:DSP28335 程序烧写引导装载中图分类号:TP368.1 文献标识码:A 文章编号:1007-9416(2012)10-0085-021、引言TMS320F28335是TI公司DSP2812的升级产品,是目前专门用于控制领域的最高性能的芯片,具有浮点运算功能,其控制精度高、运行速度快,同时具有用于控制的各种接口,很容易将系统的多种控制功能集中在一个芯片上完成,目前已在各个控制领域的嵌入式系统中广泛的应用[1]。

DSP28335嵌入了128×16的Flash存储器,用于用户存放程序代码和运行数据。

但对于大部分控制系统而言,需要远程更改和进一步完善程序,而利用仿真器的方式下载程序需要专业技术人员才能完成,所以当需要修改程序时,往往需要技术人员到设备的现场进行操作,显然,这种方式增加了设备的维护成本。

为了解决这个问题,就需要嵌入式系统具有软件的在线升级功能。

目前,软件在线升级已经成为嵌入式系统的不可缺少的功能,为系统的调试、维护和功能的完善提供了一种有效的手段。

而对于基于PCI总线的嵌入式系统而言,可以采用基于PCI总线的DSP28335程序在线升级工具对程序进行更新。

2、程序设计DSP28335程序在线升级的程序设计主要包括两部分的内容,首先利用仿真器,在DSP上烧写一个核程序,该核程序主要完成从PCI总线发送来的DSP系统的运行程序代码,由于DSP对Flash进行擦除和烧写时要求的实时性很高,所以在设计此段程序时,要求先将PCI发送来的数据存放到DSP内部的数据存储器中,等接收完整个程序数据,经过校正无误后,程序关闭中断,对Flash的程序存储区进行擦除、烧写程序。

DSP2812的FLASH在线升级

DSP2812的FLASH在线升级

DSP2812的FLASH在线升级当开发人员把工业控制电路板或产品发出去给客户使用后,紧接着面临的问题是如何对板级芯片升级。

我们不可能要求所有客户会使用仿真器,让工程售后服务人员去每一个厂家升级也不切实际,况且客户分布在全国各地,甚至世界的各个角落。

那我们就必须要做到像升级应用程序一样,插上U盘或者系统联网后点下按钮就能完事。

目前很多公司的新系统都面临着此类的问题。

习惯使用仿真器的开发者开始了新的挑战。

这方面资料网上比较少,即使找到成功的案例他们也只说成功了,却没有提及到如何成功。

我们唯一能确定的是这是可以的,但得自己去摸索,去实践。

我正在做的是dsp2812的flash在线升级。

也就是说在不用仿真器的情况下把程序烧写到片上flash中。

TI官方公布了一些资料,其中包括1.通过windows的程序sdflash利用串口烧写flash,需要几个先决条件(网上可以下载到)1)安装sdf28xx_v3_3_serial.exe和setupCCSPlatinum_v30329.exe2)根据《2812串口烧写Flash步骤及设置.pdf》操作此方法我没有成功,但是有几点我可以肯定,首先没有从flash启动,应该是从SCI_A启动的,串口可以通讯(不过当做发送文件试验时只能发送10个字节就不行了)。

没有找到问题所在,希望以后有机会能够搞懂。

2.片上flash不能从一个扇区操作另一个扇区。

也就是说flash的程序复制升级数据到flash上是不行的。

这里采取3个步骤1)升级前把程序(升级部分)拷到内存中运行(后面会讨论)2)内存中的程序擦除flash(本文需要叙述的)3)内存中的程序把升级的数据(我们通过双口ram从ARM传过来)烧写进flash,并验证。

(本文需要叙述的)3.TI已经公布了操作flash的API库,头文件,需要注意的事项和例子,装好sdflash软件,在该目录下可以找到这些东西(C:\CCStudio_v3.3\specdig\sdflash\mydrivers\DSP281x_v3_3\Flash281x_API\Flash2 812_API_V210)。

dsp tms320f28335 在线升级资料2(参考论坛博客)

dsp tms320f28335 在线升级资料2(参考论坛博客)

通过串口SCI更新DSP28335的用户程序一、FLASH地址分配及cmd文件改写1.存储器flash分配0x30 0000 - 0x30 7FFF FLASHH0x30 8000 - 0x30 FFFF FLASHG0x31 0000 - 0x31 7FFF FLASHF0x31 8000 - 0x31 FFFF FLASHE0x32 0000 - 0x32 7FFF FLASHD0x32 8000 - 0x32 FFFF FLASHC0x33 0000 - 0x33 7FFF FLASHB0x33 8000 - 0x33 FF7F FLASHA/*内存分配* 用户程序可写入下面的区域,目前128K,如果不够还可以将F盘添加进来;* 也可将A盘添加进来,但是A盘有程序锁,添加该部分需要做相应的处理。

** FLASHE : origin = 0x318000, length = 0x008000 // on-chip FLASH* FLASHD : origin = 0x320000, length = 0x008000 // on-chip FLASH* FLASHC : origin = 0x328000, length = 0x008000 // on-chip FLASH* FLASHB : origin = 0x330000, length = 0x008000 // on-chip FLASH**USER_CODE: SECTORB|SECTORC|SECTORD|SECTORE *BOOT_LOADER_CODE: SECTORG|SECTORF //(F 盘为BOOT备用盘,目前没有使用)* FLASH_API_CODE: SECTORH2.cmd文件其中用户程序中的cmd文件请注意:我把codestart写到了FLASHE的起始地址,这样当升级完程序后bootload程序应该接着运行USER_CODE段,此段正好在FLASHE中,所以程序就开始从更新的用户程序运行。

最新DSP在线升级程序步骤资料

最新DSP在线升级程序步骤资料

目标板:C2000的28335/28069一、主要思路:1、准备升级程序(相当于一个bootloader),作为上电首先运行的程序。

进入升级程序,首先判断需不需要升级,需要升级,进入升级状态,通信完成新的主程序的接收,存入,升级成功后,进入主程序运行。

2、在主程序运行时,收到升级指令,标记升级标志,重启进入升级程序进去升级。

3、板子上电后,会调到flash启动的起始地址0x33FFF6(DSP28335),这个地址存放着程序的codestart 的其实地址。

所以,修改了0x33FFF6的存放的值,那么就能决定执行那一段程序。

还可以通过汇编跳转指令直接跳转到程序codestart执行。

二、升级程序1、具备能力:具备通信能力和Flash读写能力2、准备:Flash API移植、上位机的升级配套程序;存储升级标志位的空间(外部EEPROM,不会随便擦除的内部Flash)3、流程:接收->校验->烧写->跳转三、升级步骤1、数据接收:通过CAN/串口等方式接收数据。

由于28335内存较小,不适合缓存大量的数据,这里是接收一部分数据,校验完成后烧写进Flash,再去接收一部分数据2、数据解析:接收到的数据是hex格式的数据,所以需要解析才能放入对应的flash地址。

但由于28335能力限制,这里采用先在上位机解析完成,采用先告知地址,然后发送数据的方式完成数据通信和传输。

3、校验:这里采用crc校验。

/*******************************************************Name : crc16*Function: crc校验16位*Params : data(UInt8 *):待操作的数组 len:数据长度*Return : UInt16:返回CRC值 CRC校验码为2个字节高位在前*******************************************************/UInt16 crc16(Uint8 *data, UInt16 len){UInt16 CRC = 0xFFFF;UInt8 j, TMP = 0;UInt8 i;for (i = 0; i < len; i++){CRC ^= data[i];for (j = 0; j < 8; j++){TMP = CRC & 0x0001;CRC = CRC >> 1;if(TMP)CRC = CRC ^ 0xA001;}}return CRC;}4、数据烧写flash:运用flash API提供的接收完成数据的烧写。

DSP板卡类的应用程序的在线升级方法[发明专利]

DSP板卡类的应用程序的在线升级方法[发明专利]

专利名称:DSP板卡类的应用程序的在线升级方法专利类型:发明专利
发明人:高娟
申请号:CN202010656741.0
申请日:20200709
公开号:CN111857776A
公开日:
20201030
专利内容由知识产权出版社提供
摘要:本发明属于DSP系统下在线升级应用程序技术领域,具体涉及一种DSP板卡类的应用程序的在线升级方法,包括:首先,根据监控程序和应用程序划分Flash地址空间;其次,加载FlashAPI 的动态库;然后,将应用程序的out文件转化成bin文件。

通过串口将bin文件的二进制数据发送给监控程序进行在线升级。

最后,如需要升级,则使用FlashAPI进行数据的写入和验证,如果操作失败则给出错误信息提示用户;如不需要升级则设置规定时间等待,如没收到相关指令则默认跳转到应用程序入口执行。

该方案通过FlashAPI进行在线升级,读写速度和安全性极大提高,同时使用串口进行数据收发并对数据进行验证,既提供了监控程序运行状态,又保证了烧写过程中数据交互过程的合法性。

申请人:天津津航计算技术研究所
地址:300308 天津市东丽区空港经济区保税路357号
国籍:CN
代理机构:中国兵器工业集团公司专利中心
代理人:周恒
更多信息请下载全文后查看。

DSP在线升级程序步骤

DSP在线升级程序步骤

目标板:C2000的28335/28069一、主要思路:1、准备升级程序(相当于一个bootloader),作为上电首先运行的程序。

进入升级程序,首先判断需不需要升级,需要升级,进入升级状态,通信完成新的主程序的接收,存入,升级成功后,进入主程序运行。

2、在主程序运行时,收到升级指令,标记升级标志,重启进入升级程序进去升级。

3、板子上电后,会调到flash启动的起始地址0x33FFF6(DSP28335),这个地址存放着程序的codestart 的其实地址。

所以,修改了0x33FFF6的存放的值,那么就能决定执行那一段程序。

还可以通过汇编跳转指令直接跳转到程序codestart执行。

二、升级程序1、具备能力:具备通信能力和Flash读写能力2、准备:Flash API移植、上位机的升级配套程序;存储升级标志位的空间(外部EEPROM,不会随便擦除的内部Flash)3、流程:接收->校验->烧写->跳转三、升级步骤1、数据接收:通过CAN/串口等方式接收数据。

由于28335内存较小,不适合缓存大量的数据,这里是接收一部分数据,校验完成后烧写进Flash,再去接收一部分数据2、数据解析:接收到的数据是hex格式的数据,所以需要解析才能放入对应的flash地址。

但由于28335能力限制,这里采用先在上位机解析完成,采用先告知地址,然后发送数据的方式完成数据通信和传输。

3、校验:这里采用crc校验。

/*******************************************************Name : crc16*Function: crc校验16位*Params : data(UInt8 *):待操作的数组 len:数据长度*Return : UInt16:返回CRC值 CRC校验码为2个字节高位在前*******************************************************/UInt16 crc16(Uint8 *data, UInt16 len){UInt16 CRC = 0xFFFF;UInt8 j, TMP = 0;UInt8 i;for (i = 0; i < len; i++){CRC ^= data[i];for (j = 0; j < 8; j++){TMP = CRC & 0x0001;CRC = CRC >> 1;if(TMP)CRC = CRC ^ 0xA001;}}return CRC;}4、数据烧写flash:运用flash API提供的接收完成数据的烧写。

注意:请先进行DSP程序更新后,再进行MCU程序更新。.pdf

注意:请先进行DSP程序更新后,再进行MCU程序更新。.pdf

注意:请先进行DSP程序更新后,再进行MCU程序更新。

请参考方法一进行MCU程序更新方法一:第一步:将UPS接入市电,并通过RS232线连接UPS和电脑。

第二步:运行烧录软件“ReflashTool.exe”,确保所有占用端口的软件处于关闭状态(端口号必须小于10),包括UPS的监控软件。

第三步: 选择连接UPS的端口,波特率选择19200.第四步:点击“Update MCU ”开始烧录MCU程序。

第五步:当进度条为100%时, DSP程序升级成功。

第六步:关闭烧录程序如果升级失败,关闭软件,然后重复上面的步骤。

若依然无法烧录,参考方法二如果通过方法一烧录失败,可以通过方法二进行烧录。

Part 2方法二:注意:下面的烧录方法以XXX_with_boot.hex程序为例也可以下载其他程序,并以下述方法进行烧录。

1.硬件要求a)一台带有串口和USB口的电脑b)通讯线2.线路连接a)关闭UPS的所有电源,通过USB线和RS232线连接UPS和电脑b)打开软体更新开关至“I”或者“空”注意:当UPS在正常工作状态,这个开关为“O”,如果UPS需要升级程序,这个开关为“I”,当升级完成后,这个开关必须转回“O”状态。

c)只上市电,数秒后将USB通讯线拔出,UPS屏幕此时无显示,然后连接RS-232通讯线3.软件需求在电脑中安装下述软体<STM32 serial ISP download tool.rar>4.程序更新打开刚刚安装的软件“flash loader demonstrator”见下图a.修改波特率为14400或者更低波特率,然后按“Next”如果通讯失败,电脑出现如下信息,请尝试关闭软件与重新插拔RS-232线,多次尝试。

如果不行请关掉市电,重新上电重新以上步骤1-2的拔插操作,再继续完成更新。

b.如果通讯OK,则按“Next”c.按照默认按“Next”:d.先选择Erase (Erase非常重要),然后选择“Next”e.Erase完成之后,选择“Back”,然后选择“download to device”,如下图所示f.请选择烧录文件“36-001424-05G.HEX”后选择“Next”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目标板:C2000的28335/28069一、主要思路:1、准备升级程序(相当于一个bootloader),作为上电首先运行的程序。

进入升级程序,首先判断需不需要升级,需要升级,进入升级状态,通信完成新的主程序的接收,存入,升级成功后,进入主程序运行。

2、在主程序运行时,收到升级指令,标记升级标志,重启进入升级程序进去升级。

3、板子上电后,会调到flash启动的起始地址0x33FFF6(DSP28335),这个地址存放着程序的codestart 的其实地址。

所以,修改了0x33FFF6的存放的值,那么就能决定执行那一段程序。

还可以通过汇编跳转指令直接跳转到程序codestart执行。

二、升级程序1、具备能力:具备通信能力和Flash读写能力2、准备:Flash API移植、上位机的升级配套程序;存储升级标志位的空间(外部EEPROM,不会随便擦除的内部Flash)3、流程:接收->校验->烧写->跳转三、升级步骤1、数据接收:通过CAN/串口等方式接收数据。

由于28335内存较小,不适合缓存大量的数据,这里是接收一部分数据,校验完成后烧写进Flash,再去接收一部分数据2、数据解析:接收到的数据是hex格式的数据,所以需要解析才能放入对应的flash地址。

但由于28335能力限制,这里采用先在上位机解析完成,采用先告知地址,然后发送数据的方式完成数据通信和传输。

3、校验:这里采用crc校验。

/*******************************************************Name : crc16*Function: crc校验16位*Params : data(UInt8 *):待操作的数组 len:数据长度*Return : UInt16:返回CRC值 CRC校验码为2个字节高位在前*******************************************************/UInt16 crc16(Uint8 *data, UInt16 len){UInt16 CRC = 0xFFFF;UInt8 j, TMP = 0;UInt8 i;for (i = 0; i < len; i++){CRC ^= data[i];for (j = 0; j < 8; j++){TMP = CRC & 0x0001;CRC = CRC >> 1;if(TMP)CRC = CRC ^ 0xA001;}}return CRC;}4、数据烧写flash:运用flash API提供的接收完成数据的烧写。

这里要注意flash API必须运行在RAM 中。

5、完成数据烧写后,需要跳转到主程序。

一般采用汇编指令。

汇编指令asm("LB 0xXXXXXX")或者汇编函数。

这里采用asm的方式,跳转地址为新应用程序的起始地址,这里必须规定每次跟新的新应用程序的起始地址必须固定。

asm(" LB 0x3xxxxx");如果是使用变动的起始地址,则必须采用汇编函数,把地址作为参数传进函数。

四、主程序1、接收升级指令后,能够标志升级状态。

重启进入升级程序,进行判断,进而升级程序。

2、主程序运行后,升级状态标记为不用升级状态。

五、注意点1、升级程序与主程序要严格分开,合理分配flash空间,附升级程序和主程序cmd大致分配空间。

主程序cmd文件/*********************************************************************** File: f28335_nonBIOS_flash.cmd -- Linker command file for non-DSP/BIOS* code with DSP in Boot to Flash boot mode.** History: 09/18/07 - original (D. Alter)**********************************************************************/MEMORY{PAGE 0: /* Program Memory */BEGIN_M0 : origin = 0x000000, length = 0x000002 /* Part of M0SARAM. Used for "Bo ot to M0" bootloader mode. */FLASH_PROGRAMS : origin = 0x310000, length = 0x000010 /* On-chip FLASH */FLASH_PROGRAM : origin = 0x310010, length = 0x01FFF0 /* On-chip FLASH */ZONE7A : origin = 0x200000, length = 0x010000CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASH Sector A. Reserve d when CSM is in use. */BEGIN_FLASH : origin = 0x33FFF6, length = 0x000002 /* Part of FLASH Sector A. Used fo r "Jump to flash" bootloader mode. */PASSWORDS : origin = 0x33FFF8, length = 0x000008 /* Part of FLASH Sector A. CSM p assword locations. */ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved me mory */OTP : origin = 0x380400, length = 0x000400 /* 1Kw OTP */IQTABLES : origin = 0x3FE000, length = 0x000B50 /* Part of Boot ROM */IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* Part of Boot ROM */FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* Part of Boot ROM */BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* 8Kw Boot ROM */RESET : origin = 0x3FFFC0, length = 0x000002 /* part of Boot ROM */FLASH_CONST : origin = 0x300000, length = 0x010000PAGE 1 : /* Data Memory */M0SARAM : origin = 0x000002, length = 0x0003FE /* 1Kw M0 SARAM */M1SARAM : origin = 0x000400, length = 0x000400 /* 1Kw M1 SARAM */DRAM : origin = 0x008000, length = 0x008000PIEVECT : origin = 0x000D00, length = 0x000100ZONE7B : origin = 0x210000, length = 0x010000// FLASH_DATA : origin = 0x330000, length = 0x008000 /* On-chip FLASH */}SECTIONS{/*** Compiler Required Sections ***//* Program memory (PAGE 0) sections */.text1 : {DSP2833x_CodeStartBranch.obj(.text)}> FLASH_PROGRAMS, PAGE = 0.text2 : {*(.text)}> FLASH_PROGRAM, PAGE = 0.cinit : > FLASH_PROGRAM, PAGE = 0.const : > FLASH_PROGRAM, PAGE = 0.econst : > FLASH_CONST, PAGE = 0.pinit : > FLASH_PROGRAM, PAGE = 0.reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset secti on */.switch : > FLASH_PROGRAM, PAGE = 0.cio : > FLASH_PROGRAM, PAGE = 0/* Data Memory (PAGE 1) sections */.bss : > DRAM, PAGE = 1.ebss : > DRAM, PAGE = 1.stack : > DRAM, PAGE = 1.sysmem : > ZONE7B, PAGE = 1.esysmem : > ZONE7B, PAGE = 1/*** User Defined Sections ***/codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.as m */csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file passwords.asm */ internalMemFuncs : > FLASH_PROGRAM, PAGE = 0 /* Used by file Xintf.c. Link to internal memory */passwords : > PASSWORDS, PAGE = 0 /* Used by file passwords.asm *//* Section secureRamFuncs used by file SysCtrl.c. */ramfuncs : LOAD = FLASH_PROGRAM, PAGE = 0 /* Should be Flash */RUN = ZONE7A, PAGE = 0 /* Must be CSM secured RAM */LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart)/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD}/******************* end of file ************************/升级程序cmd文件/*********************************************************************** File: f28335_nonBIOS_flash.cmd -- Linker command file for non-DSP/BIOS* code with DSP in Boot to Flash boot mode.** History: 09/18/07 - original (D. Alter)**********************************************************************/MEMORY{PAGE 0: /* Program Memory */BEGIN_M0 : origin = 0x000000, length = 0x000002 /* Part of M0SARAM. Used for "Bo ot to M0" bootloader mode. */FLASH_PROGRAM : origin = 0x330000, length = 0x005000 /* On-chip FLASH G*/FLASH_PROGRAM1 : origin = 0x335000, length = 0x001000 /* On-chip FLASH G*/FLASH_CONST : origin = 0x336000, length = 0x001000 /* On-chip FLASH G*/ZONE7A : origin = 0x200000, length = 0x010000CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASH Sector A. Reserve d when CSM is in use. */BEGIN_FLASH : origin = 0x33FFF6, length = 0x000002 /* Part of FLASH Sector A. Used fo r "Jump to flash" bootloader mode. */PASSWORDS : origin = 0x33FFF8, length = 0x000008 /* Part of FLASH Sector A. CSM p assword locations. */ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved me mory */OTP : origin = 0x380400, length = 0x000400 /* 1Kw OTP */IQTABLES : origin = 0x3FE000, length = 0x000B50 /* Part of Boot ROM */IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* Part of Boot ROM */FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* Part of Boot ROM */BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* 8Kw Boot ROM */RESET : origin = 0x3FFFC0, length = 0x000002 /* part of Boot ROM */PAGE 1 : /* Data Memory */M0SARAM : origin = 0x000002, length = 0x0003FE /* 1Kw M0 SARAM */M1SARAM : origin = 0x000400, length = 0x000400 /* 1Kw M1 SARAM */DRAM : origin = 0x008000, length = 0x008000PIEVECT : origin = 0x000D00, length = 0x000100ZONE7B : origin = 0x210000, length = 0x010000//FLASH_DATA : origin = 0x330000, length = 0x008000 /* On-chip FLASH B*/}SECTIONS{Flash28_API:{-lFlash28335_API_V210.lib(.econst)-lFlash28335_API_V210.lib(.text)} LOAD = FLASH_PROGRAM1,RUN = ZONE7A,LOAD_START(_Flash28_API_LoadStart),LOAD_END(_Flash28_API_LoadEnd),RUN_START(_Flash28_API_RunStart),PAGE = 0/*** Compiler Required Sections ***//* Program memory (PAGE 0) sections */.text : > FLASH_PROGRAM, PAGE = 0.cinit : > FLASH_PROGRAM, PAGE = 0.const : > FLASH_PROGRAM, PAGE = 0.econst : > FLASH_CONST, PAGE = 0.pinit : > FLASH_PROGRAM, PAGE = 0.reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset secti on */.switch : > FLASH_PROGRAM, PAGE = 0.cio : > FLASH_PROGRAM, PAGE = 0/* Data Memory (PAGE 1) sections */.bss : > DRAM, PAGE = 1.ebss : > DRAM, PAGE = 1.stack : > DRAM, PAGE = 1.sysmem : > ZONE7B, PAGE = 1.esysmem : > ZONE7B, PAGE = 1/*** User Defined Sections ***/codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.as m */csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file passwords.asm */ internalMemFuncs : > FLASH_PROGRAM, PAGE = 0 /* Used by file Xintf.c. Link to internal memory */passwords : > PASSWORDS, PAGE = 0 /* Used by file passwords.asm *//* Section secureRamFuncs used by file SysCtrl.c. */ramfuncs : LOAD = FLASH_PROGRAM, PAGE = 0 /* Should be Flash */RUN = ZONE7A, PAGE = 0 /* Must be CSM secured RAM */LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart)/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD}/******************* end of file ************************/2、固定程序起始地址的方法为,codeStartBranch.asm的其实地址,即codestart的其实地址,这里使用.text1 : {DSP2833x_CodeStartBranch.obj(.text)}> FLASH_PROGRAMS, PAGE = 0.text2 : {*(.text)}> FLASH_PROGRAM, PAGE = 0详见主程序cmd文件描述。

相关文档
最新文档