如何编写linux下nand flash驱动-3】的更多相关文章

2.       软件方面 如果想要在Linux下编写Nand Flash驱动,那么就先要搞清楚Linux下,关于此部分的整个框架.弄明白,系统是如何管理你的nand flash的,以及,系统都帮你做了那些准备工作,而剩下的,驱动底层实现部分,你要去实现哪些功能,才能使得硬件正常工作起来. [内存技术设备,MTD(Memory Technology Device)] MTD,是Linux的存储设备中的一个子系统.其设计此系统的目的是,对于内存类的设备,提供一个抽象层,一个接口,使得对于硬件驱动设…
[Nand Flash引脚(Pin)的说明] 图3.Nand Flash引脚功能说明 上图是常见的Nand Flash所拥有的引脚(Pin)所对应的功能,简单翻译如下: 1.       I/O0 ~ I/O7:用于输入地址/数据/命令,输出数据 2.       CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能 3.       ALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,…
1.       硬件特性: [Flash的硬件实现机制] Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device).关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内…
[读(read)操作过程详解] 以最简单的read操作为例,解释如何理解时序图,以及将时序图 中的要求,转化为代码. 解释时序图之前,让我们先要搞清楚,我们要做的事情:那就是,要从nand flash的某个页里面,读取我们要的数据. 要实现此功能,会涉及到几部分的知识,至少很容易想到的就是:需要用到哪些命令,怎么发这些命令,怎么计算所需要的地址,怎么读取我们要的数据等等. 下面,就一步步的解释,需要做什么,以及如何去做: 1.需要使用何种命令 首先,是要了解,对于读取数据,要用什么命令. 下面是…
注册 driver_register 通过 module_init(s3c2410_nand_init);注册 Nand Flash 驱动. 在 s3c2410_nand_init ()中通过 driver_register()注册 s3c2410_nand_driver 驱动程序,如下所示: static struct device_driver s3c2410_nand_driver = { .name          = "s3c2410-nand", .bus        …
s3c2410 专有数据结构 s3c2410_nand_set struct s3c2410_nand_set { int                    nr_chips;     /* 芯片的数目 */ int                    nr_partitions; /* 分区的数目 */ char                   *name;          /* 集合名称   */ int                   nr_map;       /* 可选…
当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备. 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架. 框架如下: 1.即使nand flash是一个块设备,它也能作为一个字符设备使用,因为说到底,也只是从寄存器内部读取值而已. 2.对于不同的文件系统,会有不同的文件组织形式. 3.由于块设备的硬件操作繁琐,就像nand fl…
Nand Flash 设备添加时数据结构包含关系 struct mtd_partition        partition_info[] --> struct s3c2410_nand_set     nandset --> struct s3c2410_platform_nand superlpplatfrom --> struct platform_device      s3c_device_nand 在该数据结构的 name 字段的初始化值"s3c2410-nand&…
[详解]如何编写Linux下Nand Flash驱动  :http://www.cnblogs.com/linux-rookie/articles/3016990.html 当读写文件请求到来的时候,流程如下 1.通过vfs进入文件系统, 2.文件系统把文件读写转换为块设备读写,其中有运用算法对读写操作进行合并,排序等,最后把块设备读写放进队列 3.循环从队列中取出读写要求,然后用处理函数(blk_init_queue设置)进行处理. 这个函数就是连接上层(IO调度)跟底层(硬件操作)的桥梁,当…
linux操作系统下nand flash驱动框架 当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备. 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架. 框架如下: 1.即使nand flash是一个块设备,它也能作为一个字符设备使用,因为说到底,也只是从寄存器内部读取值而已. 2.对于不同的文件系统,会有不同的文件组织形式.…
linux的NAND Flash驱动位于drivers/mtd/nand子文件夹下: nand_base.c-->定义通用的nand flash基本操作函数,如读写page,可自己重写这些函数 nand_bbt.c-->与坏块管理有关的函数和结构体 nand_ids.c-->nand_flash_ids[](芯片ID)和nand_manuf_ids[](厂商ID) nand_ecc.c-->软件ECC代码,若系统支持硬件ECC.则不用理会这个文件 pl353_nand.c-->…
简单制作一个Nand Flash驱动(只需要初始化Flash以及读Flash) 打开2440芯片手册,K9F2G08U0M芯片手册(因为2440中Nand Flash是用的256MB(2Gb)内存,8个数据引脚) 在芯片手册中得到K9F2G08U0M=2048块Block=128K页Pages=256MB=2Gb 1块Block=64页Pages 1页=(2K+64)B            (因为每个地址里都存放了一个字节,所以用B表示) 其中64B是存放ECC的OOB地址,(ECC:存放判断…
在读者学习本章之前,最好了解Nand Flash读写过程和操作,可以参考:Nand Flash裸机操作. 一开始想在本章写eMMC框架和设备驱动,但是没有找到关于eMMC设备驱动具体写法,所以本章仍继续完成Nand Flash设备驱动,eMMC这个坑留在以后填.如果读者开发板为eMMC,本节驱动可能无法正常执行. 在裸机操作中,读者应了解Nand Flash时序图.Nand Flash片选.读写和擦除等操作,在此不再赘述. 一.Nand Flash驱动分析 Nand Flash设备驱动放在dri…
1.NAND FLASH的硬件连接: 实验用的NAND FLASH芯片为K9F2G08U0C,它是三星公司的存储芯片,它的大小为256M.它的接线图如下所示: 它的每个引脚的分别为LDATA0-LDATA7为数据引脚.CLE为发送命令使能引脚.ALE为发送地址使能引脚.CE为芯片使能引脚.WE为写使能引脚.WP为写保护引脚.R/B为芯片是否繁忙的状态指示引脚,如下图所示: 2.NAND FLASH的操作: 根据NAND FLASH的芯片手册可以知道需要操作NAND FLASH一般的流程是发出命令…
内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/3669623.html Linux内核中已经做好了Nand Flash的驱动,只需要进行适当的修改即可使用. 一.修改内核源码arch/arm/plat-s3c24xx/common-smdk.c文件: 1.修改其中的smdk_default_nand_part[]结构体(大概在109行),将其修改为如下所…
MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析 Yao.GUET@2014-05-19 一.故事起因 由于文件系统的增大,已经大大的超出了8MB的NOR FLASH.而不得不把内核,文件系统和设备树文件保存到NAND FLASH上. 可是由于使用的是RAMDISK,而无法保存一些个别的配置和參数,最简单的须要就是设置系统的IP了,.. 要使用统一的RAMDISK.而实现LINUX启动之后.设置成不能的參数功能,比較方便的就是从UBOOT把这些參数传递过去…
NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线,      怎么传输地址? 答1.在DATA0-DATA7上既传输数据,又传输地址      当ALE为高电平时传输的是地址, 问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令      怎么传入命令? 答2.在DATA0-DATA7上既传输数据,又传输地址,也传输命令      当A…
1.linux下的声卡驱动架构主要分为OSS架构和ALSA架构. 2.OSS架构 OSS全称是Open Sound System,叫做开放式音频系统,这种早期的音频系统这种基于文件系统的访问方式,这意味着对声音的操作完全可以像对普通文件那样执行open,read等操作.OSS中,主要提供了以下几种音频设备的抽象设备文件: /dev/mixer:用来访问声卡中的混音器用于调整音量大小和选择音源 /dev/dsp./dev/audio:读这个设备就相当于录音,写这个设备就相当于放音. 2.ALSA架…
原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比较多,本人使用的Ubuntu系统好多厂商的Android手机都无法正确的识别,经过一番折腾,和查阅SDK,现把Linux下ADB驱动配置的方法和当中会遇到的相关问题的解决方法整理出来贡献给大家. Linux下使用手机USB调试模式连接ADB进行Android程序的调试,配置驱动没有Windows来的…
linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方法就可以成功编译出hello world模块驱动. 1.首先确定本机linux版本 怎么查看Linux的内核kernel版本? 'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版.配合使用'uname'参数可以查看当前服务器内核运行的各个状态. #uname…
之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB枚举过程:https://blog.csdn.net/go_str/article/details/80802452 USB其它概念: Linux platform平台总线.平台设备.平台驱动 (1)usb是主从结构,usb的传输都是主机发起: (2)usb右四种传输类型:控制.批量.中断.实时传输…
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查看网卡驱动 查看网卡驱动信息:lspci -vvv # 找到网卡设备的详细信息,包括网卡驱动 列出加载的所有驱动,包括网卡驱动 : lsmod 查看模块信息:modifo < name> 其中包含version信息或 ethtool-i < name> 对于ethtool: 一,命令介…
usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提交给usb子系统. 转载于此http://os.chinaunix.net/a2003/0630/1056/000001056933.shtml Linux下的硬件驱动——USB设备(上)(驱动配置部分) USB设备越来越多,而Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和…
i2c在linux下的代码在/driver/i2c下面,总体代码如下所示: i2c-core.c 这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口.    i2c-dev.c  实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备.通过适配器访设备时的主设备号都为89,次设备号为0-255.I2c-dev.c并没有针对特定的设备而设计,只是提供了通用的read(),write(),和ioctl()等接口,应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储…
由于我电脑的各种奇葩问题的存在,导致我装上Ubuntu13.10之后网卡居然无法使用,坚持了挺久使用无线网,终于坚持不住了,百度了各种解决方式,终于成功解决.这里也记录一下我的解决过程,供大家参考.大概有以下几种方式: 一.直接百度,Google “Linux下网卡驱动下载”,不过结果并不乐观...基本没有能用的东西. 二.去电脑的官网下载,有个用Dell的哥们貌似就是这么干的.可是当我登上大联想的官网,一查驱动发现全是for windows.于是呵呵,看来这两家还 是有不小的差距的啊... 三…
毕竟windows用了这么些年了,对windows下的一些东西也比较熟悉,还有就是windows的软件方式比较傻瓜. 在linux下搞不定无线网卡啊,幸亏有甲骨文的virtualbox,咱虚拟一个xp先用着,安装xp下的驱动相对较容易一些. 使用网卡是为了建热点用,权宜之计啦…
u-boot版本: u-boot-2010.03_tekkamanninja修改的u-boot 1.将uboot通过j-link烧写到norflash,启动后 saveenv 将参数保存到 nandflash的 0x60000位置. 2.由于uboot将param保存在0x60000位置,与内核不对应,需要修改内核的nand分区,修改内核文件arch/arm/mach-s3c2440/mach-mini2440.c static struct mtd_partition friendly_arm…
一.NAND FLASH的特点 S3C6410的NAND FLASH控制器有如下特点 1.自导入模式:复位后,引导代码被送入到8KB的STEPPINGSTONE中,引导代码移动完毕,引导代码将在STEPPINGSTONE中执行.导入期间,NAND FLASH控制器不支持ECC矫正. 2.NAND FLSH 控制器I/F:支持512字节和2KB页 3.软件模式:用户可以直接访问nand flash 控制器,该特性可以用于读/檫/编程nand flash 存储器. 1)写命令寄存器=NAND FLA…
框架入口源文件:s3c_nand.c (可根据入口源文件,再按着框架到内核走一遍) 内核版本:linux_2.6.22.6   硬件平台:JZ2440 以下是驱动框架: 以下是驱动代码 s3c_nand.c : #include <linux/module.h> #include <linux/types.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/strin…
1.FLASH转换层(FTL) EXt2/EXT3/EXT4文件系统可以通过FTL实现对flash的支持,因为FTL可以将闪存flash模拟成磁盘结构. 在ext2文件系统的基础上上,为了保证数据的一致性ext3文件系统增加了日志功能. 在ext3文件系统的基础上ext4文件系统增加了对大文件(T单位级的文件)的支持,另外对于每个目录下的文件个数没有了限制. 2.JFFS.JFFS2文件系统(链表结构,典型的日志文件系统) 书上是这样说的: JFFS2 是一个日志结构(log-structure…