资讯
HOME
资讯
正文内容
nand flash驱动实例 NAND flash 信号线的理解
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

NAND flash 信号线的理解

上一篇我们已经讲了NAND flash的分类,这一篇介绍NAND flash 的硬件接口。例如

由NAND Flash的原理图封装,然后查看芯片手册。

由图可知:IO0-IO7:既可传送数据也可传送地址,也可以送传命令。那到底是读是写,还是擦除?怎么区分IO0-IO7传送的是数据?地址?命令? 那么就需要通过CLE与ALE的状态来区分了。

假如2440要读取A地址的数据,或将数据写入B地址。当CLE为高电平表示IO0-IO7传送的是命令;当ALE为高电平表示IO0-IO7传送的是地址;当ALE与CLE都为低电平的时候,表示IO0-IO7传送的是数据。

CE:片选。当2440要操作访问Nand的时候,首先必须选中。

RE:读信号,当RE为低的时候,表示数据由Nand流向2240;

WE:写信号,当RE为低电的时候,表示数据由2240流向Nand;

WP:写保护,只能写,不能擦除。

R/B:Ready信号,表示Nand Flash烧写完成

这些引脚具体怎么组合起来的,需要查看手册中的时序图。

发(写)命令的时序图:

首先CE发出片选信号,CLE发出高电平,IO 0-7将命令驱动出去,WE写脉冲,在写脉冲的上升沿,Nand flash在上升沿,将IO 0-7中数据读取出来。

发地址的时序图:

CE片选, ALE由低变高,IO 0-7驱动 数据,WE发出写脉冲。

输入(写)数据的时序图:

CE选中,ALE、CLE低电平,2440 IO 0-7驱动 数据,WE写信号,Nand flash根据ALE、CLE低电平,读取数据。

输出(读)数据的时序图:

CE低电平选中,RE由高变为低(Nand flash收到RE由高变低时,马上准备数据,然后在RE的上升沿将数据发送出去),Nand flash 驱动数据到IO 0-7,在上升沿,2440取数据。

2440这些引脚发出的数据,必须满足Nand flash的时序要求。需要查看2440芯片手册,查看设备哪个寄存器的某些位来控制时序

嵌入式Linux系列第5篇:Nand Flash根文件系统制作

1.引言

之前系列的文章介绍了如何编译Uboot、Kernel以及使用默认的ramdisk根文件系统来构建一个完整的嵌入式Linux系统,本篇文章介绍如何从头制作一个放在NAND Flash上的根文件系统。经过我这段时间的总结,rootfs相关的编译、配置等工作还是比较麻烦的。所以你可能会看到一般做核心板的第三方厂家会建议初学者直接使用现成提供的文件系统,比如一个做NUC972核心板的厂家,其文档里这么描述:

再比如另外一个做NXP I.MX6核心板的厂家,其文档里这么描述:

他们都建议初学者直接使用他们提供好的文件系统。但是我还是强烈建议大家自己一步一步的去操作制作一次,因为一是这有助于你理解根文件系统是怎么来的,最小的能用的根文件系统包含了哪些东西,二是将来你很有可能需要对文件系统做一些定制化的裁剪和修改工作,只有自己做了一遍你对会明白这个东西到底是怎么回事,比如我原来就搞不清楚Busybox、Buildroot、Yocto这些名词在Linux中的作用,现在随着实践增多,就大概知道他们的用处了。

2.环境介绍

2.1.硬件

因为本系列博客都会以NUC972为平台来介绍。

2.2.软件

本篇新用到的软件工具一个是busybox,它用来生成文件系统里的几个最基本的文件夹,二是打包工具mkyaffs2,它用来生成能直接烧录到板子里的镜像文件。

大家有没有注意,我为什么每次都把这个官方的链接放过来,让大家自己去下载,原因是我们要知道我们用的东西的源头在哪里,最官方的资料渠道在哪里,这很重要。

我们这次要实现的目标是:自己亲手制作的文件系统能够跑起来,同时能够运行我们第二篇文章介绍的Helloworld程序。

3.使用Busybox制作根文件系统

1)进入到nuc972文件夹,新建一个tool文件夹,用来存放busybox、mkyaffs2等工具,把上面下载的NUC970_Linux_Applications-master.zip文件解压到tool文件夹里,因为解压后含有NUC970_Linux_Applications-master,我们把里面的内容移出来,然后删除掉空的NUC970_Linux_Applications-master文件夹和NUC970_Linux_Applications-master.zip源文件。然后进入到busybox目录里。同样的,在编译前要设置交叉编译的环境变量。

cd ~/nuc972

mkdir tool

unzip NUC970_Linux_Applications-master.zip

cd NUC970_Linux_Applications-master

mv ./* ../

cd ..

rm NUC970_Linux_Applications-master -fr

rm NUC970_Linux_Applications-master.zip

cd busybox-1.22.1/

source ~/nuc972//toolchain/environment.sh

2)make menuconfig 进入配置界面

make menuconfig

我们这里就设置一个地方,其他的全部使用默认配置。

修改make install生成的文件夹路径,我们把默认的./_install改成nuc972目录下的rootfs。

Busybox Settings --->

Installation Options ("make install" behavior) --->

(../../rootfs) BusyBox installation prefix

3)make 编译

make

编译成功后显示如下:

编译完成之后我们可以查看一下busybox的文件属性,可以看到如下信息,说明我们交叉编译的没问题。

4)make install 安装

make install

这样就在前面我们设置的地方生成一个rootfs的文件夹,进到里面看一下

cd ~/nuc972/rootfs

ls

bin、sbin、usr :存放一些命令

linuxrc :挂载根文件系统时,第一个执行的文件

4)再创建几个文件夹

mkdir etc lib dev

5)在 rootfs 目录的dev目录下创建设备节点

cd dev

sudo mknod console c 5 1

sudo mknod null c 1 3

6)在根文件系统rootfs/etc目录下创建一个inittab 文件,在文件里面填写:.console::askfirst:-/bin/sh

cd ../etc

vim inittab

4.文件系统打包

1)进入到tool文件夹的yaffs2utils目录里

cd yaffs2utils

2)编译,生成mkyaffs2

make clean

make

注:编译这个工具,不需要修改Makefile,用file看下属性,它是在x86-64运行的,这是没问题的,因为它就是在Ubuntu下使用的,不是在嵌入式环境下去执行使用的。

将它复制到/usr/bin下以后用起来方便了,可以直接使用这个指令了,你可一在终端敲mkya,然后TAB建看不能出来。

sudo cp mkyaffs2 /usr/bin/

4) 生成文件系统

sudo mkyaffs2 --inband-tags -p 2048 rootfs rootfs_yaffs2.img

5.内核修改

内核也要做一定的修改,具体如下:

1)make menuconfig进入到内核配置界面

make menuconfig

2)默认用的RAM filesytem 需要去掉

General setup —>

[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

3)默认的Boot option需要修改成如下:

Boot options --->

(noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M)

4)NAND Flash驱动相关配置

Device Drivers --->

Generic Driver Options --->

<*> Nuvoton NUC970 FMI function selection

Select FMI device to support (Support MTD NAND Flash) --->

5)选中MTD的支持

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

<*> Caching block device access to MTD devices

-*- NAND Device Support --->

-*- Nuvoton NUC970 MTD NAND --->

NUC970 NAND Flash pin selection (Port C) --->

6)选中yaff2文件系统的支持

File systems --->

[*] Miscellaneous filesystems --->

<*> yaffs2 file system support

7)保存配置,编译

6.结果查看

6.1.验证文件系统是否可用

1)将上述生成的kernel 970uimage、文件系统rootfs_yaffs2.img、还有之前第三讲生成的uboot.bin,uboot-spl.bin,以及env.txt 下载到板子里,env.txt做了一些改动,主要是加入了boocmd那一行,这样下载进去就能直接启动了。

baudrate=115200

bootcmd=nboot 0x7fc0 0 0x200000; bootm 0x7fc0

bootdelay=1

ethact=emac

ethaddr=00:00:00:11:66:88

stderr=serial

stdin=serial

stdout=serial

烧写前,最好对芯片进行一次Erase。几个文件的烧写类型及地址大家注意下,别搞错了。

2)上电,看看效果,调试串口打印信息如下:

这一次很顺利啊,一次就成功了,这就说明我们上述做的根文件系统是可以正常使用的了。

6.2.验证helloworld能否在板子上运行

我们还要看看我们之前编译的helloworld程序能不能运行,我们把helloworld放到板子里去,怎么把这个文件放到板子上呢?有以下几种方式:

a) 把Helloworld在Ubuntu下放到rootfs文件夹里,然后按照上述的方法打包、下载进去。

b)通过scp或者NFS服务,直接通过网口放到板子里

c) 先放到U盘里,然后U盘插入到板子上,再复制过去

方法a)自然没问题,不过有些麻烦,方法b)现阶段我们的文件系统并不支持,暂时先不弄了,下一篇文章会介绍scp的移植,我们来试试方法c)吧

1)插入U盘到电脑上,把helloworld拷贝过去

2)把U盘插入到板子上,这时调试串口会自动输出如下信息,提示我们有USB Mass Storage设备接入了,看来内核已经把USB这部门驱动已经做进去了。这不是有点像我们给PC机重装Windows系统的过程,默认鼠标键盘也是可以直接使用的。

我们进入到/dev目录里,可以看到有sda1设备,LINUX所有的存储设备都是映射成"文件"来访问的,包括U盘、光驱、硬盘等。这个sda1就对应我们刚插入的U盘。

那么该如何访问U盘的东西呢?

我们需要挂载,使用mount指令,我们执行以下命令:

mkdir mnt

cd mnt

mkdir usb

cd usb

mount -t vfat /dev/sda1 /mnt/usb

cd /

mkdir opt

cp /mnt/usb/helloworld /opt

完成的事情是把sda1挂载到了/mnt/usb目录上,这样/mt/usb目录里就有了U盘里的内容,然后再复制到了系统的/opt目录。

我们在/opt目录里执行./helloworld,提示如下错误:

-/bin/sh: ./helloworld: not found

这是怎么回事呢?原因很简单,helloworld的执行是需要依赖一些库的,不可能系统里什么都没有就执行能执行成功了。所以需要我们把交叉编译链~/nuc972/toolchain/arm-2014.05/arm-none-linux-gnueabi/libc/lib里的库文件复制到板子的lib目录里。

可以先到arm-2014.05/arm-none-linux-gnueabi/libc/lib目录中,压缩下

tar -cvf lib.bin *

然后通过U盘放到板子的/lib目录中解压

tar -xvf lib.bin

这样操作之后,再次执行helloword,结果如下:

另外可以对板子断电-再上电,看看我们之前操作的内容都还在,因为它是存到NAND Flash里的,所以断电是不丢失的。

7.结束语

如果你亲自动手实现了这篇文章介绍的所有内容,相信你对根文件系统一定有了一个非常感官的认识。包括这篇在内,我用了5篇文章一直在介绍嵌入式Linux基础环境相关的内容,你应该也能感受到这和我们以前接触的单片机开发还是有着较大的差异。从下一篇文章开始,我们就正式进入到具体的应用了。我会陆续介绍GPIO、UART使用;网络通信;WIFI使用;摄像头采集数据;EC20 4G模块使用;QT编程;Opencv使用等。

相关问答

超级终端显示有路由器的开启信息,键盘不管用是为什么?-ZOL问答

xuchupeng超级终端是将用户输入随时发向串口(采用TCP协议时是发往网口,这里只...1、nandflash中没有保存环境变量值,可使用saveenv保存环境变量试下;2、环境...

norflash和 nandflash 的区别?

NANDflash和NORflash的区别一、NANDflash和NORflash的性能比较flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的....

win10系统用 flash 打不开下载的打印机 驱动 ?

方法一:1、当打印机无法正常使用时,我们首先需要检查一下与打印相关的系统服务是否正常开启,可以通过按【Windows】+【R】组合键打开;2、输入【ser...方法...

电脑安装 驱动 时闪屏,重启后还在闪,怎么解决?急,在线等?

..2、外接显示正常,请重新插拔两侧屏线接口并固定、检查屏线在屏轴处的走线是否可能受到挤压和其他部件干扰;3、以上操作无效,替换液晶屏测试,如故障现象消...

chrome为什么不支持 flash ?

Chrome是在近2年要求用户主动开启使用Flash权限,再默认的情况下是禁用Flash。最后,计划在2020年底彻底从Chome中移除Flash。Flash以插件的身份,做着平台该做...

电脑连接投影仪显示安装 flash驱动 ?

在连接电脑和投影仪后,如果在显示过程中出现需要安装flash驱动的提示,需要在电脑浏览器中下载并安装flash插件。在安装完成后,重新打开浏览器即可正常显示投影...

电脑装了 flash 仍无法观看课件?

电脑装了flash无法观看课件,这是电脑缺乏flash驱动造成的。Flash软件在电脑运行时,除了软件本身,还需要安装驱动,这样才可以读取科技电脑装了flash无法观看...

我在PPT中添加了 flash ,为何到其他电脑上就不能播放了...有什...

一、因为PPT里插入的FLASH使用的FLASH来源是电脑本地SWF文件,需要将SWF文件复制粘贴到FLASH来源上所在的目录。二、解决方法:1、选择PPT文档里插入的FLASH控件...

mi flash驱动 安装不了?

关于这个问题,如果您在安装MiFlash驱动时遇到问题,可能是以下原因之一:1.您的电脑没有管理员权限。请确保您以管理员身份登录。2.您的电脑中已安装了其他驱...

dell 驱动 哪些必须下?

对于Dell电脑,以下是一些必须下载的驱动程序:主板芯片组驱动:这是电脑的核心组件,负责协调各个硬件部件之间的通信。安装正确的主板芯片组驱动可以确保系统的...

 nba总冠军排名  少数民族的民居 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部