查看: 1586|回复: 2

[原创] S5PV210(TQ210)学习笔记——Nand配置

[复制链接]
  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-1-26 14:41:30 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 embedsky007 于 2016-1-26 14:42 编辑

      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的初始化函数就出来了:
    • 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的芯片手册,原理都是相通的。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-27 09:17:22 | 显示全部楼层
    亲,可以将内容一并发到经验频道,这是一个很好的系列,很有机会获得每月之星的呢http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2016-2-22 11:51:19 | 显示全部楼层
    糖悦之果飞 发表于 2016-1-27 09:17
    亲,可以将内容一并发到经验频道,这是一个很好的系列,很有机会获得每月之星的呢http://jingyan.eeboard.c ...

    嗯嗯好的,多谢推荐
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 07:46 , Processed in 0.133207 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.