S5PV210(TQ210)学习笔记——Nand配置

发布者:size0109最新更新时间:2015-08-19 来源: eefocus关键字:S5PV210  Nand配置 手机看文章 扫描二维码
随时随地手机看文章
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. void nand_init(){  
  2.     NFCONF = (3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1);  
  3.     NFCONT = (1<<0)|(1<<1);  
  4.   
  5.     MP0_1CON &= ~(0xffff<<8);  
  6.     MP0_1CON |= 0x3333<<8;  
  7.     MP0_3CON = 0x22222222;  
  8.     MP0_6CON = 0x22222222;  
  9.   
  10.     nand_reset();  
  11. }  
至于nand_reset,通常是Nand flash配置完成之后就进行一次reset,这样使Nand flash恢复到最初状态。

 

这样,Nand flash初始化好了,但是要访问Nand flash还需要按照时序对其操作,Nand方式启动时只需要实现Nand flash的读操作,为此,这里只列举一下几个读相关的操作:

(1)Nand flash reset

  1. static void nand_reset(){  
  2.     nand_select_chip();  
  3.     nand_cmd(0xff);  
  4.     nand_wait();  
  5.     nand_deselect_chip();  
  6. }  
(2)Nand flash写地址
  1. static void nand_addr(unsigned long page_addr, unsigned long page_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. void nand_read_id(char id[]){  
  2.     int i;  
  3.   
  4.     nand_select_chip();  
  5.     nand_cmd(0x90);  
  6.   
  7.     NFADDR = 0;  
  8.   
  9.     for (i = 0; i < 5; i++)  
  10.         id[i] = nand_read();  
  11.   
  12.     nand_deselect_chip();  
  13. }  
(4)Nand flash读页数据
  1. void nand_read_page(unsigned char* buf, unsigned long page_addr){  
  2.     int i;  
  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的芯片手册,原理都是相通的。

关键字:S5PV210  Nand配置 引用地址:S5PV210(TQ210)学习笔记——Nand配置

上一篇:S5PV210(TQ210)学习笔记——内核移植与文件系统构建
下一篇:S5PV210(TQ210)学习笔记——内存配置(DDR2)

推荐阅读最新更新时间:2024-03-16 14:29

s5pv210-nand-驱动-1
还是不是很懂,抄了很多,还不知道对没对。 反正现在驱动是识别到了。 内核:linux4.19.222 编译器:gcc-7.5.0 先贴个图吧。 目前使用的还是 nfs 文件系统,ubuntu16.04
[单片机]
s5pv210-<font color='red'>nand</font>-驱动-1
S5PV210串行通信接口_1
1、串口的名称: (1)、S5PV210数据手册中串口控制器在section 8.1 (2)、串口的官方名称叫:universal asynchronous reciver and transmitter 通用异步收发器,英文缩写是uart,中文简称串口。 2、S5PV210的串口控制器工作原理框图: (1)、整个串口控制器包含transmitter和reciver两部分,两部分功能彼此独立,transmitter负责210向外部发送信息,receiver负责从外部接收信息到210内部。 (2)、总线角度来讲,串口控制器是接在APB总线上的,对我们编程的影响是:将来计算串口控制器的源时钟时是以APB总线来广计算的。 (3)、t
[单片机]
<font color='red'>S5PV210</font>串行通信接口_1
S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析
1、DRAM的地址空间 (1)从地址映射图可以知道,S5PV210有两个DRAM端口。 DRAM0的内存地址范围:0x20000000~0x3FFFFFFF(512MB);DRAM1:的内存地址范围:0x40000000~0x7FFFFFFF(1024MB); (2)S5PV210实际最多能接1.5G的内存。32位的CPU理论上能接4G的内存,但是ARM结构的机器是统一编址,寄存器会占掉一部分地址空间,所以实际是达不到4G的内存; 2、DRAM端口的引脚 DRAM端口的引脚:32根数据线(Xm1_DATAn) + 14根地址线(Xm1_ADDRn) + 3根片选信号线(Xm1_BAn) + 控制信号线。 3、DRA
[单片机]
<font color='red'>S5PV210</font>芯片的DRAM控制器介绍、初始化DDR的流程分析
S5PV210(TQ210)学习笔记——Nand配置
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)阅读模块芯片手册,掌握模块的访问控制时序。 我们按照以上步
[单片机]
<font color='red'>S5PV210</font>(TQ210)学习笔记——<font color='red'>Nand</font><font color='red'>配置</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved