硬體平台 :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:
sectionsseconed
0x30000000 :at(4096
) }
編譯的makefile:
objs:=start.o sdram.o nand.o leds.onand.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 ...