原创
S5PV210(TQ210)学习笔记——Nand配置这二
S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。
这样,Nand flash的初始化函数就出来了:
-
void nand_init(){
-
NFCONF = (3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1);
-
NFCONT = (1<<0)|(1<<1);
-
-
MP0_1CON &= ~(0xffff<<8);
-
MP0_1CON |= 0x3333<<8;
-
MP0_3CON = 0x22222222;
-
MP0_6CON = 0x22222222;
-
-
nand_reset();
-
}
至于nand_reset,通常是Nand flash配置完成之后就进行一次reset,这样使Nand flash恢复到最初状态。
这样,Nand flash初始化好了,但是要访问Nand flash还需要按照时序对其操作,Nand方式启动时只需要实现Nand flash的读操作,为此,这里只列举一下几个读相关的操作:
(1)Nand flash reset
-
static void nand_reset(){
-
nand_select_chip();
-
nand_cmd(0xff);
-
nand_wait();
-
nand_deselect_chip();
-
}
(2)Nand flash写地址
-
static void nand_addr(unsigned long page_addr, unsigned long page_offset){
-
NFADDR = (page_offset>>0) & 0xFF;
-
NFADDR = (page_offset>>8) & 0x7;
-
NFADDR = (page_addr) & 0xFF;
-
NFADDR = (page_addr>>8) & 0xFF;
-
NFADDR = (page_addr>>16) & 0x07;
-
}
(3)Nand flash读ID
-
void nand_read_id(char id[]){
-
int i;
-
-
nand_select_chip();
-
nand_cmd(0x90);
-
-
NFADDR = 0;
-
-
for (i = 0; i < 5; i++)
-
id = nand_read();
-
-
nand_deselect_chip();
-
}
(4)Nand flash读页数据
-
void nand_read_page(unsigned char* buf, unsigned long page_addr){
-
int i;
-
nand_select_chip();
-
nand_cmd(0);
-
nand_addr(page_addr, 0);
-
nand_cmd(0x30);
-
nand_wait();
-
for(i = 0; i != PAGE_SIZE; ++i){
-
*buf++ = nand_read();
-
}
-
nand_deselect_chip();
-
}
上面是几个比较重要的Nand flash读相关的操作函数,到这里,您自己补充一下引用到的小函数就可以正常的进行Nand flash操作了,我把我写的代码上传到我的CSDN资源里,如果需要的话可以拿去参考。另外,如果需要编写Nand flash写操作的代码可以参考一下本人博客中6410的Nand flash配置部分和Nand flash的芯片手册,原理都是相通的。
文章评论(0条评论)
登录后参与讨论