FS2410 开发板上 Nand Flash 到内存的代码搬移
chip disable */
return 0;
}
注:Nand Flash 的设置和读取数据的主要流程简单介绍如下:
1. NFCONF = 0xf830
2. 在第一次操作NAND Flash前,通常复位一下:
NFCONF &= ~0x800 (使能NAND Flash)
NFCMD = 0xff (reset命令)
循环查询NFSTAT位0,直到它等于1
3. NFCMD = 0 (读命令)
4. 这步得稍微注意一下,请打开K9F1208U0M数据手册第7页,那个表格列出了在地址操
作的4个步骤对应的地址线,A8没用到:
NFADDR = addr & 0xff
NFADDR = (addr>>9) & 0xff (注意了,左移9位,不是8位)
NFADDR = (addr>>17) & 0xff (左移17位,不是16位)
NFADDR = (addr>>25) & 0xff (左移25位,不是24位)
5. 循环查询NFSTAT位0,直到它等于1
6. 连续读NFDATA寄存器512次,得到一页数据(512字节)
7. NFCONF |= 0x800 (禁止NAND Flash)
/* 文件 sdram.c
* 作用:循环点 FS2410 开发板上的 D9、D10、D11、D12
* 四个发光二极管。
*/
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
int main()
{
int i,j;
while(1) {
for (i = 0; i <4; ++i) {
GPFCON = 0x1<(8+i*2);
GPFDAT = 0x0;
// for delay
for(j=0;j<50000;++j) ;
}
}
}
/*
* 文件 nand.lds (lds 文件是连接脚本)
*/
SECTIONS {
first 0x00000000 : { head.o mem.o flash.o nand_read.o }
second 0x30000000 : AT(4096) { sdram.o }
}
注:这个链接脚本是用来传给链接器的,其作用如下:
1. 将 head.o 放在 0x00000000 开始的地址处, mem.o、flash.o、and_read.o
依次放在 head.o 后面, 它们的运行地址是 0x00000000
2. 将 sdram.o 放在地址 4096 开始处, 但它的运行地址是 0x30000000, 运行前需要
从 4096 处复制到 SDRAM 的 0x300000000 处
完整的连接脚本文件形式如下:
SECTIONS {
...
secname start BLOCK(align) (NOLOAD) : AT(ldadr) {contents} >region :phdr =fill
...
}
并非每个选项都是必须的,仅从 nand.lds 用到的来看:
(1) secname: 段名,对于 nand.lds, 段名为 first 和 second
(2) start: 本段的运行时地址,如果没有 AT(xxx),则本段的存储地址也是 start
(3) AT(ldadr): 定义本段存储(加载)的地址
(4) {contents}: 决定哪些内容放在本段,可以是整个目标文件,也可是目标文件中的某段
# 文件 Makefile
# 由代码文件生成目标文件,并依据连接脚本 nand.lds 连接目标文件,
# 最后将连接生成的目标文件转换成二进制格式
sdram:head.s flash.s mem.s sdram.c
arm-linux-gcc -c -o head.o head.s
arm-linux-gcc -c -o mem.o mem.s
arm-linux-gcc -c -o flash.o flash.s
arm-linux-gcc -c -o nand_read.o nand_read.c
arm-linux-gcc -c -o sdram.o sdram.c
arm-linux-ld -Tnand.lds head.o mem.o flash.o nand_read.o sdram.o -o sdram_tmp.o
arm-linux-objcopy -O binary -S sdram_tmp.o sdram
clean:
rm -f *.o
rm -f sdram
三、编译、烧写、测试
Make 一下就会生成我们要的文件 sdram, 将其通过 JTAG 烧入 Nand Flash ,Reset
一下开发板, 呵呵,欣赏我们的成果吧!
FS2410NandFlash内 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)