SPI-Flash-Control 模块 作为 AMBA slave,可以接收 CPU、Cache、DMA 三类 AHB master 的访问,实现对 SPI-Flash 的高速访问,简化了用户适配不同型号的 SPI-Flash 步骤,特点有:支持 4 线快速读操作,Dummy clock 个数可配置,读命令可配置,读写操作仅支持 WORD。
SFC 可以将片外的 SPI-Flash 初始化挂载至总线上, 将其映射至 MCU 内部, 如此一来, 读取数据 可以直接访问 MCU 内部 4G 地址空间( 0x70000000 ~ 0x7FFFFFFF)即可, 读取速度超乎你想象!
但需要特别强调 : 写入数据仍需要调用 SFC_Write() 来完成,且仅支持 4 字节 访问, 即 读 和 写 都必须
遵循 32 bit 地址对齐 & 数据量对齐.
对于如何导入 UI 素材至 SPI-Flash,按 Scatter File 分为 2 种方式:
1、No SFC :用户使用 TF-SD 卡、 U 盘、 个人 PC 等工具 ,借助 SDIO / USB / UART 等外设通讯接口,在芯
片通电工作后,通过运行用户自行编写的程序,完成 UI 素材数据的导入,对于本例程而言,UI 素材 以 FAT32 文件
系统 的文件格式,拷贝到 SpiFlash 中,此方式限制较少,有利于素材经常动态更新替换的场合;
2、 SFC : 在 Keil 下进行程序下载的同时下载导入 UI 素材至 SPI-Flash,需要提前将 UI 素材 通过 PC 端
工具转换为 C 数组的形式以嵌入 Keil 工程中,并对 C 数组添加 __attribute__((section(".SDRAM2"))) 关键
字,经过编译、链接后放置在 LR_SPIFLASH (section),此方式需要在 KEIL 环境下的”FLASH DOWNLOAD" 下载算法
中加载 外挂 SpiFlash 的 下载算法,并将 SystemInit / sfc_init / sdram_init 函数调用放在 Reset_Handler
的 __main 前,原因是 C 库__main()内完成 RW-Data(.data 段初始化)的加载。
|