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)
{
uchar state=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;
uchar state=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_K9F1208 64
#define TYPE_K9F1G08 256
#define FLASH_TYPE TYPE_K9F1G08
//FLASH控制接口位定义
#define FLASH_DATA P4
sbit FLASH_CE = P5^5; //芯片选择控制
sbit FLASH_RE = P5^6; //数据输出控制,有效时数据送到I/O总线上
sbit FLASH_WP = P3^3; //写保护
sbit FLASH_RB = P5^7; //器件状态:0为忙,1为闲
sbit FLASH_WE = P5^2; //写I/O口控制,命令地址数据在上升沿锁存
sbit FLASH_CLE = P5^4; //命令锁存使能
sbit FLASH_ALE = P5^3; //地址锁存
//FLASH参数标记
#if FLASH_TYPE == TYPE_K9F1G08
#define FLASH_BLOCK 1024
#define FLASH_PAGE 64
#define FLASH_BYTE (2112)
#define FLASH_ID 0xECF1
#elif FLASH_TYPE == TYPE_K9F1208
#define FLASH_BLOCK 4096
#define FLASH_PAGE 32
#define FLASH_BYTE (528)
#define FLASH_ID 0xEC76
#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
K9F1G08驱动程序相关推荐
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...
- 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序
嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- 嵌入式Linux设备驱动程序:编写内核设备驱动程序
嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...
- 现代传感器的接口:中断驱动的ADC驱动程序
现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...
- 与现代传感器的接口:轮询ADC驱动程序
与现代传感器的接口:轮询ADC驱动程序 Interfacing with modern sensors: Polled ADC drivers 我们研究了在现代嵌入式应用程序中,开发人员应该如何创建一 ...
- java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序
我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...
- Linux驱动程序编写
工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...
最新文章
- 如何在代码里配置-D 参数?
- Science公布2021年度十大科学突破,AI这项前所未有的突破上榜
- 线性方程 最小二乘解 SVD分解
- Python编程基础:第五十九节 守护线程Daemon Threading
- unity的vr场景怎么做_如何用Unity快速创建一个VR体验
- 删除表记录(delete from ....where)
- 使用YouTube API V3视频的完整描述- Google YouTube API V3 - Get Video Durations
- 12面魔方公式图解法_一位建筑工程师:多年渴望就是学会魔方还原,只按这七步就可以!...
- WordPress免费主题CorePress v4.9
- Latex排列图片:自由定义N行M列的排列方式
- 【分享】费曼技巧---以教促学
- python 点云配准_点云的全局配准
- 专业英语(电子、通信)单词集
- KETTLE使用通配符匹配多个文件输入到一张表中
- 3dsmax2018可编辑多边形常用操作及部分快捷键
- php7 yar扩展,宝塔面板安装yar扩展
- linux安装iso软件命令,linux命令制作iso镜像
- 车载以太网解决方案 助力智能网联汽车开发
- 【谈谈知识点】AC自动机
- 制作唐诗网页代码_唐诗宋词网页制作素材