UBoot中CFI Nor Flash驱动详解与使用示例

4星 · 超过85%的资源 需积分: 9 10 下载量 38 浏览量 更新于2024-07-22 收藏 1.02MB PDF 举报
"uboot下Nor Flash驱动及使用的详细介绍,包括驱动初始化、擦除和烧录操作,适用于遵循CFI规范的Nor Flash芯片。" 在嵌入式系统中,Nor Flash是一种常见的非易失性存储器,用于存储固件和引导加载程序。本文主要关注在uboot环境下对Nor Flash的驱动程序设计和使用。uboot是一个开源的引导加载程序,它负责初始化硬件,加载操作系统内核,并提供了一些基本的设备管理功能。 标题提及的"uboot下Nor flash的驱动"是指uboot中处理Nor Flash的软件模块,这部分代码通常位于`drivers/mtd/cfi_flash.c`中。Nor Flash驱动的核心任务是识别和初始化Nor Flash芯片,以及提供读写擦除等操作。在uboot中,Nor Flash的初始化过程始于`arch/mips/cpu/octeon/start.S`中的`board_init_r`函数,该函数会调用`flash_init()`来初始化所有Flash银行。 `flash_init()`函数遍历配置的最大Flash银行数(由`CONFIG_SYS_MAX_FLASH_BANKS`定义),并尝试检测和配置每个银行。对于遵循CFI(Common Flash Interface)规范的芯片,uboot会调用`flash_detect_legacy()`,如果芯片不是旧式的CFI芯片,该函数会返回0。接着,`flash_get_size()`被用来确定每个银行的大小,这很重要,因为后续的读写操作需要知道可用的存储空间。 `flash_get_size()`函数接收物理地址和银行编号,通过查询`flash_info`结构体来获取闪存的信息。这个结构体包含了关于每个Flash银行的重要信息,如ID、大小和特性。在识别和配置完所有的Flash银行后,uboot就能够正确地与Nor Flash进行交互了。 对于Nor Flash的使用,有几点需要注意: 1. **读操作**:Nor Flash允许直接按地址读取数据,类似于RAM。 2. **写操作**:在写入之前,必须先进行擦除操作。擦除操作通常是按扇区进行的,且一旦开始,必须擦除整个扇区,不能部分擦除。 3. **擦除操作**:新型Nor Flash芯片支持3V电压下的全扇区擦除和写入,比老式芯片更高效。 uboot提供的示例代码展示了如何进行基本的擦除和烧录操作,这些操作同样适用于Linux系统,只是Linux中还需要处理分区信息。通过阅读芯片的手册和uboot的源码,开发者可以深入了解Nor Flash的使用逻辑。 uboot的Nor Flash驱动设计简洁且通用,特别是对于符合CFI规范的芯片,其驱动的可移植性和兼容性较强。了解这些基础知识对于开发和维护嵌入式系统的固件至关重要。