DSP 程序远程升级 / Bootloader设计指南(一)—— 初识Bootloader/DSP引导流程

技术交流 & 最新设计指南获取方法

步骤1) 扫描下方二维码,进入微信公众号

步骤2) 获取最新指南,在公众号后台回复以下关键字:【bootloader】

步骤3) 有疑问,在公众号后台回复以下关键字:【交流群】


目录

1
初识Bootloader

1.1 一次Bootloader

1.2 二次Bootloader

1.3 DSP上电引导过程

2
关于c_int00

2.1 c_int00完成的工作

2.2 系统初始化

2.3 全局变量初始化

2.4 全局对象构造

2.5 main函数与exit函数的调用

3
CMD文件与DSP存储空间

3.1 MEMORY和SECTIONS指令

3.2 程序与数据“段”

4
Bootloader数据流

4.1 数据流结构

4.2 16-bit数据流

4.3 8-bit数据流

5
FLASH擦写操作 —— FLASH API的使用

5.1 FLASH操作的重要特点

5.2 FLASH API使用步骤

5.3 FLASH API常用函数使用举例

6
Bootloader设计过程中的9大关键点

6.1 Bootloader程序在升级过程中不被擦除的实现方法

6.2 上电后先进入Bootloader再跳转至main()函数的实现方法

6.3 Bootloader程序作为CCS应用程序工程一部分的实现方法

6.4 Bootloader与上位机形成交互式通信

6.5 Bootloader程序能够对接收数据校验的实现方法

6.6 在数据出错等情况下能够自动重启的实现方法

7
CCS输出文件格式 —— ASCII-Hex、Intel-Hex与Binary-Hex文件

7.1 CCS配置生成Hex文件的方法

7.2 ASCII-Hex

7.3 Intel-Hex

7.4 Binary-Hex


1 初识Bootloader

Bootloader即引导程序,一般指DSP上电复位后负责程序跳转至应用程序之前的出厂程序;也范指将程序数据由指定接口(如CAN)装载到固定区域的过程,包括一次Bootloader和二次Bootloader。

1.1 一次Bootloader

DSP上电复位后,会触发RESET中断,中断指向固化在片内ROM中的Bootloader代码。这是出厂就存在的引导程序,不可修改。它实现的功能是查询Bootloader模式,初始化接口,并从该接口中读取“固定大小”内的源程序并搬移到RAM中执行。这个过程叫一次引导。注意此时的Bootloader不会初始化与模式无关的外设。

1.2 二次Bootloader

对于小程序,只需要一次引导,但一般程序规模大于“固定大小(一般64K或1K)”,这时需要在一次Bootloader的基础上编写一个新的引导程序,这个引导程序不超过“固定大小”,而源程序则放在另外一处,这样在新的Bootloader程序中实现搬移源程序的工作。当系统复位时,一次引导把接口中的二次引导程序复制到RAM中执行,复位结束后,在RAM中执行二次引导,将目的源程序复制到FLASH中执行。即第二次引导实现真正的代码搬移,一次引导是二次引导的引导。

以上是常规意义的二次引导,另外一种方案是仅使用一次引导的程序跳转功能,不使用一次引导复制程序,而程序复制与装载由位于FLASH区的新编写的引导程序完成,实现真正的代码搬移,这里的二次Bootloader具有二次开发的意思。

1.3 DSP上电引导过程

当CPU上电时,会引起上电复位RESET。

RESET向量位于固化在boot ROM中的CPU Vector
Table。TMS320x2803x的CPU Vector Table位于地址0x3F E000 - 0x3F FFFF。

在这里插入图片描述

CPU Vector Table内容如下图,其中唯一可被正常响应的向量就是位于0x3F FFC0的RESET向量。RESET向量出厂固化为指向InitBoot函数,InitBoot函数位于上图中的Bootloader functions区域。

在这里插入图片描述

进入InitBoot函数后,开始执行Bootloader模式查询过程,并根据查询选择的模式根据需求判断是否调用接口函数(如CAN、SCI、I2C等)读取“固定大小”内的源程序并搬移到RAM中执行,或者直接进入入口地址(如FLASH启动,地址为FLASH用户可用区域的最后2字的位置),TMS320x2803x FLASH入口地址为0x3F 7FF6。至此,完成一次Bootloader过程。

在这里插入图片描述

当仅使用一次引导的程序跳转功能,不使用一次引导复制程序时,上图中条件判断“Call Get_Mode()?”和“Call Boot Loader?”将不被满足,从而执行“No”分支,最终默认配置将进入FLASH区域的BEGIN区(地址0x3F 7FF6)。

对于BEGIN区,查看CMD文件中的MEMORY指令,如下图。BEGIN位于PAGE 0,起始地址为0x3F 7FF6,长度为0x00 0002。(注:该地址恰好位于FLSAH用户可用区的末尾,且长度刚好可以存放一条长跳转语句)

在这里插入图片描述

对于BEGIN区内存放的程序段,查看CMD文件中的SECTION指令,如下图。可以看出程序段“codestart”将被存放于此。
在这里插入图片描述

那么“codestart”程序段里又是什么?查看工程中的“xxx_CodeStartBranch.asm”汇编源文件,如下图,BEGIN区将存放一条长跳转指令,该指令默认指向c_int00。

在这里插入图片描述

c_int00是C/C++程序的入口地址,用于完成C运行环境的初始化,最终跳转到main函数,开始运行应用程序。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值