WXLmjr 发表于 2015-1-2 15:49:37

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

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里面的配置没有看出什么区别呀!还请高手解答。

hantnt 发表于 2015-1-2 16:21:49

你把第二个勾勾上不就完了?

WXLmjr 发表于 2015-1-2 16:43:25

hantnt 发表于 2015-1-2 16:21
你把第二个勾勾上不就完了?

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

WXLmjr 发表于 2015-1-2 16:46:00

本帖最后由 WXLmjr 于 2015-1-2 16:51 编辑

WXLmjr 发表于 2015-1-2 16:43
我也这样想,但是我用了一个emWin例程程序有600多K,勾不勾,程序下载到里面都能正常运行。用户手册的Mem ...

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

WXLmjr 发表于 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里面的这些设置难道没有用处吗????????(注:每次更改设置之后都是重新完全编译一次才下载到开发板的)

huangqi412 发表于 2015-1-2 17:07:48

CM4 +CM0? 还不是双核了,好奇如何配置各自ROM,

hantnt 发表于 2015-1-2 17:17:23

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

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

hantnt 发表于 2015-1-2 17:20:38

你试试读取你定义的常量里面的数据是否出问题

hantnt 发表于 2015-1-2 17:22:59

然后你在看看keil在下载的时候进度条是否有跳到1B000000地址去下载

WXLmjr 发表于 2015-1-2 20:55:20

hantnt 发表于 2015-1-2 17:17
你的代码并没有超出512K哦,

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

WXLmjr 发表于 2015-1-2 21:03:06

hantnt 发表于 2015-1-2 17:22
然后你在看看keil在下载的时候进度条是否有跳到1B000000地址去下载

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

WXLmjr 发表于 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 ...

hantnt 发表于 2015-1-2 21:40:18

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

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

WXLmjr 发表于 2015-1-3 11:20:37

hantnt 发表于 2015-1-2 21:40
注意我说的是你代码大小没有超过512K哦,只读数据没下载进去仅仅是读出数据出错罢了。 ...

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

abutter 发表于 2015-1-4 14:18:10

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

你总共有了多少 flash ?

WXLmjr 发表于 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

magicoe 发表于 2015-1-4 15:52:18

我记得要用分散加载的方式,算法里把BankB也放进去。

cumtgao 发表于 2015-1-4 17:57:57

楼上正解,这种情况一般用分散加载方式,你看下你的MDK里面link里面有没有一个.sct文件?

ST_ATMEL_NXP 发表于 2015-1-12 21:56:14

huangqi412 发表于 2015-1-2 17:07
CM4 +CM0? 还不是双核了,好奇如何配置各自ROM,

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

magicoe 发表于 2015-1-12 22:33:59

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

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

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

huangqi412 发表于 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是共享还是各自划一块用

magicoe 发表于 2015-1-12 22:39:35

再附上一个 双核笔记吧,应该是宋岩写的

http://www.lpcware.com/zh-hans/content/project/lpc43xx%E5%8F%8C%E6%A0%B8%E7%AC%94%E8%AE%B0

ST_ATMEL_NXP 发表于 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函数中。待解决。。。。。

ST_ATMEL_NXP 发表于 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函数,但是可以进入仿真环境。

magicoe 发表于 2015-1-12 23:24:52

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

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

ST_ATMEL_NXP 发表于 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内核”
你调通过?

bd7qw 发表于 2015-1-13 10:04:26

非常关心这个话题,我也是

magicoe 发表于 2015-1-15 17:29:53

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

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


ST_ATMEL_NXP 发表于 2015-1-16 09:01:49

magicoe 发表于 2015-1-15 17:29
最近实在是木有时间了,在弄一个好东西,先给你个文档内参吧,对不住了。




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

WXLmjr 发表于 2015-2-23 16:40:01

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

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

nazily215 发表于 2015-3-17 22:22:34

请问M0现在可以进入MAIN函数了吗?关注大神

yangzhong316 发表于 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)
}
}

yangzhong316 发表于 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_BANK20x1A0400000x00020000{
;LR_IROM2 0x1B000000 0x00080000{
        M0_APPLICATION 0x1A040000 0x00020000 {
                *(YZ_M0_IMAGE)
        }
}
在一块中,下载一次

WXLmjr 发表于 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里面的程序,所以程序还是完整的,还能正常运行。

WXLmjr 发表于 2015-4-16 19:35:14

yangzhong316 发表于 2015-3-25 15:10
再一个,先M0
; *************************************************************
; *** Ã׶ûƽ̨   ...

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

lincolne 发表于 2015-4-24 11:34:32

magicoe 发表于 2015-1-12 22:33
ULINK2可以完美调试,Jlink似乎要简单设置一下。

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

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

464839941xql 发表于 2019-6-13 09:10:16

谢谢楼主发起的帖子,及贴内提供资源分享的朋友,收下了!
页: [1]
查看完整版本: LPC4357使用内部两块flash?在Keil中怎么设置,请高手解答!