您的位置 首页 电路

S5PV210(TQ210)学习笔记——Nand装备

S5PV210的Nandflash跟2440和6410的Nandflash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210

S5PV210的Nand flash跟2440和6410的Nand flash装备差不多,不同的是S5PV210的功用愈加强壮,尤其是S5PV210的硬件ECC(本文不触及S5PV210中Nand ECC装备)。全体上来讲,S5PV210的Nand flash装备仍是十分简略的。

其实,装备一个模块往往需求以下几个过程:

(1)依据原理图,理清模块的接线方法,关于Nand flash来说,便是看看Nand flash接到了哪些GPIO上,然后把对应的GPIO装备为Nand功用即可。

(2)阅览S5PV210手册,把握相关模块操控器的功用、操作方法及寄存器装备。

(3)阅览模块芯片手册,把握模块的拜访操控时序。

咱们依照以上过程进行装备,首先是模块GPIO的装备,我的开发板是TQ210,Nand flash芯片是K9K8G08U0B,接线方法如下图:

其间:

(1)Xm0FRnB0~Xm0FRnB3,Xm0FCLE,Xm0FALE,Xm0FWEn,Xm0FREn这八根脚衔接到了MP0_3上,检查MP0_3操控寄存器可知,需将MP0_3CON装备为0x22222222;

(2)Xm0CSn2~Xm0CSn5四根脚衔接到了MP0_1的2~5脚上,故MP0_1CON的8~23位应该装备为0x3333;

(3)Xm0DATA0~Xm0DATA7这八根脚衔接到了MP0_6上,故MP0_6应该装备为0x22222222;

这样,GPIO装备好了,接下来咱们装备下Nand flash的操控寄存器,大体阅览下Nand flash的寄存器功用后咱们能够发现,假如不运用ECC功用能够只装备NFCONF和NFCONT两个寄存器,咱们的Nand flash是SLC型Nand,Page巨细为2048,写入地址需求5个周期(这些从Nand flash芯片手册上很简略找到),故NFCONF应该装备如下:

NFCONF=(3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1); //依次为:制止ECC,TACLS,TWPRH0,TWPRH1,SLC、2K、5周期。

其间TACLS、TWPRH0和TWPRH1需求阅览手册来确认,韦东山教师叙述了确认方法,可是,我装备时彻底依照手册上的最小时刻设置时没有能够正常拜访,我是自己测验出来的,先将三个参数都设置为7,然后渐渐减小,最终测验出来设置为1、2、0,可是这样纷歧定是最安稳的,一般来讲,数值略大一些会更安稳,可是为了不影响拜访功率,这个值也不能设太大,先依照最小状况设置,当发现有读取过错或其他不安稳现象时再恰当进步参数值。

然后便是NFCONT寄存器,NFCONT的装备就更简略了,咱们不设置ECC,只需求设置0位和1位就能够了:

NFCONT = (1<<1)|(1<<0);//制止片选,使能Nand

这样,Nand flash的初始化函数就出来了:

  1. voidnand_init(){
  2. NFCONF=(3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1);
  3. NFCONT=(1<<0)|(1<<1);
  4. MP0_1CON&=~(0xffff<<8);
  5. MP0_1CON|=0x3333<<8;
  6. MP0_3CON=0x22222222;
  7. MP0_6CON=0x22222222;
  8. nand_reset();
  9. }

至于nand_reset,通常是Nand flash装备完结之后就进行一次reset,这样使Nand flash康复到开始状况。

这样,Nand flash初始化好了,可是要拜访Nand flash还需求依照时序对其操作,Nand方法启动时只需求完成Nand flash的读操作,为此,这儿只罗列一下几个读相关的操作:

(1)Nand flash reset

  1. staticvoidnand_reset(){
  2. nand_select_chip();
  3. nand_cmd(0xff);
  4. nand_wait();
  5. nand_deselect_chip();
  6. }

(2)Nand flash写地址

  1. staticvoidnand_addr(unsignedlongpage_addr,unsignedlongpage_offset){
  2. NFADDR=(page_offset>>0)&0xFF;
  3. NFADDR=(page_offset>>8)&0x7;
  4. NFADDR=(page_addr)&0xFF;
  5. NFADDR=(page_addr>>8)&0xFF;
  6. NFADDR=(page_addr>>16)&0x07;
  7. }

(3)Nand flash读ID

  1. voidnand_read_id(charid[]){
  2. inti;
  3. nand_select_chip();
  4. nand_cmd(0x90);
  5. NFADDR=0;
  6. for(i=0;i<5;i++)
  7. id[i]=nand_read();
  8. nand_deselect_chip();
  9. }

(4)Nand flash读页数据

  1. voidnand_read_page(unsignedchar*buf,unsignedlongpage_addr){
  2. inti;
  3. nand_select_chip();
  4. nand_cmd(0);
  5. nand_addr(page_addr,0);
  6. nand_cmd(0x30);
  7. nand_wait();
  8. for(i=0;i!=PAGE_SIZE;++i){
  9. *buf++=nand_read();
  10. }
  11. nand_deselect_chip();
  12. }

上面是几个比较重要的Nand flash读相关的操作函数,到这儿,您自己弥补一下引用到的小函数就能够正常的进行Nand flash操作了,我把我写的代码上传到我的CSDN资源里,假如需求的话能够拿去参阅。别的,假如需求编写Nand flash写操作的代码能够参阅一下自己博客中6410的Nand flash装备部分和Nand flash的芯片手册,原理都是相通的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/256189.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部