DSP TMS320F28335串口二阶bootloader详解

在上个公司因业务需要进行了28335的二阶boot开发 苦于网上相关资源过少,TI的网站又出身保密局 专业藏文档,自己历经一个月的摸索编写了boot驱动源程序,在这里将原理和内容分享给大家。

思路

将程序分为两个工程,即BOOT引导程序和用户程序,boot引导程序储存在单独的sector里,用户程序存在另外的sector,引导完成后使用指针进行跳转

生成HEX文件

.out文件不能直接进行BOOT烧写,需要将用户程序的.out文件转换为HEX,BOOT程序先用烧写器烧写进芯片,然后再讲HEX通过串口发送到芯片由BOOT程序完成烧写,这里可以使用HEX2000等工具软件完成,注意HEX文件格式应为 地址-数据 地址-数据 或一个地址(flash sector)后跟一坨数据,在分配BOOT程序地址时应注意不与用户程序地址冲突 否则会出现花里胡哨的BUG

CMD文件修改

因为28335的flash只能按sector擦除,Boot引导程序和用户程序需要储存在不同的Flash sectoer中,故需要在CMD文件中进行修改,先让程序进入Boot引导程序,进行要升级程序的接收,在RAM里运行擦除及烧写flash,然后再跳转到用户程序执行。
以将BOOT程序存在flashA为例 需要修改的地方如下:

 FLASHA      : origin = 0x338002, length = 0x007F7E     /* on-chip FLASH */
 BEGIN       : origin = 0x338000, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
				Flash28_API:
				{
					-lFlash28335_API_V210.lib(.econst)
					-lFlash28335_API_V210.lib(.text)
				} LOAD = FLASHA,
				RUN = RAML0,
				LOAD_START(_Flash28_API_LoadStart),
				LOAD_END(_Flash28_API_LoadEnd),
				RUN_START(_Flash28_API_RunStart),
				PAGE = 0


			   /* Allocate program areas: */
			   //.USER_CODE		   : > FLASHE      PAGE = 0
			   .cinit              : > FLASHA   PAGE = 0
			   .pinit              : > FLASHA   PAGE = 0
			   .text               : > FLASHA   PAGE = 0
			   codestart           : > BEGIN    PAGE = 0
			//	ramfuncs           : > FLASHH   PAGE = 0
			   ramfuncs            : LOAD = FLASHA,
			                         RUN = RAML0,
			                         LOAD_START(_RamfuncsLoadStart),
			                         LOAD_END(_RamfuncsLoadEnd),
			                         RUN_START(_RamfuncsRunStart),
			                         PAGE = 0

升级过程

当不需要升级程序时需要跳过Bootloader进入主程序,这里我的思路为等待超时0.5S未收到上位机指令则认为不需要升级程序,直接跳转到用程序,跳转代码如下:

#define FlashH 0x300000
Uint32 BeginAdress=FlashH; //为了后期可进行由上位机指定的地址烧写,可不用
inline void UserMain()
{
	(*(void(*)(void))BeginAdress)();
}

当需要进行烧写时,则用到了TI的flash API,协议可由自己拟定,若文件较小可采用单次接收完再烧写,文件较大则采用上位机分包。这里提供烧写示例和擦除示例:

char Erase_Sec_Once(Uint16 Sector)
{
	char outflag = 0xff;
	DINT;
	if(SysCtrlRegs.PLLSTS.bit.MCLKSTS==0)outflag=Flash_Erase(Sector, &FlashStatus);
	EINT;
    return outflag;
}
		if(Erase_Sec_Once(SECTORH|SECTORG|SECTORF|SECTORE|SECTORD|SECTORC|SECTORB)!= STATUS_SUCCESS) UartXmit("EraseErro\r\n");
		else UartXmit("OK\r\n");
    	if(Flash_Program((Uint16 *)ProgAdress,(Uint16 *)UartBuf,DatNum,&FlashStatus)!=STATUS_SUCCESS) UartXmit("ProgramErro\r\n");
   		else ProgAdress+=DatNum;

Flash_Erase和Flash_Program均为TI提供的API函数
烧写完成后由指针跳转到用户函数,即烧写的首地址

注意,进行BOOT烧写后不能再使用调试器进行烧写或调试,否则会覆盖掉boot程序,这里建议首先将用户程序调试完成再由BOOT烧写,
本程序的源码已经上传到我的CSDN下载里(来自白嫖党的凝视)(https://download.csdn.net/download/qq_35364022/11240579)
本程序不再免费开源,技术支持可联系主页qq。
本程序仅供参考,需要配合上位机软件才能正常使用,包含断点续传、指定地址等功能,希望有所帮助。

### 回答1: 28335在线bootloader是指一种软件,可以用于启动和加载嵌入式系统。它的作用是在开发和更新嵌入式系统时,提供一种方便的方式来加载和升级固件。在线意味着该bootloader可以直接通过网络连接,实现在远程设备上更新软件。28335则是Texas Instruments TMS320F28335芯片的型号,该芯片主要用于工控领域的数字信号处理和控制应用。 28335在线bootloader可以在编程模式下,通过串口或以太网等方式,远程加载新的固件。在前端应用程序开发和测试时,它也可以提供一种便捷的调试方式。应用程序可以躲过flash编程,并直接利用芯片的RAM进行开发和调试。 28335在线bootloader内存占用较少,而且也具有灵活性和可扩展性等优点。该bootloader支持地址修订表(ATB)方式更新,还能够支持多种固件格式,如ELF、Intel HEX、Motorola S和二进制文件等。如果需要实现在线更新,程序员可以通过简单的配置和连接来完成,可以大大提高开发效率和用户体验。 在实际的工业应用中,使用28335在线bootloader可以大大缩短固件更新和升级的时间,也降低了硬件开发和维护的成本。此外,该bootloader还具有可靠性和稳定性等优点,能够在工业环境下长时间稳定运行。 ### 回答2: 28335在线bootloader是一种实时操作系统的引导程序,能够在没有任何操作系统的情况下,启动处理器并运行应用程序。它可以直接与硬件设备进行通信,管理系统资源,协调任务。28335在线bootloader通过软件设计,使其特殊定制的代码可以在不同的硬件配置上进行移植。因此,它可以适用于各种不同的嵌入式系统和电子设备中。 由于28335在线bootloader的使用,可以极大地简化开发过程。在开发过程中,程序员不必考虑部分硬件操作和资源管理的问题,而只需集中精力在编写和优化应用程序。此外,bootloader还支持网络协议和各种外设的接口,这使得嵌入式平台能够更加便捷地实现各种功能。 综上所述,28335在线bootloader是一种可靠的、高效的嵌入式系统引导程序。它具有非常强大的功能,可以极大地简化开发过程和提高开发效率。相信在未来,随着技术和市场的不断发展,它将会在更多领域中得到广泛应用。 ### 回答3: 28335在线bootloader指的是一种可在28335芯片上启动的bootloader程序。在嵌入式系统中,bootloader是一种固化在芯片上的程序,可以对系统进行初始化、设定、下载程序等操作,是系统启动的第一步。在线bootloader可以在系统运行时进行更新,而不需要重新启动系统,具有很高的可移植性和灵活性。 28335在线bootloader在实践中有着广泛的应用,例如智能家居、电子产品制造、工业控制等领域。其具有如下特点: 1.支持多种通信协议。28335在线bootloader可以实现通过多种通信方式与PC或其他设备进行通信,例如RS232、CAN、USB等。 2.支持灵活的存储器分配。28335在线bootloader可以根据用户需求灵活分配存储空间,可以存储多个程序或固件。 3.具有高度的可靠性和稳定性。28335在线bootloader经过长时间实践和应用,具有稳定的运行和低错误率。 4.支持远程更新。28335在线bootloader可以通过网络进行远程更新,可以在不同的设备上进行固件更新和维护。 5.具有良好的用户交互界面。28335在线bootloader的用户交互界面友好,易于使用和操作。 总之,28335在线bootloader是一种功能强大、灵活、稳定、可靠的嵌入式系统程序。在未来的发展中,其将在越来越多的领域得到广泛的应用和推广。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值