查看: 1875|回复: 5

[求助] LPC11u68如何实现串口升级代码

[复制链接]

该用户从未签到

6

主题

18

帖子

0

注册会员

Rank: 2

积分
119
最后登录
2022-1-26
发表于 2022-1-5 10:50:24 | 显示全部楼层 |阅读模式
没太看懂官方IapFlash例程,可以在APP中直接对APP区域操作进行擦除重写吗?还是需要重新对中断向量表做重映射,制作BOOT和app?
我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2020-12-17 09:04
  • 签到天数: 346 天

    [LV.8]以坛为家I

    19

    主题

    94

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1361
    最后登录
    2024-1-15
    发表于 2022-1-5 14:16:24 | 显示全部楼层
    您好,针对这个问题建议您首先对该MCU的Flsha有一个比较详细的了解。下面附上一张Flash的地址空间。在执行IAP的upgrade之前确保你的APP程序code已经写入进去了。举个例子,例如user ram是从0x0000000开始的有效地址范围为64K,您可以分配0x00000000-0x00000400为16K为bootloader,后面44K为APP程序地址,最后的4预留下来不要写满,有些重要的OTP程序可能存储在其中。至于怎么跳转可以参照一下官方其他LPC系列的MCU,通用移植性很高。下面附上一个example:

    当程序全部写入到Flash后,设置出发条件,跳转到应用程序,首先修改中断向量表然后进入应用程序
    void Boot( void )
    {
            SCB->VTOR = IMG_START_SECTOR & 0x1FFFFF80;        //修改中断向量表
            JMP_Boot(IMG_START_SECTOR);
    }
    堆栈地址更新,PC地址更新
    __asm void JMP_Boot( uint32_t address ){
       LDR SP, [R0]                ;堆栈地址更新
       LDR PC, [R0, #4]        ;进入应用程序
    }
    243.jpg
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-1-5 14:22:27 | 显示全部楼层
    楼上这回帖,授人以渔啊
    赞一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2022-1-5 14:35:24 | 显示全部楼层
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    18

    帖子

    0

    注册会员

    Rank: 2

    积分
    119
    最后登录
    2022-1-26
     楼主| 发表于 2022-1-6 16:26:34 | 显示全部楼层
    一代睡神的崛起 发表于 2022-1-5 14:16
    您好,针对这个问题建议您首先对该MCU的Flsha有一个比较详细的了解。下面附上一张Flash的地址空间。在执行I ...

    1. 在bootloader中设置如下:使用0-50K地址范围制作bootloader
    bootloader memory.png
    2.在APP中设置代码段为SAM地址范围 前10K做代码段,后面22K留作SRAM,将生成的BIN文件用JLINK下载到Flash 0XC800处
    app memory.png

    跳转代码如下:

    static void jump_to_upgrade(void)
    {
    #define USER_SRAM_ADDRESS  0x10000000
            typedef void (*iapFun)(void);
            iapFun appMain= (iapFun)*(uint32_t*)(USER_SRAM_ADDRESS+4);;
           
            NVIC->ICER[0] = 0xFFFFFFFF; // ¹Ø±ÕÖжÏ
            NVIC->ICPR[0] = 0xFFFFFFFF; // Çå³ýÖжϱê־λ
            __DSB();
            __ISB();

            memcpy((uint32_t *)USER_SRAM_ADDRESS, (uint32_t *)0xc800, (10*1024) );
            Chip_SYSCTL_Map(0x01);
            MSR_MSP(*(uint32_t*)0x00, *(uint32_t*)(USER_SRAM_ADDRESS+4));
    }

    1.关闭中断
    2.将0xc800处APP代码拷贝代RAM(0x10000000)中
    3.将中断向量表重映射到RAM中
    4.设置堆栈指针,跳转到复位向量

    跳转后程序并没有成功?







    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-17 09:04
  • 签到天数: 346 天

    [LV.8]以坛为家I

    19

    主题

    94

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1361
    最后登录
    2024-1-15
    发表于 2022-1-18 10:31:48 | 显示全部楼层
    lving 发表于 2022-1-6 16:26
    1. 在bootloader中设置如下:使用0-50K地址范围制作bootloader

    2.在APP中设置代码段为SAM地址范围 前10K ...

    读出flash看看地址是否连续,或者flash是否被成功写入
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 07:29 , Processed in 0.139189 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表