nandflash驱动之简单编写

原创 2017年03月30日 12:37:19

参考内核中

driver/mtd/nand/s3c2410.c或者driver/mtd/nand/atmel_nand.c

先把头文件包含进去


我们来看看nand_scan_ident这里面做了什么事情


设置位数,因为我们的数据线只有8位所以这里选八位


设置默认函数



看看这个怎么设置的




如果没设置就用默认的,看看这个默认的函数我们能不能使用



这上面说-1是不选,其他值是某一个芯片

但是这里0的时候什么也没做,显然我们偏选的时候要把



要把这里的第一位设置为0

从这里看默认的函数不适合我们用,所以我们要设置这个函数,我们在默认的基础上看下别人怎么做的


然后自己写一个函数,框架如图




片选之后读了ID,我们来看看这个cmdfunc函数适不适用???


在默认的函数里面最终调用了这个函数来发命令


怎么构造这个函数

我们可以参考atmel的


根据这个我们改成下面这种框架





得到flash的类型


我们来看看nand_get_flash_type干了什么


从这里看出,即发命令又发0地址,为什么,我们前面试验过读ID嘛 发出0x90之后 还要发出0地址


然后读数据


假设我们也不提供这个,用一下默认的,看一下适不适用



它读这个io_addr_r地址,所以我们要设置这个地址


有读就有写

看一下写函数


我们需要提供IO_ADDR_W地址


判断状态勒,在电路原理图上就是读RnB引脚的状态

在内核里我们看一下默认的函数




我们需要写出这个函数

这个函数怎么写呢


这个寄存器的


这一位就可以知道状态





片选




所以最后我们半成品的代码如下


#include <linux/module.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/ioport.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/clk.h>
#include <linux/cpufreq.h>


#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
#include <linux/mtd/partitions.h>


#include <asm/io.h>


#include <plat/regs-nand.h>
#include <plat/nand.h>


static struct nand_chip *nand;
static struct mtd_info *nand_mtd;


static void gh_select_chip(struct mtd_info *mtd, int chipnr)
{
if(chipnr == -1)
{
//取消选中 将NFCONT[1] 设置为2
}
else
{
//选中 NFCONT【1】设置为0



}


}


static void gh_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
{


if (ctrl & NAND_CLE)
//发命令 NFCMD寄存器 = cmd的值
else
//发地址 NFADDR寄存器=cmd的值




}


static  int gh_dev_ready()
{
return "NFSTA的第0位";
}


static int nand_init(void)
{
/*1.分配一个nand_chip结构体*/
nand = kzalloc(sizeof(struct nand_chip), GFP_KERNEL);
/*2.设置*/
//设置nand_chip是给nand_scan_ident函数用的,如果不知道怎么设置,先看nand_scan_ident怎么使用*/
//它应该提供发命令,发地址,发数据,读数据,判断状态的功能
nand->select_chip = gh_select_chip; 
nand->cmd_ctrl = gh_cmd_ctrl;
nand->dev_ready = gh_dev_ready;
nand->IO_ADDR_R = "nfdata寄存器的虚拟地址";
nand->IO_ADDR_W = "NFDATA寄存器的虚拟地址";

/*3.使用*/
nand_mtd=kzalloc(sizeof(struct mtd_info),GFP_KERNEL);

//将mtd_info与nandchip相联系起来


nand_mtd->owner = THIS_MODULE;
nand_mtd->priv = nand;




nand_scan_ident(nand_mtd,1,NULL);//第二个参数是最大芯片个数
nand_scan_tail(nand_mtd);


return 0;
}


static void nand_exit(void)
{


}


module_init(nand_init);
module_exit(nand_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("EIGHT");
 


块设备驱动程序之nandflash——基本框架

我们先查看内核的启动信息,以搞清楚从哪个文件着手来分析: S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c2440-nand s3c24...
  • zuijinzhao
  • zuijinzhao
  • 2012年09月25日 10:08
  • 1054

基于MTD的NANDFLASH设备驱动底层实现原理分析(一)

经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列 痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动。。大概一共历经了半个月 的时间,慢慢的...
  • eilianlau
  • eilianlau
  • 2011年11月12日 00:08
  • 9232

NandFlash驱动超详细分析

今天学习了NandFlash的驱动,硬件操作非常简单,就是这个linux下的驱动比较复杂,主要还是MTD层的问题,用了一下午时间整理出来一份详细的分析,只是分析函数结构和调用关系,具体代码实现就不看了...
  • zjy900507
  • zjy900507
  • 2017年05月04日 11:17
  • 530

nand flash驱动

  • 2009年01月19日 16:54
  • 28KB
  • 下载

nand flash 驱动

  • 2013年04月22日 09:32
  • 1.79MB
  • 下载

写nandflash 注意到的几个头文件 和目录

1.驱动的目录             driver/mtd/nand/*.c  下面所有的.c 文件是与nandflash 驱动编写相关的     最重要的有两个:     一. 系统默认的...
  • xiaohendsc
  • xiaohendsc
  • 2013年07月12日 07:47
  • 362

S3C2416裸机开发系列五_Nand驱动以及Nand启动

S3C2416裸机开发系列五 Nand驱动以及Nand启动 象棋小子    1048272975 在嵌入式设计中,由于Nand Flash具有大容量,擦写次数高,接口简单等优点,常用作固化存储器。S3...
  • huang20083200056
  • huang20083200056
  • 2014年03月24日 09:58
  • 1882

u-boot-2014.10移植第19天----添加nand flash命令支持(一)

今天继续移植nand flash,对于很多情况而言,u-boot从nand flash启动是一个至关重要的功能,毕竟NOR flash成本太高,不是所有开发板都会添加NOR flash。u-boot中...
  • sonbai
  • sonbai
  • 2014年12月31日 20:03
  • 2267

Linux内核的Nand驱动流程分析

最近在做Linux内核移植,总体的感觉是这样的,想要彻底的阅读Linux内核代码几乎是不可能的,至少这还不是嵌入式学期初期的重要任务。内核代码解压后有250M左右,据统计,有400多万行,而且涉及到了...
  • girlkoo
  • girlkoo
  • 2012年09月03日 16:55
  • 7271

u-boot nand flash驱动架构分析一

在移植nand flash驱动之前,我们要先熟悉u-boot中nand flash驱动架构以及nand flash操作原理。 在u-boot启动过程中调用了nand_init函数,这就是nand f...
  • mcgrady_tracy
  • mcgrady_tracy
  • 2012年06月03日 00:34
  • 6804
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nandflash驱动之简单编写
举报原因:
原因补充:

(最多只允许输入30个字)