uyrfdcv 发表于 2010-12-18 13:16:48

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

本帖最后由 uyrfdcv 于 2010-12-18 13:23 编辑

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

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


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

天嵌_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

可惜没法下载,遗憾。。。
页: [1]
查看完整版本: 无操作系统下nand flash驱动开发,附S3C2440开发板下测试源代码