u-boot-2014.10移植第20天----添加nand flash命令支持(二)

继前一天移植的情况,运行后发现:

Flash: 2 MiB
NAND:  0 MiB

说明Nand flash没有移植成功,在文件drivers/mtd/nand/s3c2440_nand.c 中发现board_nand_init函数中:

nand->select_chip = NULL

选择芯片函数为NULL,我们在board_nand_init函数上面加上s3c2440_nand_select函数,代码如下:

static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
{
    struct s3c2440_nand *nand = s3c2440_get_base_nand();

    switch(chipnr){
        case -1: /* 取消选中 */
            nand->nfcont |= (1<<1);
            break;
        case 0: /* 选中 */
            nand->nfcont &= ~(1 << 1);
            break;
        default:
            BUG();
    }

    return;
}

再将board_nand_init函数中的select_chip改为:

nand->select_chip = s3c2440_nand_select;

重新编译运行:

Flash: 2 MiB
NAND:  64 MiB

tq2440的nand flash的大小是为64M,说明nandflash被成功探测到了。
下面进行读写测试:

测试之前先将nand flash擦除一遍:

[TQ2440 #] nand erase 0 4000000

从服务器上下载test文件,放在0x31000000地址处。

[TQ2440 #] tftp 31000000 test

查看0x31000000地址处的内容:

[TQ2440 #] md 31000000
31000000: 34333231 38373635 0a0a3039 00000000    1234567890......
31000010: 00000000 00000000 00000000 00000000    ................

将0x31000000地址处的内容写到nand flash的0地址处:

[TQ2440 #] nand write 31000000 0 ff 

NAND write: device 0 offset 0x0, size 0xff
 255 bytes written: OK
[TQ2440 #] 

说明些是成功的。

再将其读到0x31000000地址处下面读操作:

[TQ2440 #] nand read 31000000 0 ff

NAND read: device 0 offset 0x0, size 0xff
 255 bytes read: OK

说明读也是OK的,比较前后读写的内容是否一样:

[TQ2440 #] md 31000000
31000000: 34333231 38373635 0a0a3039 00000000    1234567890......

说明Nand flash移植OK。
下图为tq2440开发板上的nand flash,页、块和设备之间的关系,以及oob区:

从图中可以看出一页的大小为512bytes,oob的大小为16字节,可以使用nand dump命令查看。

首先擦除一个块,因为nand flash只能0不能写1,所以擦除的操作就是讲页和oob区中的字节都置为1,如下

[TQ2440 #] nand erase 0 ff

[TQ2440 #] nand dump 0    
Page 00000000 dump:
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
OOB:
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
绿色部分为一页大小,512bytes,红色部分为oob区,16bytes。擦除后的第一个页和oob区的字节都为ff。

在SDRAM中0x3100 0000起始位置后的10个字节为0~9的ASCII值,我们将其写入Nand flash的第一个页中去。

[TQ2440 #] md 31000000
31000000: 34333231 38373635 0a0a3039 00000000    1234567890......
31000010: 00000000 00000000 00000000 00000000    ................

写入16个字节:

[TQ2440 #] nand write 31000000 0 10

[TQ2440 #] nand dump 0             
Page 00000000 dump:
        31 32 33 34 35 36 37 38  39 30 0a 0a 00 00 00 00
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
OOB:
        aa a5 ab ff ff ff ff ff
        ff ff ff ff ff ff ff ff

可以看到第一个页中已经保存了0~9的ASCII值,多写了0a0a不用管。

明天继续。

时间: 2024-10-08 10:34:49

u-boot-2014.10移植第20天----添加nand flash命令支持(二)的相关文章

u-boot-2014.10移植第21天----添加nand flash命令支持(三)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 虽说nand flash读写操作是可以了,但是我使用nand markbad命令将一个块标记为坏块时,再用nand scrub命令恢复出厂设置时,却出现了下面的错误: nand0: MTD Erase failure: -5 说明我们的nand flash移植是不完全正确的. 下面查找原因 在文件drivers/mtd/n

u-boot-2014.10移植第19天----添加nand flash命令支持(一)

今天继续移植nand flash,对于很多情况而言,u-boot从nand flash启动是一个至关重要的功能,毕竟NOR flash成本太高,不是所有开发板都会添加NOR flash. u-boot中的SMDK2410模板是没有支持从nand flash启动的功能的,但是却有支持操作nand_flash的操作命令,2410和2440在nand flash支持上的区别有: 1.2410仅支持小块nandflash,2440则同时支持大块nandflash:2.为支持大块nandflash,244

u-boot-2014.10移植第22天----添加nand flash命令支持(四)

解决问题: nand0: MTD Erase failure: -5 drivers/mtd/nand/nand_bbt.c文件中初始化bbt /* * Allocate memory (2bit per block) and clear the memory bad block * table. */ this->bbt = kzalloc(len, GFP_KERNEL); if (!this->bbt) return -ENOMEM; 每个block用2个比特表示是否为坏块. nand_

u-boot-2014.10移植第24天----nand flash启动(二)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus nand flash启动 比较新的u-boot版本包括u-boot-2014版本的都是用重定向的机制,而且用到了代码位置无关的技术,在u-boot连接时使用了-pie选项: -pie : Produce a position independent executable on targets which support i

u-boot-2014.10移植第17天----添加DM9000网卡支持(一)

很多读者的2440的板子应该都有DM9000网卡.在移植之前看看这几篇文档: DM9000中文手册(详细) 这篇文章告诉我们DM9000的一些硬件知识. DM9000和MINI2440深入理解 这篇文章告诉我们2440是如何实现对DM9000的访问. 2440 dm9000 到底咋确定地址 这篇文章告诉我们如何确定地址端口的地址和数据端口的地址. DM9000 datasheet datasheet上说dm9000有4K Dword(就是4K双字,即16Kbytes). DM9000网卡驱动位于

个人回忆录 2014.10.20 至 2015.7.30

时间过的太快.以至于对我来说都记不起来每天做了些什么事情.工作节奏太快,下班.上班 然后再下班再上班. 每天下班后都晚上9点左右.真的看不见日出看不见日落. 从2014.10.20 到现在已经快10个月了.新的工作环境以及新的同事.上司都已熟悉了.回想刚刚开始进入这个研发团队的时候. 高原反应非常强烈,总是在疑问自己为何选择这个方向—C++ 客户端开发.为何不沿用最熟悉的.NET 平台开发.当从新学习一门新技术的时候 才发现自己太笨.有点像当年的高考,时间很紧.因为没有太多的时间用在学习上.MF

u-boot-2014.10移植第29天----nand flash的SPL启动(一)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 前面在移植nand flash启动时做了很多探索性的工作,但是后来发现在relocate.S文件中调用的函数中有调用大部分的库函数,牵扯到的文件较多,很难将它们一一包含到前面4K空间中去.正在想其他方法时,突然意识到SPL功能.我初步了解了一下SPL的功能,简而言之是一个将u-boot从nand flash拷贝到SDRAM

u-boot-2014.10移植第14天----在SDRAM中运行

昨天遇到编译错误,我们从错误提示中寻找解决方法: 信息1:CHK     include/config.h /* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/samsung/tq2440 #include <config_defaults.h> #include <configs/tq2440.h> #include <asm/config.h> #include <

u-boot-2014.10移植第3天----LED裸机程序

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在移植u-boot之前我们先熟悉一下硬件,以及如何控制硬件: 情况一: 这个情况是你的开发板中有了可以运行的u-boot.因为裸机程序能运行的前提条件是系统初始化了. 下面led.S是一位高人写的代码,完全是用ARM汇编编写的,短小精悍,主要是实现跑马灯的功能: /*****************************