【DSP程序升级】程序升级/OTA/BootLoader开发

一.启动流程

  1. 一次BOOT,TI官方固化好的一次BootLoader(启动模式:IO口,IIC,UART,CAN等外设启动)
  2. c_int00C函数
  3. boot28.asm
  4. args_main
  5. main
    在这里插入图片描述
    在这里插入图片描述
    仿真器连接时在这里插入图片描述
    在这里插入图片描述
    boot28.asm 所有c28x系列都有,初始化栈指针
    在这里插入图片描述
    跳转args_main
    在这里插入图片描述return main

在这里插入图片描述
跳转到用户的main函数
在这里插入图片描述

二.CMD文件

1.一次bootloader所跳转的地址,长度是2,只能存放两条语句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意定义好APP分配的大小
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二.程序更新思路在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
DSP 28379 的 Bootloader 程序通常用于更新 DSP 的固件程序,以支持新的功能或修复已知的 bug。以下是一个简单的 DSP 28379 Bootloader 程序的示例: ```c #include "F2837xD_device.h" #include "F2837xD_Examples.h" #include "bl_config.h" #include "flash.h" #include "c1_bootrom.h" #define FLASH_ENTRY_POINT (void (*)(void))0x3F4000 #define APP_START_ADDRESS 0x3F8000 void InitFlashAPI(void); void main(void) { uint16_t status; uint32_t appSize; uint32_t appChecksum; void (*appEntry)(void); uint32_t i; InitSysCtrl(); InitFlashAPI(); if (SCIBoot()) { status = Boot(); if (status == BL_SUCCESS) { // Jump to application appEntry = (void (*)(void))APP_START_ADDRESS; (*appEntry)(); } } else { // Check if application is valid status = VerifyApplication(APP_START_ADDRESS, &appSize, &appChecksum); if (status == BL_SUCCESS) { // Erase application flash sector status = EraseApplication(APP_START_ADDRESS, appSize); if (status == BL_SUCCESS) { // Program application flash sector for (i = 0; i < appSize; i += FLASH_SECTOR_SIZE) { status = ProgramFlash(APP_START_ADDRESS + i, FLASH_SECTOR_SIZE, (uint16_t *)(APP_START_ADDRESS + i)); if (status != BL_SUCCESS) { break; } } if (status == BL_SUCCESS) { // Verify application status = VerifyApplication(APP_START_ADDRESS, &appSize, &appChecksum); if (status == BL_SUCCESS) { // Jump to application appEntry = (void (*)(void))APP_START_ADDRESS; (*appEntry)(); } } } } } // If we reach here, there was an error // Handle the error appropriately } void InitFlashAPI(void) { Flash_CallbackPtr = &Flash_Callback; EALLOW; FlashRegs.FBFALLBACK = 0x5A5A0000; FlashRegs.FBFALLBACK |= 1 << 12; // Enable fallback mode EDIS; } #pragma CODE_SECTION(Flash_Callback, "ramfuncs") void Flash_Callback(void) { // Handle flash events here } ``` 该程序的主要功能如下: 1. 初始化系统控制器和 Flash API。 2. 如果通过 SCI 接口启动,则执行 Bootloader 程序并跳转到应用程序。 3. 如果通过 JTAG 接口启动,则检查应用程序是否有效。 4. 如果应用程序有效,则擦除应用程序所在的 Flash 扇区,然后将应用程序写入 Flash。 5. 如果写入成功,则验证应用程序并跳转到应用程序。 6. 如果出现任何错误,则需要适当地处理错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨同舟1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值