arm9_NANDFlash

旧城等待, 2023-06-01 06:19 82阅读 0赞

其实nand flash和nor flash的区别已经没什么好说的了,这里单说在arm9里的启动方式:由于nor有自己独立的地址线和数据线,可以直接运行程序;但nand地址数据公用,启动时cpu只会拿前4KB数据去sram运行,所以对于大于4KB的程序,就要考虑如何完整的实现程序了?即将4KB之后的程序通过在前4KB中复制到sdram中继续运行;项目中用过一款芯片cypres usb3014,虽是arm9的核,他的sram有512kb,而且用的是封装过的thread x实时操作系统,一般512kb足够,外接一个spi_flash就可以了;话题转回来!看下面代码:

.s

  1. .text
  2. .global _start
  3. _start:
  4. ldr sp, =4096 @设置堆栈
  5. bl disable_watch_dog @关WATCH DOG
  6. bl memsetup @初始化SDRAM
  7. bl nand_init @初始化NAND Flash
  8. @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM
  9. @nand_read_ll函数需要3个参数:
  10. ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址
  11. mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
  12. mov r2, #2048 @3. 复制长度= 2048(bytes),对于本实验的main.c,这是足够了
  13. bl nand_read @调用C函数nand_read,不同型号大同小异
  14. ldr sp, =0x34000000 @设置栈
  15. ldr lr, =halt_loop @设置返回地址;一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。
  16. ldr pc, =main @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转
  17. halt_loop:
  18. b halt_loop

.lds(链接脚本)

  1. SECTIONS {
  2. firtst 0x00000000 : { head.o init.o nand.o} //这三个文件的运行地址为0,生成的映像文件的偏移地址也为0
  3. second 0x30000000 : AT(4096) { main.o } //这个文件的运行地址为0x30000000,生成的映像文件的偏移地址也为4096
  4. }

Makefile

objs := head.o init.o nand.o main.o

nand.bin : $(objs)

arm-linux-ld -Tnand.lds -o nand_elf $^

arm-linux-objcopy -O binary -S nand_elf $@

arm-linux-objdump -D -m arm nand_elf > nand.dis

%.o:%.c

arm-linux-gcc -Wall -c -O2 -o $@ $<

%.o:%.S

arm-linux-gcc -Wall -c -O2 -o $@ $<

clean:

rm -f nand.dis nand.bin nand_elf *.o

  1. = 是最基本的赋值
  2. := 是覆盖之前的值
  3. ?= 是如果没有被赋值过就赋予等号后面的值
  4. += 是添加等号后面的值
  5. 其中 objs 是代表的一个变量,后面就可以使用$(objs)来使用这个变量
  6. $@ 表示目标文件
  7. $^ 表示所有依赖文件
  8. $< 表示第一个依赖文件

转载于:https://www.cnblogs.com/lzd626/p/11517751.html

发表评论

表情:
评论列表 (有 0 条评论,82人围观)

还没有评论,来说两句吧...

相关阅读

    相关 arm9_LCD

    其实LCD主要用途就是用来显示数据,那么数据的来源和其传输方式就是主要关注点了;做过一个项目是显示红外热像图,通过pico384获取原始图像数据,它会将数据通过一条串行线输出出

    相关 arm9_MMU

    MMU:负责虚拟地址到物理地址的映射,提供硬件机制的内存访问权限检查;前者使得多个用户进程都拥有自己的独立地址空间,后者可以保护每个进程所用内存不会被其他进程破坏 页表:由一

    相关 arm9_NANDFlash

    其实nand flash和nor flash的区别已经没什么好说的了,这里单说在arm9里的启动方式:由于nor有自己独立的地址线和数据线,可以直接运行程序;但nand地址数据

    相关 ARM9的中断体系结构

    出处:[ARM9的中断体系结构][ARM9] 实验的目的: 当TQ2440开发板的按键按下的时候,触发中断,点亮LED灯。 实验的源程序: /\\\\

    相关 ARM9中断原理

    出处:[ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的][ARM9 2410_ARM_] 几天前一个学生问我ARM中断嵌套的问题,我才发现原在我心