原创 C8051F320与NandFlash实现U盘之NandFlash驱动

2007-10-19 16:02 5439 5 7 分类: MCU/ 嵌入式

U盘的存储介质用三星的NandFlash K9F5608U0B,由于C8051F320自身没有Nandfalsh的驱动接口,只能用单片机的通用IO口来模拟Nandflash的时序. 数据线IO0-IO7 接单片机的P1. 数据线是双向的,一定要用OD方式, 320 IO 内部有上拉电阻, 根据C8051F320DATASHEET , 上拉使能时输入漏电流为25-40uA, 估计其上拉电阻只有3V/30uA = 100Kohm. 又根据K9F5608U0BDATASHEET, K9F5608U0B输出低电平VoL0.1V时吸收灌电流的典型值是2mA. 3.3V的电源电压下,取上拉为3.3k即可满足要求. 其他信号线: CLE(命令锁存使能), ALE(地质锁存使能), CE(片选), WE(读选), RE(写选), WP(写保护), R/B()分别P2口和P0. WP 用来防止上电或掉电瞬间,Flash内部数据被改写,通常在监测到电源的波动后使能WP, 正常工作条件下禁止WP.


NandFlash的特点是数据与地址复用一条总线, 节省了控制器的IO 接口. 它的Memory Arry的组织方式是Block page, 一个block 包含32page,一个page 内有512字节memory cell 16字节spare area. 对于K9F5608U0B来说,它是32MB的容量,那么它将对应25地址线 A0 to A24, A0 to A7 确定page内的地址,A9 to A24确定block地址,为了压缩发送地址的周期, 把地址线的第9A8编入命令字,发不同的命令字操作A80的低存储区或A81的高存储区。这样在ALE的使能下3cycle的操作就可选中要访问的存储区。NandFlash的读操作比较灵活,可以读任意page中的任意字节,地址在读命令中给出。而写操作是基于Page进行的,由于Flash的特性,只能把1拉低为0 ,而不能把0拉高为1,所以在写Page 之前一定要对Page 所在的block进行整块的擦除操作使整个block都为0xFF除读操作以外的所有的操作在完成后都必须发送读状态命令通过判断IO0的状态确定操作是否正确。


点击看大图


nandFlash的操作函数介绍如下:


extern void Read_ID(void);             //读Flash ID
extern void write_cmd(uchar);        //写命令
extern void write_addr(uchar);       //写地址
extern void write_addr_2byte(uchar, uchar);
extern void write_addr_3byte(uchar, uchar, uchar);
extern uchar read_dat(void);          //读字节
extern void write_dat(uchar);         //写字节
extern uchar read_status(void);     //读状态
extern uchar block_erase(uchar,uchar);    //块擦除
extern uchar page_program(uchar *,uchar, uchar, uchar, uint);             //页编程
extern uchar copy_back(uchar ,uchar , uchar , uchar , uchar , uchar);  //块复制
extern void page_read(uchar ,uchar , uchar) ;  //页读



上传原理图和源代码:pdfzip

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2012-12-13 20:49

你好 我用了你的程序和原理图,唯一的一点是上拉电阻是4.7k,能识别u盘但是无法格式化,东西拷贝以后重新插上去就没有了,请问是为什么,希望您可以指导一下,谢谢,我的邮箱是731235004@qq.com

用户99239 2008-1-15 16:14

你好!我看过你发表的使用F320芯片实现U盘的文章,非常感谢!我在其中学到了一些东西,谢谢!不过我有个问题想请教一下,DBR是程序中固化的,如果通过PC改变分区及相关信息是怎样实现的?mcudata@hotmail.com

相关推荐阅读
用户97533 2008-06-20 18:34
还有几块空板,想送给有意用LPC2368的网友,交个朋友
还有几块空板,想送给有意用LPC2368的网友,交个朋友,优先考虑南京的朋友, 因为本人现在南京, 让俺们共同努力, 一齐进步! ...
用户97533 2008-06-14 10:07
上传已调试好的源程序,原理图
上传源程序和板子原理图请点击下载。原理图是POWERLOIGC格式的。...
用户97533 2008-06-13 19:01
LPC2368网络板DIY——RTC 调试记录(七)
       RTC的使用,首先要设置RTC的时钟源,2368可以有两种方式,1 使用PLL 分频得到32.768K的时钟,2 直接用外部32.768的晶体,不知NXP为何搞这两种方式,个人认为可能是...
用户97533 2008-06-13 18:51
LPC2368网络板DIY——CSTN 调试记录(六)
        CSTN屏的大小是 162X132,6.5K色,我用的是8位并行的传输模式,点亮一个点需要两个发送周期。先送高字节,再送低字节。在调试的时候发现,图片的颜色老是不对,CSTN的驱动时序...
用户97533 2008-06-13 18:43
LPC2368网络板DIY——I2C PCF8574 调试记录(五)
调试完了FAST GPIO,开始进入I2C接口调试,主要实现对PCF8574的控制,整个程序是个状态机,I2C 中断服务程序根据不同的状态确定下一步要做的事情。首先确定8574的地址,由于原理图上我接...
用户97533 2008-06-13 18:31
LPC2368网络板DIY——FastGPIO 调试记录(四)
LPC2368的GPIO可以配置为low speed 和high speed 两种模式,PORT0,PORT1默认为low speed模式,PORT2,PORT3, PORT4只能工作在high sp...
EE直播间
更多
我要评论
2
5
关闭 站长推荐上一条 /3 下一条