Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150526
  • 博文数量: 22
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-25 00:08
个人简介

ddd

文章存档

2011年(1)

2010年(21)

我的朋友

分类: 嵌入式

2010-05-29 19:01:41

(1)如果在启动时,U-boot打印出:“Warning - bad CRC, using default environment”,说明U-boot没有在存放 ENV的固态存储器中找到有效的 ENV,只好使用编译时定义的默认ENV。如果 U-boot存放 ENV的固态存储器的驱动是没问题的,那只要运行 saveenv就可以把当前系统的所有ENV写入固态存储器,下次启动就不会有这个警告了。ENV可以放在多种固体存储器中,对于 mini2440来说 Nor FlashNand FlashEEPROM都可以,这依赖 include/configs下的配置文件是如何定义的。例如:

Nor Flash

#define CONFIG_ENV_IS_IN_FLASH     1

#define CONFIG_ENV_OFFSET          0X40000

#define CONFIG_ENV_SIZE             0x20000  /* Total Size of Environment Sector */

Nand Flash

#define CONFIG_ENV_IS_IN_NAND      1

#define CONFIG_ENV_OFFSET          0X40000

#define CONFIG_ENV_SIZE             0x20000  /* Total Size of Environment Sector */

EEPROM

#define CONFIG_ENV_IS_IN_EEPROM   1    /* use EEPROM for environment vars */

#define CONFIG_ENV_OFFSET          0x000    /* environment starts at offset 0 */

#define CONFIG_ENV_SIZE             0x400    /* 1KB  */

 

CONFIG_ENV_OFFSET  :是在整个存储器中的偏移地址;

CONFIG_ENV_SIZE   :是指用来保存 ENV的分区大小。

注意 CONFIG_ENV_OFFSET CONFIG_ENV_SIZE 的设置,请不要覆盖了其他分区

 

 

 

 

 

(2) Uboot.bin文件是可执行的二进制代码文件。我们重点是讲描.bin文件的组成。我们把可执行文件分为两种情况:分别为存放态和运行态。

1. 存放态  

存放态是指可执行文件通过fromelf产生后,在存储介质(flash或磁盘)上的分布. 此时可执行文件一

般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)和只读数据段(.rodata),

数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。可执行文件的存放态如下:

   +----------------+-----------

   |   .bss      |

   +---------------+-- 数据段

   |   .data     |

   +---------------+-----------

   |   .rodata  |

   |__________| 代码段

   |   .text   |

   +-------------+-----------

2. 运行态

    可执行文件通过装载过程, 搬入到RAM中运行, 这时候可执行文件就变成运行态。在对可执行代码各段有另一个名称:

   |    ...      |

   +-------------+-----------

   |   .bss      | ZI

   +-------------+-- 数据段

   |   .data     | RW

   +-------------+-----------

   |   .rodata   |

   |_____________| 代码段(RO )

   |   .text     |

   +-------------+-----------

   |    ...      |

         装载前

当可执行文件装载后, RAM中的分布如下:

   |    ...      |

   +-------------+-- ZI段结束地址

   |    ZI      |

   +-------------+-- ZI段起始地址

   |    保留区2   |

   +-------------+-- RW段结束地址

   |    RW      |

   +-------------+-- RW段起始地址

   |   保留区1    |

   +-------------+-- RO段结束地址

   |    RO      |

   +-------------+-- RO段起始地址

   |    ...      |

         装载后

    所以装载过程必须完成把执行文件的各个段从存储介质上搬到RAM指定的位置。而这个装载过程由谁来完成呢?由我们的启动程序来完成.

 

 

(3)nandflash芯片内部存储布局及存储操作特点

    一片Nand flash为一个设备(device), 其数据存储分层为:

1设备(Device) = 4096 (Blocks)

1(Block) = 32/(Pages/rows)   ;页与行是相同的意思,叫法不一样

1(Page) = 528字节(Bytes) = 数据块大小(512Bytes) + OOB块大小(16Bytes)

    在每一页中,最后16个字节(又称OOB)用于Nand Flash命令执行完后设置状态用,剩余512个字节又分为前半部分和后半部分。可以通过Nand Flash命令00h/01h/50h分别对前半部、后半部、OOB进行定位通过Nand Flash内置的指针指向各自的首地址。

存储操作特点:

1. 擦除操作的最小单位是块。

2. Nand Flash芯片每一位(bit)只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即是将相应块得位全部变为1).

3. OOB部分的第六字节(517字节)标志是否是坏块,如果不是坏块该值为FF,否则为坏块。

4. OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC

 

寻址方式

   Samsung K9F1208U0B Nand Flash 片内寻址采用26位地址形式。从第0位开始分四次通过I/O0I/O7进行

传送,并进行片内寻址。具体含义如下:

   07位:字节在上半部、下半部及OOB内的偏移地址

   8位:值为0代表对一页内前256个字节进行寻址

         值为1代表对一页内后256个字节进行寻址

   913位:对页进行寻址

   1425位:对块进行寻址

   当传送地址时,从位0开始

阅读(1851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~