微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > FS2410 开发板上 Nand Flash 到内存的代码搬移

FS2410 开发板上 Nand Flash 到内存的代码搬移

时间:11-10 来源:互联网 点击:

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

一下开发板, 呵呵,欣赏我们的成果吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top