查看: 6097|回复: 8

[已解决] MKL25Z128的MCU,怎么用Bootloader跳转到FW--已解决

[复制链接]

该用户从未签到

34

主题

101

帖子

0

新手上路

Rank: 1

积分
293
最后登录
1970-1-1
发表于 2013-8-21 15:09:41 | 显示全部楼层 |阅读模式
我的KL25Z128的MCU里面,现在有2份code,一份是Bootloader,一份是AP。
我打算将MCU的前32K放Bootloader,从32K地址起放AP(实现功能的代码)。
之前我已经完成了AP部分,但AP是从0地址开始烧录到Flash里面的。
请问,如果我现在要把AP放到32K的地址里面,除了要改
MEMORY {
m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x00000400
m_vectram (RX) : ORIGIN = 0x1FFFF000, LENGTH = 0x00000410
m_text (RX) : ORIGIN = 0x00008410, LENGTH = 0x0001FBF0
m_data_1FFFF000 (RW) : ORIGIN = 0x1FFFF410, LENGTH = 0x00000BF0
m_data (RW) : ORIGIN = 0x20000000, LENGTH = 0x00003000
m_cfmprotrom (RX) : ORIGIN = 0x00008400, LENGTH = 0x00000010
}
这里,还有哪里要改呢?需不需要将中断向量映射到SRAM里面去吗?
我知道答案 目前已有7人回答
回复

使用道具 举报

该用户从未签到

1

主题

178

帖子

0

高级会员

Rank: 4

积分
825
最后登录
1970-1-1
发表于 2013-8-21 16:12:09 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

首先,m_cfmprotrom (RX) : ORIGIN = 0x00008400, LENGTH = 0x00000010对通过bootloader加载的APP没有意义,因为这个是设备复位时读取的,只有bootloader里的m_cfmprotrom才有意义。m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x00000400无需改在0x8000,因为这种情况下一般做法都是把中断向量表复制到SRAM,因为这样就无需考虑bootloader的中断向量表的匹配,所以m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400就可以了。m_text (RX) : ORIGIN = 0x00008410, LENGTH = 0x0001FBF0这个是对的,代码在flash运行,所以要把起始地址设为下载的地址。
祝顺利!!
回复 支持 反对

使用道具 举报

该用户从未签到

34

主题

101

帖子

0

新手上路

Rank: 1

积分
293
最后登录
1970-1-1
 楼主| 发表于 2013-8-21 19:15:19 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x00000400无需改在0x8000,因为这种情况下一般做法都是把中断向量表复制到SRAM,因为这样就无需考虑bootloader的中断向量表的匹配
SRAM有2个SRAM_L: Lower SRAM和SRAM_U: Upper SRAM
我应该复制到那个里面去?
复制了中断向量后,然后写到Flash里面。
复位MCU后,从0地址跳到0x8000地址,代码没问题,就可以正常运行了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

18

帖子

0

注册会员

Rank: 2

积分
52
最后登录
1970-1-1
发表于 2013-8-22 10:38:59 | 显示全部楼层

DMA问题

DMA传输数据超过边界
回复 支持 反对

使用道具 举报

该用户从未签到

34

主题

101

帖子

0

新手上路

Rank: 1

积分
293
最后登录
1970-1-1
 楼主| 发表于 2013-8-22 13:41:41 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

...............
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

178

帖子

0

高级会员

Rank: 4

积分
825
最后登录
1970-1-1
发表于 2013-8-22 13:43:06 | 显示全部楼层

回复:MKL25Z128的MCU,怎么用Bootloader跳转到FW

回复第 3 楼 于2013-08-21 19:15:19发表:
m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x00000400无需改在0x8000,因为这种情况下一般做法都是把中断向量表复制到SRAM,因为这样就无需考虑bootloader的中断向量表的匹配
SRAM有2个SRAM_L: Lower SRAM和SRAM_U: Upper SRAM
我应该复制到那个里面去?SRAM_L:
复制了中断向量后,然后写到Flash里面。什么意思?
复位MCU后,从0地址跳到0x8000地址,代码没问题,就可以正常运行了吗?
 
回复 支持 反对

使用道具 举报

该用户从未签到

34

主题

101

帖子

0

新手上路

Rank: 1

积分
293
最后登录
1970-1-1
 楼主| 发表于 2013-8-22 15:13:35 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

现在我碰到的问题是,代码都写到Flash的0x8000地址去了,但跳到0x8000地址的时候,无法正常执行AP。。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

178

帖子

0

高级会员

Rank: 4

积分
825
最后登录
1970-1-1
发表于 2013-8-22 16:25:26 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

你可以参考AN4370SW里的一个KL25的例程,里面用到了一个boot_app()的函数,你可以在run_app_iar.s里找到,具体看:
; AREA   CortexMx, CODE, READONLY      ; name
    SECTION .noinit : CODE (2)
  PUBLIC boot_app
;New_sp: r0
;New_pc: r1
boot_app:
  USH     {LR}
  msr      msp,r0  ;//set SP
  blx      r1       ;//run!
  POP      {PC}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  END
这个函数在boot_loader_task.c的369行被调用。
希望我的回答对你有帮助。
回复 支持 反对

使用道具 举报

该用户从未签到

34

主题

101

帖子

0

新手上路

Rank: 1

积分
293
最后登录
1970-1-1
 楼主| 发表于 2013-8-22 18:08:17 | 显示全部楼层

RE:MKL25Z128的MCU,怎么用Bootloader跳转到FW

好的,谢谢版主。我再仔细看看。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-19 13:56 , Processed in 0.103029 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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