`
isiqi
  • 浏览: 16027045 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

K9F1G08驱动程序

阅读更多

如果你认为本程序对您有价值,请反馈意见

/*
*******************************************************************************************************************
*** 工程名称: QDT64481BC终端主板控制器程序
*** 文件名称: K9F1G08_Driver.C
*** 文件用途:NAND FLASH驱动函数
*** 其他说明:实现NAND FLASH 驱动函数功能
*** 最后修改:
*******************************************************************************************************************
*/

#include"Project.H"

/*
==================================================================================================================
=== 功能描述:读取FLASH的ID
=== 入口参数:无
=== 出口参数:返回id ,与FLASH_ID比较
==================================================================================================================
*/
void Flash_Reset(void)
{FLASH_CE = 0;
FLASH_ALE = 0;
FLASH_CLE = 1;

FLASH_RE = 1;

FLASH_WE = 0;
FLASH_DATA=0x90;
FLASH_WE = 1;

Delay(10);
while(!FLASH_RB);

FLASH_CLE = 0;
}

/*
==================================================================================================================
=== 功能描述:读取FLASH的ID
=== 入口参数:无
=== 出口参数:返回id ,与FLASH_ID比较
==================================================================================================================
*/
uint Flash_ChekeId(void) //本函数成功读取ID
{uint id;
FLASH_CE = 0;
FLASH_ALE = 0;
FLASH_CLE = 1;
FLASH_RE = 1;

FLASH_WE = 0;
FLASH_DATA=0x90;
FLASH_WE = 1;
while(!FLASH_RB);
FLASH_RE = 1;
FLASH_ALE = 1;
FLASH_CLE = 0;

FLASH_WE = 0;
FLASH_DATA=0x00;
FLASH_WE = 1;
while(!FLASH_RB);

FLASH_ALE = 0;

FLASH_RE = 0;
FLASH_DATA=0xff;

id=(((uint)FLASH_DATA)<<8);

FLASH_RE = 1;

FLASH_RE = 0;
FLASH_DATA=0xff;
id|=(((uint)FLASH_DATA));

FLASH_RE = 1;

return id;
}

/*
==================================================================================================================
=== 功能描述:擦除FLASH中的一块(BLOCK)
=== 入口参数:指定擦除的块号(FLASH_BLOCK);
=== 出口参数:0-擦除成功 1-擦除失败
==================================================================================================================
*/
uchar Flash_EraseBlock(unsigned long Block)
{
ucharstate=1;
unsigned long BlockPage;

BlockPage = Block<<18; //(5-->14)

FLASH_CE=0;
FLASH_RE=1;
FLASH_CLE=1;
FLASH_ALE=0;

FLASH_WE=0;
FLASH_DATA = 0x60;

FLASH_WE=1;

FLASH_CLE=0;
FLASH_ALE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)(BlockPage>>12 & 0xC0);
FLASH_WE=1;

FLASH_WE=0;

FLASH_DATA = (uchar)(BlockPage>>20 & 0xFF);

FLASH_WE=1;
FLASH_ALE=0;
FLASH_CLE=1;

FLASH_WE=0;
FLASH_DATA=0xD0;

FLASH_WE=1;

FLASH_CLE=0;

Delay(10); //wait tWB(100ns)

while(FLASH_RB==0);

FLASH_CLE=1;

FLASH_WE=0;
FLASH_DATA=0x70;

FLASH_WE=1;

FLASH_CLE=0;
FLASH_RE=0;
FLASH_DATA=0xff;
state=(bit)(FLASH_DATA&0x01);
FLASH_RE=1;

return(state);

}

/*
==================================================================================================================
=== 功能描述:对FLASH指定的块(FLASH_BLOCK)+页(FLASH_PAGE)写入数据
=== 入口参数:*str 欲写入FLASH的数据;Block块号(FLASH_BLOCK);Page页号(FLASH_PAGE);
=== 出口参数:0-写FLASH成功 1-写FLASH失败
==================================================================================================================
*/
uchar Flash_write(uchar *str,unsigned long Block,uchar Page)
{
ushort i;
ucharstate=1;
unsigned long BlockPage;
Page &=0x1F;
BlockPage = (Block<<18) + (Page<<12);//(<<9)

FLASH_CE=0;
FLASH_RE=1;

FLASH_CLE=1;
FLASH_ALE=0;

FLASH_WE=0;
FLASH_DATA=0x80;

FLASH_WE=1;

FLASH_ALE=1;
FLASH_CLE=0;

FLASH_WE=0;
FLASH_DATA = (uchar)(BlockPage & 0x00);

FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>8) & 0x00);

FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>12) & 0xFF);

FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>20) & 0xff);

FLASH_WE=1;

FLASH_WE=0;
FLASH_ALE=0;

for(i=0;i<FLASH_BYTE;i++)
{
FLASH_WE=0;
FLASH_DATA=str[i];
FLASH_WE=1;
}

FLASH_CLE=1;

FLASH_WE=0;
FLASH_DATA=0x10;

FLASH_WE=1;

while(FLASH_RB==0);

FLASH_WE=0;
FLASH_DATA=0x70;

FLASH_WE=1;

FLASH_CLE=0;
Delay(7); //twhr>60ns
FLASH_RE=0;
FLASH_DATA=0xff;
state=(bit)(FLASH_DATA&0x01);
FLASH_RE=1;

return(state);
}

/*
==================================================================================================================
=== 功能描述:对FLASH指定的块(FLASH_BLOCK)+页(FLASH_PAGE)读出数据
=== 入口参数:Block块号(FLASH_BLOCK);Page页号(FLASH_PAGE);
=== 出口参数:无
==================================================================================================================
*/
void Flash_read(unsigned long Block,uchar Page,uchar *pReadTo)
{
ushort i;
unsigned long BlockPage;

Page &= 0x1F;
BlockPage = (Block<<18) + (Page<<12);

FLASH_CE=0;
FLASH_RE=1;

FLASH_CLE=1;
FLASH_ALE=0;

FLASH_WE=0;
FLASH_DATA=0x00;

FLASH_WE=1;

FLASH_CLE=0;
FLASH_ALE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)(BlockPage & 0x00);//(FF-->00)
FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>8) & 0x00);

FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>12) & 0xFF);

FLASH_WE=1;

FLASH_WE=0;
FLASH_DATA = (uchar)((BlockPage>>20) & 0xFF);
FLASH_WE=1;

Delay(10);
FLASH_ALE=0;
FLASH_CLE=1;
FLASH_WE=0;
FLASH_DATA=0x30;

FLASH_WE=1;
FLASH_CLE=0;

while(FLASH_RB==0);

for(i=0;i<FLASH_BYTE;i++)
{FLASH_RE=0;

FLASH_DATA =0xff;
pReadTo[i]=FLASH_DATA;
FLASH_RE=1;
}
FLASH_RE=1;
FLASH_CE=1;
}

/*
*******************************************************************************************************************
*** 工程名称: QDT64481BC终端主板控制器程序
*** 文件名称: K9F1G08_Driver.H
*** 文件用途:NAND FLASH驱动头文件
*** 其他说明:NAND FLASH函数驱动接口定义
*** 最后修改:
*******************************************************************************************************************
*/

#ifndef K9F1G08_Driver_H_
#define K9F1G08_Driver_H_

//flash类型定义
#define TYPE_K9F120864
#define TYPE_K9F1G08256

#define FLASH_TYPE TYPE_K9F1G08


//FLASH控制接口位定义
#define FLASH_DATA P4
sbitFLASH_CE = P5^5; //芯片选择控制
sbitFLASH_RE = P5^6; //数据输出控制,有效时数据送到I/O总线上
sbit FLASH_WP = P3^3; //写保护
sbitFLASH_RB = P5^7; //器件状态:0为忙,1为闲
sbitFLASH_WE = P5^2; //写I/O口控制,命令地址数据在上升沿锁存
sbitFLASH_CLE= P5^4; //命令锁存使能
sbitFLASH_ALE = P5^3; //地址锁存

//FLASH参数标记
#ifFLASH_TYPE==TYPE_K9F1G08
#define FLASH_BLOCK 1024
#define FLASH_PAGE64
#define FLASH_BYTE(2112)
#define FLASH_ID0xECF1

#elifFLASH_TYPE==TYPE_K9F1208
#define FLASH_BLOCK 4096
#define FLASH_PAGE32
#define FLASH_BYTE(528)
#define FLASH_ID0xEC76
#endif

//函数宏定义
void Flash_Reset(void);
uint Flash_ChekeId(void);
uchar Flash_EraseBlock(unsigned long Block);
uchar Flash_write(uchar *str,unsigned long Block,uchar Page);
void Flash_read(unsigned long Block,uchar Page,uchar *pReadTo);

#endif


分享到:
评论

相关推荐

    STM32 K9F1G080E驱动程序GPIO模拟引脚

    stm32 用GPIO模拟引脚模拟编写的K9F1G080E驱动程序,程序已经测试过正常使用。

    LPC1768读写K9F1G08U驱动程序

    Nand Flash大容量数据存储器K9F1G08U的读/写驱动程序以K9F1G08U.h和K9F1G08U.c文件形式列出

    NandFlash驱动程序

    本资源为三星系列Nand Flash芯片K9F5608的驱动代码,用C语言开发,具有良好的编程风格,已经过实际调试验证,可用于实际工程开发。

    微雪单片机STM32F407资料.rar

    微雪单片机STM32F407资料,包括原理图,控制程序代码,keil5的库文件

    yaffs2Lib:VxWorks 上的 yaffs2 移植(已过时)

    该项目是 VxWorks 上库的移植,包括 Intel Xscale IXP425 上三星 K9K8G08U0A 和 K9F1G08U0A 的驱动程序。 编译 修改setenv-local.bat的路径 make 闪光驱动器 src/nandflash的 flash 驱动不是 VxWorks 专用的。 它是...

    三菱PLC例程PLC控制器源码资料1110个合集.zip

    9K抽屉框(XP08104).rar 9层9站电梯程序.rar A&G朔膜裹包机.rar A1S68AD.zip A2SH(S1) PLC 程序.rar A700toFX2N寫入頻率.rar ABB用滑台.rar ABB用滑台FX程序.rar AD,DA模拟量的读入和写出.rar ADD加法指令.rar Analog...

    语言程序设计课后习题答案

    由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。...

    MaxDOS_71PXE_G115.rar

    Mouse.bat 鼠标驱动程序,如果需要鼠标操作请先运行. Mouse /q 退出支持. Ndisgo.bat 用于旧版本的命令行模式全盘网刻,格式: Ndisgo Xx Ndisgx.bat 用于旧版本的命令行模式单分区网刻,格式: Ndisgx Xx Ngo.bat Ndis2...

    msods5.8 u盘上的dos

    9.MaxDOS安装后会在您的D/E/F/G盘创建一个MaxBAK隐藏文件夹,用于存放系统备份镜像. 10.GHOST手动操作备份/还原系统,使用教程 http://pzz.cn/bbs/read.php?tid=26423 11.GHOST备份后占用空间,找不到备份文件 ...

    单片机原理课程设计报告.docx

    图1-2数码管引脚 B C LT BI LE 1 2 3 4 5 6 7 8 f g a b c d e 16 15 4511 D A 14 13 12 11 10 9 B C LT BI LE 1 2 3 4 5 6 7 8 f g a b c d e 16 15 4511 D A 14 13 12 11 10 9 e d c h g f a b a b c e f g e d c ...

    嵌入式红绿灯控制系统

    3、 LED的驱动程序: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif #include &lt;linux/config.h&gt; #include &lt;linux/module.h&gt; #include &lt;linux/devfs_fs_kernel.h&gt; ...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...

    支持64位的ramdisk虚拟磁盘软件

    1. 驱动程序的配置信息存放在下面注册表中: HKLM\System\CurrentControlSet\Services\RRamdisk\Parameters\ 为什么要用RRamdisk这个名字,因为XP SP1开始内置了一个ramdisk程序, 主要用于XP Embed内存运行的。 ...

    MaxDOS 7 & Ghost8.2 For Win2k/XP/2K3

    Viagx.bat Via Rhine 1/2系列pack驱动系列旧版命令行模式分区网刻批处理. Tw.bat 天汇中文支持程序,tw /s加载dos的中文输入法,tw /q退出中文支持. Usbcd.bat 任何菜单任何位置下快速加载usb光驱驱动. Acopy....

    51单片机C语言编程基础及实例

    16 键码显示的程序 我们在 P1 端口接一支共阴数码管 SLED,在 P2、P3 端口接 16 个按键,分别编号为 KEY_0、KEY_1 到 KEY_F,操作时只能按一个键,按键后 SLED 显示对应键编号。 代码 1. 2. 3. 4. 5. 6. 7. 8. #...

    基于AT89S52 单片的频率计

    第1 页共27 页 1 概述 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测 量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称 闸门时间为1 秒。闸门时间也可以大于或小于一秒...

    滴水逆向培训高级班

    03 如何调试驱动程序.mp4; [8 U2 T) B' V 04 内核编程基础.mp4 05 内核空间与内核模块.mp4 06 0环与3环通信(常规方式).mp46 O: Z; `3 `( L 07 SSTD HOOK.mp46 D t( {, u1 D/ x) h! ]: g 08 Inline Hook.mp4 ...

    DOS 软盘+光盘+U盘+硬盘+NTFS 想拥有更强大的DOS功能??

    注1:标准功能是指已加载himem.sys和emm386.exe内存驱动、smartdrv磁盘加速、鼠标驱动、doskey。 注2:基本DOS系统是指仅仅加载IO.SYS、MSDOS.SYS和COMMAND.COM这3个DOS核心文件,不加载其他任何驱动和程序。 用↑...

    MaxDOS & Ghost8.2 7 For Vista/2008

    Mouse.bat 鼠标驱动程序,如果需要鼠标操作请先运行. Mouse /q 退出支持. Ndisgo.bat 用于旧版本的命令行模式全盘网刻,格式: Ndisgo Xx Ndisgx.bat 用于旧版本的命令行模式单分区网刻,格式: Ndisgx Xx Ngo.bat ...

Global site tag (gtag.js) - Google Analytics