搜索
bottom↓
回复: 36

LPC4357使用内部两块flash?在Keil中怎么设置,请高手解答!

[复制链接]

出0入0汤圆

发表于 2015-1-2 15:49:37 | 显示全部楼层 |阅读模式
LPC4357 how use both internal flash areas (2x 512kByte) as one (1MB)
刚刚开始搞NXP的微控制器,LPC4357(ARM® Cortex™-M4和Cortex-M0双核架构),内部有两块flash,官方的例程给出了四种下载到内部flash的配置方法,如下:

Following Targets are for Flash-based parts only!
(Valid Flash Signature is created with ElfDwT tool. See "Options for Target" - "User")

  LPC4357 Flash BankA:      configured for on-chip Flash BankA
                            (Booting from BANK A)

  LPC4357 Flash BankA Mix:  configured for on-chip Flash BANK A & BANK B
                            (Booting from BANK A)

  LPC4357 Flash BankB:      configured for on-chip Flash BankB
                            (Booting from BANK B)

  LPC4357 Flash BankB Mix:  configured for on-chip Flash BANK A & BANK B
                            (Booting from BANK B)
但是看Keil里面的配置没有看出什么区别呀!还请高手解答。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

发表于 2015-1-2 16:21:49 | 显示全部楼层
你把第二个勾勾上不就完了?

出0入0汤圆

 楼主| 发表于 2015-1-2 16:43:25 | 显示全部楼层
hantnt 发表于 2015-1-2 16:21
你把第二个勾勾上不就完了?

我也这样想,但是我用了一个emWin例程程序有600多K,勾不勾,程序下载到里面都能正常运行。用户手册的Memory mapping如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-2 16:46:00 | 显示全部楼层
本帖最后由 WXLmjr 于 2015-1-2 16:51 编辑
WXLmjr 发表于 2015-1-2 16:43
我也这样想,但是我用了一个emWin例程程序有600多K,勾不勾,程序下载到里面都能正常运行。用户手册的Mem ...


主要方法是用编译后占用Flash超过512K的例程来实验的。下面是工程编译后的大小

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-2 16:57:27 | 显示全部楼层
本帖最后由 WXLmjr 于 2015-1-2 17:01 编辑
WXLmjr 发表于 2015-1-2 16:46
主要方法是用编译后占用Flash超过512K的例程来实验的。下面是工程编译后的大小 ...


我甚至尝试删除Flash Download中 Programming Algorithm 的Flash BankB只剩一个Flash BankA,但600多K的程序下载到板子上还是可以正常运行,Keil里面的这些设置难道没有用处吗????????(注:每次更改设置之后都是重新完全编译一次才下载到开发板的)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-1-2 17:07:48 | 显示全部楼层
CM4 +CM0? 还不是双核了,  好奇如何配置各自ROM,

出0入0汤圆

发表于 2015-1-2 17:17:23 | 显示全部楼层
WXLmjr 发表于 2015-1-2 16:46
主要方法是用编译后占用Flash超过512K的例程来实验的。下面是工程编译后的大小 ...

你的代码并没有超出512K哦,

出0入0汤圆

发表于 2015-1-2 17:20:38 | 显示全部楼层
你试试读取你定义的常量里面的数据是否出问题

出0入0汤圆

发表于 2015-1-2 17:22:59 | 显示全部楼层
然后你在看看keil在下载的时候进度条是否有跳到1B000000地址去下载

出0入0汤圆

 楼主| 发表于 2015-1-2 20:55:20 | 显示全部楼层
hantnt 发表于 2015-1-2 17:17
你的代码并没有超出512K哦,


按照下图的说法,下载到Flash里面的代码是超过512K的!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-2 21:03:06 | 显示全部楼层
hantnt 发表于 2015-1-2 17:22
然后你在看看keil在下载的时候进度条是否有跳到1B000000地址去下载

不管勾不勾 IROM2,下载的时候进度条都会跳到1B00 0000地址去。

出0入0汤圆

 楼主| 发表于 2015-1-2 21:09:10 | 显示全部楼层
本帖最后由 WXLmjr 于 2015-1-3 11:17 编辑
hantnt 发表于 2015-1-2 17:22
然后你在看看keil在下载的时候进度条是否有跳到1B000000地址去下载


如果删除BankB的编程算法,下载的时候进度条就不会跳到1B00 0000地址去了,会出现下面的结果,但奇葩的是整个emWin例程还能完整的运行???明明flash装不下程序呀!不解?
No Algorithm found for: 1B000000H - 1B00FFFFH
No Algorithm found for: 1B010000H - 1B01FFFFH
No Algorithm found for: 1B020000H - 1B02FFFFH
No Algorithm found for: 1B030000H - 1B03FFFFH
No Algorithm found for: 1B040000H - 1B04FFFFH
No Algorithm found for: 1B050000H - 1B05FFFFH
No Algorithm found for: 1B060000H - 1B0657DBH
Partial Erase Done (areas with no algorithms skipped!)
No Algorithm found for: 1B000000H - 1B00FFFFH
No Algorithm found for: 1B010000H - 1B01FFFFH
No Algorithm found for: 1B020000H - 1B02FFFFH
No Algorithm found for: 1B030000H - 1B03FFFFH
No Algorithm found for: 1B040000H - 1B04FFFFH
No Algorithm found for: 1B050000H - 1B05FFFFH
No Algorithm found for: 1B060000H - 1B0657DBH
Partial Programming Done (areas with no algorithms skipped!)
Partial Verify OK (areas with no algorithms skipped!)
Application running ...

出0入0汤圆

发表于 2015-1-2 21:40:18 | 显示全部楼层
WXLmjr 发表于 2015-1-2 21:09
如果删除BankB的编程算法,下载的时候进度条就不会跳到1B00 0000地址去了,会出现下面的结果,但奇葩的是 ...

注意我说的是你代码大小没有超过512K哦,只读数据没下载进去仅仅是读出数据出错罢了。

出0入0汤圆

 楼主| 发表于 2015-1-3 11:20:37 | 显示全部楼层
hantnt 发表于 2015-1-2 21:40
注意我说的是你代码大小没有超过512K哦,只读数据没下载进去仅仅是读出数据出错罢了。 ...

emWin例程的只读数据大部分应该是界面的图片数据,如果读出数据错误的话,应该画面显示会有问题,我特意比较了两个画面(例程运行时间比较长,动画片似的),发现删除BankB编程算法,例程的画面没有一点问题,还能完整显示运行。

出0入12汤圆

发表于 2015-1-4 14:18:10 | 显示全部楼层
WXLmjr 发表于 2015-1-3 11:20
emWin例程的只读数据大部分应该是界面的图片数据,如果读出数据错误的话,应该画面显示会有问题,我特意 ...

你总共有了多少 flash ?

出0入0汤圆

 楼主| 发表于 2015-1-4 15:29:16 | 显示全部楼层
abutter 发表于 2015-1-4 14:18
你总共有了多少 flash ?

按照 下载到flash的大小等于 Code + RO-Date + RW-Date = 176522 + 655282 + 4740 = 836544 Byte 约等于857KB。超过了512KB

出0入0汤圆

发表于 2015-1-4 15:52:18 | 显示全部楼层
我记得要用分散加载的方式,算法里把BankB也放进去。

出0入0汤圆

发表于 2015-1-4 17:57:57 | 显示全部楼层
楼上正解,这种情况一般用分散加载方式,你看下你的MDK里面link里面有没有一个.sct文件?

出0入0汤圆

发表于 2015-1-12 21:56:14 | 显示全部楼层
huangqi412 发表于 2015-1-2 17:07
CM4 +CM0? 还不是双核了,  好奇如何配置各自ROM,

这是个M4来控制M0的,M4上电后需要对M0进行初始化,交代明白它的代码运行起始地址。之后启动M0 。
不过,基于MDK的M0调试没有摸索清楚。不知道ULINK2/JLINK是否可以调试。

出0入0汤圆

发表于 2015-1-12 22:33:59 | 显示全部楼层
ST_ATMEL_NXP 发表于 2015-1-12 21:56
这是个M4来控制M0的,M4上电后需要对M0进行初始化,交代明白它的代码运行起始地址。之后启动M0 。
不过, ...

ULINK2可以完美调试,Jlink似乎要简单设置一下。

LPC5410x的双核调试起来比LPC43系列更简单些。

出0入0汤圆

发表于 2015-1-12 22:37:57 | 显示全部楼层
ST_ATMEL_NXP 发表于 2015-1-12 21:56
这是个M4来控制M0的,M4上电后需要对M0进行初始化,交代明白它的代码运行起始地址。之后启动M0 。
不过, ...

就是说M0上电后不会自主启动,要用M4给他参数来启动,M0地址由M4任意指定?  写程序如何写的,M0和M4分别建立工程么? M0的ROM和M4的ROM合并后下载?  RAM是共享还是各自划一块用

出0入0汤圆

发表于 2015-1-12 22:39:35 | 显示全部楼层
再附上一个 双核笔记吧,应该是宋岩写的

http://www.lpcware.com/zh-hans/c ... 8%E7%AC%94%E8%AE%B0

出0入0汤圆

发表于 2015-1-12 23:11:46 | 显示全部楼层
huangqi412 发表于 2015-1-12 22:37
就是说M0上电后不会自主启动,要用M4给他参数来启动,M0地址由M4任意指定?  写程序如何写的,M0和M4分别 ...

需要两个工程的,M0的地址由M4来引导,M0代码位置在编写的时候就定义好了。AHB总线上的SRAM/FLASH资源需要提前划分好,各用各的不能冲突。
刚才用MDK+jlink调试M0。可以进入仿真,但是进不到main函数中。待解决。。。。。

出0入0汤圆

发表于 2015-1-12 23:12:37 | 显示全部楼层
magicoe 发表于 2015-1-12 22:39
再附上一个 双核笔记吧,应该是宋岩写的

http://www.lpcware.com/zh-hans/content/project/lpc43xx%E5%8F% ...

恩,这个我看了,也是按照他提供的代码测试的。不过没有测试通过,M0内核进不去main函数,但是可以进入仿真环境。

出0入0汤圆

发表于 2015-1-12 23:24:52 | 显示全部楼层
ST_ATMEL_NXP 发表于 2015-1-12 23:11
需要两个工程的,M0的地址由M4来引导,M0代码位置在编写的时候就定义好了。AHB总线上的SRAM/FLASH资源需 ...

Jlink需要特别的设置,具体我也记不得了,明天上班再看看。你有ULINK2么?可以试试ULink2。

出0入0汤圆

发表于 2015-1-13 09:24:58 | 显示全部楼层
magicoe 发表于 2015-1-12 23:24
Jlink需要特别的设置,具体我也记不得了,明天上班再看看。你有ULINK2么?可以试试ULink2。 ...

有JLINK V8/V9.  ULINK2。经过昨晚的测试,JLINK V8可以仿真,但是仿真进入时使用的是M4内核,并不是M0。
ulink2进不去,提示“无法停止Cortex-m内核”
你调通过?

出0入0汤圆

发表于 2015-1-13 10:04:26 | 显示全部楼层
非常关心这个话题,我也是

出0入0汤圆

发表于 2015-1-15 17:29:53 | 显示全部楼层
ST_ATMEL_NXP 发表于 2015-1-13 09:24
有JLINK V8/V9.  ULINK2。经过昨晚的测试,JLINK V8可以仿真,但是仿真进入时使用的是M4内核,并不是M0。 ...

最近实在是木有时间了,在弄一个好东西,先给你个文档内参吧,对不住了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-1-16 09:01:49 | 显示全部楼层
magicoe 发表于 2015-1-15 17:29
最近实在是木有时间了,在弄一个好东西,先给你个文档内参吧,对不住了。

十分感谢您提供的资料。谢谢

出0入0汤圆

 楼主| 发表于 2015-2-23 16:40:01 | 显示全部楼层
cumtgao 发表于 2015-1-4 17:57
楼上正解,这种情况一般用分散加载方式,你看下你的MDK里面link里面有没有一个.sct文件? ...

ARM分散加载原理http://wenku.baidu.com/link?url= ... egDnMOjaDNQc4aeVPn7
虽然我没有完全理解,但是还是涨姿势了!

出0入0汤圆

发表于 2015-3-17 22:22:34 | 显示全部楼层
请问M0现在可以进入MAIN函数了吗?关注大神

出0入0汤圆

发表于 2015-3-25 15:07:22 | 显示全部楼层
我在米尔开发板上用的SCT文件
; MYIR

LR_IROM1 0x1A000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x1A000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  
  RW_IRAM1 0x10000000 0x00008000  {  ; RW data
   keil_freertos_startup_lpc18xx43xx.o(STACK)
   keil_freertos_startup_lpc18xx43xx.o(HEAP)
   .ANY (+RW +ZI)
  }
  
  RW_IRAM2 0x20000000 0x00010000  {
   .ANY (+RW +ZI)
  }
  
  RW_RAM1 0x28000000 0x04000000  {
   .ANY (+RW +ZI)
   ;* (VRAM, GUI_RAM, GUIDEMO_STACK, FS_RAM, IP_RAM, USB_RAM)
  }
}

LR_IROM2 0x1B000000 0x00080000  {
  ER_IROM2 0x1B000000 0x00080000  {  ; load address = execution address
   .ANY (+RO)
  }
}

出0入0汤圆

发表于 2015-3-25 15:10:53 | 显示全部楼层
再一个,先M0
; *************************************************************
; *** Ã׶ûƽ̨  YZ20150127                                  ***
; *************************************************************

LR_IROM1 0x1A040000 0x00020000  {    ; load region size_region
  ER_IROM1 0x1A040000 0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10080000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
再M4
; MYIR M4

LR_IRAM 0x1A000000 0x00040000  {
;LR_IROM1 0x1A000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x1A000000 0x00040000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00008000  {  ; RW data
   keil_freertos_startup_lpc18xx43xx.o(STACK)
   keil_freertos_startup_lpc18xx43xx.o(HEAP)
   .ANY (+RW +ZI)
  }
  
;  RW_IRAM2 0x10080000 0x00010000  {
;   .ANY (+RW +ZI)
;  }
  
  RW_IRAM3 0x20000000 0x00010000  {
   .ANY (+RW +ZI)
  }
  
  RW_RAM1 0x28000000 0x04000000  {
   .ANY (+RW +ZI)
   ;* (VRAM, GUI_RAM, GUIDEMO_STACK, FS_RAM, IP_RAM, USB_RAM)
  }
}

LR_IFLASH_BANK2  0x1A040000  0x00020000  {  
;LR_IROM2 0x1B000000 0x00080000  {  
        M0_APPLICATION 0x1A040000 0x00020000 {
                  *(YZ_M0_IMAGE)
          }
}
在一块中,下载一次

出0入0汤圆

 楼主| 发表于 2015-4-16 19:24:48 | 显示全部楼层
WXLmjr 发表于 2015-1-2 21:09
如果删除BankB的编程算法,下载的时候进度条就不会跳到1B00 0000地址去了,会出现下面的结果,但奇葩的是 ...

现在终于知道了,因为,之前把程序下载在flash BANK A和flash BANK B里面了,程序正常工作。在没有擦除flash BANK B的情况下,把BANK B的勾去掉,虽然再次下载不会把程序下载到BANK B里面,但是也不会擦除之前BANK B里面的程序,所以程序还是完整的,还能正常运行。

出0入0汤圆

 楼主| 发表于 2015-4-16 19:35:14 | 显示全部楼层
yangzhong316 发表于 2015-3-25 15:10
再一个,先M0
; *************************************************************
; *** Ã׶ûƽ̨   ...

现在觉得分散加载的.SCT文件把内存的使用情况描述的很清楚,在.map文件中把程序编译生成的 Code、RO、RW、ZI数据情况描述得更清楚,有问题就可以从这两个文件下手,再也不会遇到问题没有办法干挠头了。

出0入0汤圆

发表于 2015-4-24 11:34:32 | 显示全部楼层
magicoe 发表于 2015-1-12 22:33
ULINK2可以完美调试,Jlink似乎要简单设置一下。

LPC5410x的双核调试起来比LPC43系列更简单些。 ...

JLINK如何实现双核一起调试啊?

出0入0汤圆

发表于 2019-6-13 09:10:16 | 显示全部楼层
谢谢楼主发起的帖子,及贴内提供资源分享的朋友,收下了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 06:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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