热度 11
2016-1-26 10:36
895 次阅读|
0 个评论
S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。 这样,Nand flash的初始化函数就出来了: void nand_init(){ NFCONF = (323)|(112)|(28)|(04)|(11); NFCONT = (10)|(11); MP0_1CON = ~(0xffff8); MP0_1CON |= 0x33338; 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_offset0) 0xFF; NFADDR = (page_offset8) 0x7; NFADDR = (page_addr) 0xFF; NFADDR = (page_addr8) 0xFF; NFADDR = (page_addr16) 0x07; } (3)Nand flash读ID void nand_read_id( char 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的芯片手册,原理都是相通的。