DSP bootloader原理及过程

DSP复位后的启动运行过程

复位后DSP自动在RESET段(0x3FFFC0) 处查寻到运行入口地址:

在这里插入图片描述

参考数据手册,可知地址0x3FFFC0在引导ROM区域,该区域是出厂固化好数据的,

在这里插入图片描述
如过连接仿真器,可在连接芯片后的调试界面中,发现当前程序执行位置为:0x3FF16A
接着追溯到地址0x3FF16A地址中继续查看数据(此处不再继续往下追溯!)
这里固化的数据就是TI固化的Boot(一次boot)。这段程序结束后回就回跳转到芯片上FLASH的地址0x08 0000,去执行用户第一条指令。

在DSP工程中,对于不同型号的芯片,需要添加不同的文件,此处以F2837xD_CodeStartBranch.asm ;此文件中定义了codeStart函数;codeStart函数对应.cmd文件中的.codeStart段,如下图:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
codeStart段被映射到BEGIN区域,BEGIN区域如上图所示。
上图BEGIN被定位在0x0A0000处,因为这里使用了二次boot,应用程序存放在0x0A 0000
处。默认不使用二次boot时,此处默认值为0x08 0000.

一次boot运行结束后进入0x08 0000处执行,此处因该是二次boot的存放区域。用户完成二次boot工程后,应部署在此位置。

在不使用二次boot时,应用程序部署在0x08 0000 位置,应用程序的第一条指令就在这个位置,是一条跳转指令(机器码),实际对于的汇编语言就是 LB _c_int00,也就是对应上图中codeStart函数中的代码。

进入用户main函数之前的隐藏过程

DSP复位启动后,进入一次boot,执行完毕后跳转到0x08 0000地址执行应用程序。
0x08 0000处存储第一条指令是跳转指令,即跳转到codeStart函数中执行语句 BL _c_int00

_c_int00函数的作用:
为用户编写的应用层代码初始化寄存器以及堆栈等。
_c_int00函数在库文件boot28.asm中,无需用户操作。在此函数中会调用函数:
_args_main()函数,最终_args_main函数调用用户的main函数。
在这里插入图片描述

1,插仿真器仿真运行函数,程序会受仿真器的引导去执行用户代码,即使用户代码不在地址 0x08 0000
2,非仿真运行环境,用户的应用代码不在0x08 0000 且在0x08 0000处无二次boot程序来引导进入用户的应用代码,则应用程序无法运行
3,擦除FLASH的函数不能再FLASH中运行,需要拷贝再RAM中执行
4,FLASH擦写操作需要使用到官方的提供的文件
5,需要修改.CMD文件,对二次boot程序和应用程序重新分配空间(不可重叠)
6,跳转指令 asm("LB  0x08 4000")
7,二次boot程序和应用程序是两个独立的工程,生成两个输出文件,二次boot必须存储再0x08 0000 起始处。二次boot最后需要调用跳转指令跳转到应用程序所在的地址空间执行。
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值