天嵌 ARM开发社区

 找回密码
 注册
查看: 3720|回复: 8

无操作系统下nand flash驱动开发,附S3C2440开发板下测试源代码

[复制链接]
uyrfdcv 发表于 2010-12-18 13:16:48 | 显示全部楼层 |阅读模式
本帖最后由 uyrfdcv 于 2010-12-18 13:23 编辑

无操作系统下nand flash驱动开发,附S3C2440开发板下测试源代码(针对K9F2G08芯片,ADS1.2开发)
写nand flash芯片之前一般需要先擦除相应的块,并且nand flash通常以页为单位进行读写,还要考虑坏块,因此访问nand flash和访问内存差别很大。下面这组函数可以实现对nand flash的大部分操作:
  1. extern ML_ERR Flash_Init_Device(FLASH_DEVICE * device);
  2. extern ML_ERR Flash_Creat_Redirect_Table(FLASH_DEVICE * device, ML_U32 method);
  3. extern void Flash_Redirect(FLASH_DEVICE * device, ML_U32 block_base);
  4. extern ML_ERR Flash_Erase_Chip(FLASH_DEVICE * device, ML_U32 option);
  5. extern ML_ERR Flash_Read(FLASH_DEVICE * device, void * buffer, ML_U32 start_address, ML_U32 number);
  6. extern ML_ERR Flash_Write(FLASH_DEVICE * device, const void * buffer, ML_U32 start_address, ML_U32 number);
复制代码
以上函数实现了nand flash设备初始化, 坏块管理,擦除、读写等功能。
下面是测试主程序:
  1. #include "ML_Flash.h"

  2. void Main(void)
  3. {
  4.         FLASH_DEVICE * device = &Flash_K9F2G08;
  5.        
  6.         //# 初始化开发板
  7.         Board_Init();
  8.        
  9.         while(1)
  10.         {
  11.                 char info[] = "MultiSilicon Link.Flash v1_1_3";
  12.                 char string[] = "0123456789";
  13.                 char buffer[512] = "";
  14.                
  15.                 //# 初始化设备
  16.                 Flash_Init_Device(device);       
  17.                 //# 创建重定向表,如果Flash存在坏块,这一步是必要的
  18.                 Flash_Creat_Redirect_Table(device, 1);
  19.                 //# 在0x100000地址处写入字符串info
  20.                 Flash_Write(device, info, 0x100000, sizeof(info));
  21.                 //# 在0x234567地址处写入字符串string
  22.                 Flash_Write(device, string, 0x234567, sizeof(string));
  23.                 //# 在0x100000地址处读入sizeof(info)个字节并存入buffer
  24.                 Flash_Read(device, buffer, 0x100000, sizeof(info));
  25.                 Uart_Printf("\n%s", buffer);
  26.                 //# 在0x234567 + 3地址处读入sizeof(string)个字节并存入buffer
  27.                 Flash_Read(device, buffer, 0x234567 + 3, sizeof(string));
  28.                 Uart_Printf("\n%s", buffer);
  29.                 while(1);
  30.         }
  31. }
复制代码
运行程序,在超级终端上可以看到以下输出结果:
  1. MultiSilicon Link.Flash v1_1_3
  2. 3456789
复制代码
读者对照测试程序不难看出输出结果是正确的。
下载测试源代码(针对TQ2440开发板(256M nand flash),K9F2G08芯片,使用ADS1.2进行编译):


原文链接,转载请注明出处:
http://www.cnblogs.com/multisili ... /12/17/1909549.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
天嵌_support1 发表于 2010-12-18 14:07:54 | 显示全部楼层
1# uyrfdcv


多谢分享。
fanfan 发表于 2010-12-19 16:11:17 | 显示全部楼层
Flash_Creat_Redirect_Table 这几个函数的实体怎么看不见
 楼主| uyrfdcv 发表于 2010-12-20 18:03:33 | 显示全部楼层
3# fanfan


恩 我们是借助于一个库写的 就像C语言里面printf()函数一样 只需要知道怎么调用 而不需要知道具体该怎么实现 封装成库有两个好处 一个是代码易于移植 另一个是代码编译后可执行文件大小很小 后期我们会推出详细的函数使用手册
para 发表于 2010-12-22 20:02:23 | 显示全部楼层
很好  谢谢分享
liuyongbo 发表于 2011-1-5 16:48:50 | 显示全部楼层
很好,一定要看!
pzxsoso 发表于 2011-3-24 21:20:20 | 显示全部楼层
谢谢!正需要一同学习!
zhangxiangchun 发表于 2011-3-27 13:54:33 | 显示全部楼层
看看对我以后有用处!
塞外野叟 发表于 2011-11-1 14:05:02 | 显示全部楼层
可惜没法下载,遗憾。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-24 02:00 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表