1、文档简介
本文档主要介绍了
XR806 SDK的Flash
模块概述、驱动框架、Flash驱动接口、使用示例、新Flash型号 的支持等内容,方便
用户对SDK的Flash模块进行二次开发和快速扩展。
2、概述
2.1 背景说明
XR806的Flash模块主要采用SPI NOR Flash
芯片(后文简述为Flash芯片),由于它支持XIP(eXecute In Place),即代码可直接在此Flash上执行,无需复制到内存中,因此具有较高的性价比。Flash存储器件由块(Block)组成,每个块中包含了若干个扇区(Sector),每个扇区中包含了若干页(Page),对Flash进行擦除时,只能按照其可擦除最小单位(Sector/Block)来擦除。由于Flash芯片内的数据只能由1写为0,不能由0写为1,只有擦除时才能将数据变为1,因此当要写Flash的某一块区域时,需要确保这块区域已经被擦除。
目前,市面上的Flash芯片种类繁多,具有一定差异性。首先,不同厂家不同型号的Flash芯片在性能、命令、配置流程等方面都可能存在差异,而这种差异在通用的Flash驱动上无法很好地支持。其次,一般在
嵌入式SDK中Flash驱动只支持简单操作以及运行在正常的模式如fast read,针对不同的Flash需要修改驱动,因此无法做到真正兼容和真正的支持。
考虑到上述原因,XR806 SDK的Flash驱动采用通信驱动、芯片命令、Flash控制分离的框架(可参见"3.1驱动框架"章节),实现便于扩展,具备
高通用性,易于使用的Flash驱动,以方便使用者进行方案开发,减少开发者工作量。
2.2 规格特性
XR806 芯片中内置一个 Flash
控制器(FlashController,以下简称 Flashc),以方便
CPU对Flash进行操作,因此 XR806 芯片挂接的 Flash 既可以走 SPI 通信方式,也可以走 Flashc 通信方式(可参见图 3-2), XR806 的 Flashc 模块和 SPI 硬件模块的规格特性如下表所示。
XR806 Flashc硬件模块规格特性表 |
硬件规格 | 规格描述 |
支持通信模式 | SPI 1/2/4 线模式收发、SPI ModeO/1/2/3、Flash XIP |
支持Flash容量 | Flash容量最大2A32 Byte(XIP空间小于16M) |
时钟频率 | 频率可配,可支持最大120MHz |
XR806 SPI硬件模块规格特性表 |
硬件规格 | 规格描述 |
支持频率 | 最高96MHz |
数据缓冲 | 最大64字节,以word对齐 |
支持Flash容量 | Flash 容量最大 2A32 Byte |
2.3 文件位置
以 SDK 包为根目录,本驱动涉及到的主要文件位置如下。
Flash 驱动的文件位置:
源码文件 ./src/
driver/chip/hal_flash.c
头文件 ./
include/driver/chip/hal_flash.h
示例工程 ./project/example/flash/
3、技术说明
XR806 Flash 驱动模块位于 SDK 的 NOR Flash 部分,具体位置如下图所示。
Flash 芯片在物理上既可与 SPI 硬件接口连接,也可与 Flash controller 硬件连接,在 XR806 SDK 中,可选 择/配置 Flash 驱动的通信方式(参见“4.2 配置说明”章节),以供用户灵活使用,XR806 Flash 驱动模 块的接口框图如下所示。
3.1 驱动框架
XR806 SDK的 Flash 驱动采用通信驱动(FlashDrv)、芯片驱动(FlashChip)、Flash 控制(Flash)分离的 框架。 通信驱动(FlashDrv)作为抽象接口供其他两个模块使用。当前已实现基于 SPI的 SpiDriver 和基于 Flash Controller 的 FlashcDriver。 芯片驱动(FlashChip)作为芯片抽象命令接口供 Flash 控制模块使用,提供如写使能、擦除等接口。根 据芯片 data sheet 的内容实现对应接口。对于一些比较简单、命令与 default 一致的芯片,可通过第 3 章的简单配置实现扩展。
4、应用说明
4.1 应用简述 Flash 模块的使用流程如下:
1. 确认/检查所使用 XR806 芯片版本是否需要外部 Flash 芯片(XR806 不同的芯片版本型号对应的基本 规格可参考《XR806_
product_Brief》文档),确认/检查 Flash 连接至 XR806 芯片的引脚,可参见“7 常见用户方案”章节。
2. 确认/检查所使用的 Flash 芯片是否在支持列表(参见《XR806 SPI Nor Flash
support List》文档), 如无则进行 Flash Chip 对接流程,参见“6FlashChip 支持”章节。
3. 确认/检查 Flash 板级参数配置是否正确,参见“4.2 配置说明”章节。
4. 初始化 platform_init(),使用 Flash 接口,完成用户所需操作,参见“4.2 接口说明”章节。
更多详细内容请下载附件查看