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

/*
*******************************************************************************************************************
*** 工程名称: 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驱动程序相关推荐

  1. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

  2. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  3. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  4. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  5. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  6. 现代传感器的接口:中断驱动的ADC驱动程序

    现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...

  7. 与现代传感器的接口:轮询ADC驱动程序

    与现代传感器的接口:轮询ADC驱动程序 Interfacing with modern sensors: Polled ADC drivers 我们研究了在现代嵌入式应用程序中,开发人员应该如何创建一 ...

  8. java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序

    我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...

  9. Linux驱动程序编写

    工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...

最新文章

  1. 如何在代码里配置-D 参数?
  2. Science公布2021年度十大科学突破,AI这项前所未有的突破上榜
  3. 线性方程 最小二乘解 SVD分解
  4. Python编程基础:第五十九节 守护线程Daemon Threading
  5. unity的vr场景怎么做_如何用Unity快速创建一个VR体验
  6. 删除表记录(delete from ....where)
  7. 使用YouTube API V3视频的完整描述- Google YouTube API V3 - Get Video Durations
  8. 12面魔方公式图解法_一位建筑工程师:多年渴望就是学会魔方还原,只按这七步就可以!...
  9. WordPress免费主题CorePress v4.9
  10. Latex排列图片:自由定义N行M列的排列方式
  11. 【分享】费曼技巧---以教促学
  12. python 点云配准_点云的全局配准
  13. 专业英语(电子、通信)单词集
  14. KETTLE使用通配符匹配多个文件输入到一张表中
  15. 3dsmax2018可编辑多边形常用操作及部分快捷键
  16. php7 yar扩展,宝塔面板安装yar扩展
  17. linux安装iso软件命令,linux命令制作iso镜像
  18. 车载以太网解决方案 助力智能网联汽车开发
  19. 【谈谈知识点】AC自动机
  20. 制作唐诗网页代码_唐诗宋词网页制作素材

热门文章

  1. 巅峰Q神个人版 V7.8(最新)
  2. 证照之星XE7下载安装详细教程
  3. 20230128英语学习
  4. Git学习笔记(黑马)
  5. RabbitMQ集群部署
  6. 超高频RFID电子标签常见应用领域有哪些
  7. 数据库-SQL Server
  8. 计算机的配置的作用,电脑的配置
  9. 小度i耳目app服务器不响应,有没有大神做过类似小度i耳目或小蚁智能摄像头的产品~...
  10. mysql存储过程Case not found for CASE statement处理