完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
mini2440开发板:第8章裸机实验,nand flash是K9F2G08X0B
//nand.lds文件 SECtiONS { firtst 0x00000000 : { head.o init.o nand.o main.o} second 0x30000000 : AT(4096) { main.o } } AT (4096),其中的4096是加载地址 《嵌入式linux应用开发完全手册》的p137页中写到: “本实例的目的是把一部分代码存放在nand flash地址的4096之后” makefile文件 ARM-elf-ld -Tnand.lds -o nand_elf head.o init.o nand.o main.o 疑问:1)4096是nand flash上的存储地址?本人认为是 2)但是,如果是4096是nand flash的地址的话,那么仅仅通过下面两句话 arm-elf-ld -Tnand.lds -o nand_elf head.o init.o nand.o main.o //makefile文件 second 0x30000000 : AT(4096) { main.o } //nand.lds文件 就能把main.o写入到nand flash中? 我本人的认为:写nand flash需要通过诸如Page Program 80h 10h这样的命令集伴随的一些列操作才能完成!! 请大家解释一下原委!!!谢谢 |
|
相关推荐
2个回答
|
|
回复 1楼jeremyhuang的帖子
也许问题描述的不是很清楚,我从另外一个方面阐述一下我的问题: @****************************************************************************** @ File:head.s @ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @****************************************************************************** .text .global _start _start: @函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义 ldr sp, =4096 @设置堆栈 bl disable_watch_dog @关WATCH DOG bl memsetup @初始化SDRAM bl nand_init @初始化NAND Flash @将NAND Flash中地址6144开始的2048字节代码(main.c编译得到)复制到SDRAM中 @nand_read_ll函数需要3个参数: ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址 mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 mov r2, #2048 @3. 复制长度= 2048(bytes),对于本实验的main.c,这是足够了 bl nand_read @调用C函数nand_read ldr sp, =0x34000000 @设置栈 ldr lr, =halt_loop @设置返回地址 ldr pc, =main @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转 halt_loop: b halt_loop 这里: ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址 mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 mov r2, #2048 @3. 复制长度= 2048(bytes),对于本实验的main.c,这是足够了 bl nand_read @调用C函数nand_read nand_read函数,源地址4096开始大小为2048的地址空间的数据,本人认为是属于nand flash的地址空间,对吗? 那么这个地址空间的main.o是如何写入到nand flash中的? 有网友说,是烧写进去的,本人认为不是,我是用openjtag进行调试,没有进行过任何烧写。 |
|
|
|
SECTIONS {
firtst 0x00000000 : { head.o init.o nand.o main.o} second 0x30000000 : AT(4096) { main.o } } 这是控制生成的BIN文件,0位置放first段的代码,4096开始放second段的代码; 这个BIN文件烧到FLASH去后,FLASH的0地址就放first段的代码,FLASH的4096地址开始放second段的代码; 然后时,重定位要“从FLASH的4096那里读代码,放到SDRAM的0x30000000去” 至于second段有多大,我就直接用2048,因为看BIN文件就可以知道它不会超过2048 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2074 浏览 6 评论
1886 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4438 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 06:15 , Processed in 0.660701 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号