Nand Flash 裸機程式

2022-08-24 16:36:11 字數 3351 閱讀 7387

硬體平台 :jz2440

實現功能:初始化 nand flash 和 sdram,並將**從 nand flash 拷貝到 sdram。

start.s      --> 上電初始化 nand 與sdram

nand.c     -->  nand flash 初始化函式

sdram.c   --> sdram 初始化函式

leds.c      -->  led 閃爍

start.s 原始碼:

.text

.global

_start

_start:

ldr sp,=4096

bl disable_watch_dog

bl sdram_init

bl nand_init

ldr r0,=0x30000000

mov r1,#

4096

mov r2,#

2048

bl nand_read

ldr sp,=0x34000000

ldr lr,=loop1

ldr pc,=0x30000000

loop1:

b loop1

nand.c 原始碼:

#define busy          1

#define nand_sector_size_lp 2048

#define nand_block_mask_lp (nand_sector_size_lp - 1)typedef

struct

s3c2440_nand;

static s3c2440_nand *s3c2440nand = (s3c2440_nand *)0x4e000000;/*

供外部呼叫的函式

*/void nand_init(void

);void nand_read(unsigned char *buf, unsigned long start_addr, int

size);

/*s3c2440的nand flash處理函式

*/static

void nand_reset(void

);static

void wait_idle(void

);static

void nand_select_chip(void

);static

void nand_deselect_chip(void

);static

void write_cmd(int

cmd);

static

void write_addr(unsigned int

addr);

static unsigned char read_data(void

);/*

復位 */

static

void nand_reset(void)/*

等待nand flash就緒

*/static

void wait_idle(void)/*

發出片選訊號

*/static

void nand_select_chip(void)/*

取消片選訊號

*/static

void nand_deselect_chip(void)/*

發出命令

*/static

void write_cmd(int

cmd)

/*發出位址

*/static

void write_addr(unsigned int

addr)

/*讀取資料

*/static unsigned char read_data(void)/*

初始化nand flash

*/void nand_init(void)/*

讀函式

*/void nand_read(unsigned char *buf, unsigned long start_addr, int

size)

/*選中晶元

*/nand_select_chip();

for(i=start_addr; i < (start_addr +size);)

}/*取消片選訊號

*/nand_deselect_chip();

return

;}

sdram.c 原始碼:

void disable_watch_dog(void

)void sdram_init(void);

unsigned

long *sdram_base=(unsigned long *)0x48000000

;

int i=0

;

for(;i<13;i++) sdram_base[i]=p[i];

}

leds.c 原始碼:

#define    gpfcon        (*(volatile unsigned long *)0x56000050)

#define gpfdat (*(volatile unsigned long *)0x56000054)

#define gpf4_out (1<<(4*2))

#define gpf5_out (1<<(5*2))

#define gpf6_out (1<<(6*2))

void wait(volatile unsigned long

dly)

int main(void

)

return0;

}

鏈結指令碼 nand.lds:

sections

seconed

0x30000000 :at(4096

) }

編譯的makefile:

objs:=start.o sdram.o nand.o leds.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 -o $@ -c $<

%.o:%.s

arm-linux-gcc -o $@ -c $rm *.o *.bin *.dis nand_elf

nand flash裸機程式

開發板 mini2440 nand flash k9f2g08u0b2,56m arm處理器裸機開發實戰 機制而非策略 知識點梳理 頁的絕對位址與相對位址 在nand.c中有乙個函式void rdnf2sdram 它的功能是將nand flah的內容複製到sdram,如下 nand flash的頁讀...

裸機系列 nandflash

看了好久的nandflash 手冊以及其他方面的一些資料,因為英語不好,所以手冊看的有點暈,幸好網路資源的豐富。總結一下我所理解的nandflash 操作,基於一些其他的原因,暫時不繼續進行裸機程式設計,只是把所有的理解詳細的寫下來。1.首先對於nandflash 程式設計有三個方面 1.nandf...

uarts裸機程式

硬體平台 jz2440 實現功能 向串列埠軟體實現輸出putchar函式 start.s 設定堆疊,關閉看門狗,初始化時鐘,初始化sdram init.c 初始化函式 uart.c 初始化串列埠暫存器 uart.h main.c start.s原始碼 extern main text global ...