【AM2634】启动和调试
目录
- 【AM2634】启动和调试
- 1. 上电流程
- 1.1 BootFlow and Bootloader
- 1.2 Rom Code
- 1.2.1 功能介绍
- 1.2.2 模式选择
- 1.2.2.1 QSPI Boot
- 1.2.2.2 UART Boot
- 1.2.2.3 Dev Boot
- 1.3 SBL
- 1.3.1 文件构成
- 1.3.2 文件构建
- 1.3.3 appimage解析和core启动流程
- 1.4 Appimage
- 1.4.1 RPRC文件构成
- 1.4.2 Multicore Appimage文件构成
- 1.4.3 构建流程
- 2. 程序下载
- 2.1 UART
- 2.2 JTAG
- 3. 仿真调试
【AM2634】启动和调试
1. 上电流程
前两个流程都是硬件部分的工作,从Rom code
开始是需要我们了解的。
- Rom Code:板载Bootloader(RBL - Rom Bootloader)
- Initial Software:应用程序的Bootloader(SBL - Second Bootloader)
- Application Image:应用程序
在我们的程序设计中,用户设计的Bootloader就是上面的(Application),然后再启动用户的应用程序。
1.1 BootFlow and Bootloader
下面是从上电到启动的整体框图。
1.2 Rom Code
1.2.1 功能介绍
此Rom Code可以理解为厂家提供的Bootloa r,此部分程序固定在芯片中,上电的时候会先运行此部分程序,Rom Code代码可以分为Hard Init(仅Boot Process所需资源)
和Boot Process
两部分。其中Boot Process
具备以下功能:
- 查找并执行SBL程序
- 下载SBL程序并执行
Boot Porcess 结构框图如下图所示:
此Rom Code可以理解为厂家提供的Bootloa r,此部分程序固定在芯片中,上电的时候会先运行此部分程序,Rom Code代码可以分为Hard Init(仅Boot Process所需资源)
和Boot Process
两部分。其中Boot Process
具备以下功能:
- 查找并执行SBL程序
- 下载SBL程序并执行
Boot Porcess 结构框图如下图所示:
RBL的作用是用于引导SBL
,再由SBL去引导应用程序。
官方说明:出于安全原因,第一个引导加载程序(RBL)通常保存在安全的只读内存中,并且在应用程序软件启动之前始终具有已知状态。因此,让这个引导加载程序保持简单,并让它只做所需的最低配置是有意义的。这个辅助引导加载程序(SBL)可以很复杂,也可以进行配置,以满足应用程序的需要。与第一阶段引导加载程序相比,这也可以很容易地更新。
1.2.2 模式选择
Rom Code为了适应多种系统场景,还具备多种引导模式:
每个模式对应的引脚配置如下图所示:
以以上多种模式可以分为两类:
- Host boot modes(从不同的外设启动,例如Uart、CAN)
- Memory boot modes(从不同的内存启动,例如Flash、SD)上多种模式可以分为两类:
- Host boot modes(从不同的外设启动,例如Uart、CAN)
- Memory boot modes(从不同的内存启动,例如Flash、SD)
1.2.2.1 QSPI Boot
启动后会去Flash的0地址处解析并加载SBL
因此在此之前,需要通过串口或者CCS将SBL下载到FLASH
1.2.2.2 UART Boot
RBL启动会进入串口模式,通过Xmodem协议加载SBL(注意这里下载完SBL后会立马跳转至SBL执行)
1.2.2.3 Dev Boot
RBL启动会进入Debug模式,通过CCS + JTAG完成SBL和appimage下载
1.3 SBL
SBL(Seconed Bootloader)
1.3.1 文件构成
1.3.2 文件构建
参考资料:从TI的官网上可以找到。
- 将输出的.out文件转.bin
- 将.bin文件通过openssl进行签名(这里要安装python等和openssl等,参见官网)
1.3.3 appimage解析和core启动流程
SBL对appimage的解析流程和Core的启动流程如下图所示:
1.4 Appimage
1.4.1 RPRC文件构成
typedef struct Bootloader_RprcFileHeader_s
{
uint32_t magic;
uint32_t entry;
uint32_t rsvdAddr;
uint32_t sectionCount;
uint32_t version;
} Bootloader_RprcFileHeader;
typedef struct Bootloader_RprcSectionHeader_s
{
uint32_t addr;
uint32_t rsvdAddr;
uint32_t size;
uint32_t rsvdCrc;
uint32_t rsvd;
} Bootloader_RprcSectionHeader;
1.4.2 Multicore Appimage文件构成
typedef struct Bootloader_MetaHeaderStart_s
{
uint32_t magicStr;
uint32_t numFiles;
uint32_t devId;
uint32_t rsvd;
} Bootloader_MetaHeaderStart;
typedef struct Bootloader_MetaHeaderCore_s
{
uint32_t coreId;
uint32_t imageOffset;
} Bootloader_MetaHeaderCore;
typedef struct Bootloader_MetaHeaderEnd_s
{
uint32_t rsvd;
uint32_t magicStringEnd;
} Bootloader_MetaHeaderEnd;
1.4.3 构建流程
通过转换工具实现文件转换
- 将.out文件通过out2rpc转换为.rprc
- 将
- 多个.rprc通过multiCoreGen集成为.appimage
2. 程序下载
2.1 UART
-
在.cfg文件中编写下载程序的指令(rom code将该程序下载到OCSRAM并执行,后续通过该程序继续下载sbl/appimage)
--flash-writer={path to flash application .tiimage}
例子:–flash-writer=sbl_uart_uniflash.release.tiimage
-
在.cfg文件中编写下载sbl程序的指令
--file={path to QSPI bootloader .tiimage} --operation=flash --flash-offset=0x0 //指定flash偏移地址0
例子:–file=sbl_qspi.release.tiimage --operation=flash --flash-offset=0x0
-
在.cfg文件中编写下载appimage程序的指令
--file={path to your application .appimage file} --operation=flash --flash-offset=0x80000
-
将boot mode pin设置成uart boot mode
-
上电
-
打开串口工具检查板子是否发送"C"(xmodem协议)
-
断开串口连接
-
通过命令行(cmd)执行程序下载
python uart_uniflash.py -p {name of your UART com port} --cfg={path to your edited config file}
2.2 JTAG
-
boot mode pin设置成Devboot mode
-
设置芯片型号
-
连接芯片
-
复位芯片
-
下载sbl_jtag_uniflash.out文件
-
运行程序
运行后在输出框可以见到如下内容:
-
通过Console命令行操作flash
-
下载sbl文件
-
下载appimage文件
到这里程序就下载进去了。
3. 仿真调试
将boot mode设置成devboot模式
① 步骤一
② 步骤二
③ 步骤三
④ 步骤四
⑤ 步骤五