Apollo3 SDK平台添加支持复旦微FM25Q128 SPI Flash的方法

润欣科技
关注

1、什么是MSPI

MSPI,即Multi-bit SPI的缩写,是Apollo3新引入的串行外设,可以支持单线SPI,Dual SPI,Quad SPI,以及八线Octal SPI(可以是单个Octal设备,也可以是两个Quad Pair组成的Octal 设备)等模式,最高速率24MHz,可以外接串行存储设备,如PSRAM,SPI Nor Flash等,支持XIP片上直接运行代码。MPSI支持全部的4种SPI CPOL/CPHA模式,即模式0-3。支持DMA。支持Command Queue。2个片选,以Quad-SPI为例,MSPI最多支持两路Quad-SPI,这两路共用一个MSPI CLK。两路QSPI分时操作。MSPI具体的管脚复用图如下图1。

图1 MSPI管脚复用图

2、MSPI连接SPI Flash,Quad SPI四线模式,如图2

图2 MSPI采用Quad SPI接口连接外部SPI Flash器件原理图

3、根据以上图2所示硬件原理图,我们需要对SDK中的BSP库进行相应的修改,将MSPI使用到的相关管脚一一进行分配和初始化,如这里用到的:

GP1    --- CE0 (片选)

GP26  --- DQ1(数据IO1, SPI DO)

GP4    --- DQ2 (数据IO2,SPI WP#)

GP22  --- DQ0 (数据IO0,SPI DI)

GP24  --- CLK (时钟信号)

GP23  --- DQ3 (数据IO3,SPI HOLD#)

打开SDK v2.0目录下的工程libam_bsp,找到文件am_bsp_pins.h,按照上面分配的管脚修改定义:

再在同一工程里面找到am_bsp_pins.c文件,逐一修改以上管脚对应的属性结构体,如下:

如果不需要修改其他外设接口的管脚定义,保存文件后退出编辑模式,SDK v2.0下的示例代码默认包含BSP和HAL库文件进行编译,所以,这里需要重新将libam_bsp工程进行重新编译,假设我们使用Keil MDK编译器,那么生成的库文件为libam_bsp.lib,可以直接包含到其他的Keil MDK示例工程下进行使用。IAR生成的库文件为libam_bsp.a。

4、了解复旦微 SPI Flash器件FM25Q128的基本特性

FM25Q128是复旦微电子生产的串行SPI接口Nor Flash存储器,支持单线SPI, 双线Dual SPI和四线Quad SPI(QPI)模式,我们采用的是Quad SPI,即器件的QPI模式(4-4-4)。

FM25Q128的容量为128Mbit(16MB),单个Sector扇区大小为4KB,支持32KB或者64KB大小的Block块,可编程页大小为256字节。Sector扇区,Block块大小和数量的宏定义详见如下代码:

我们采用的芯片封装和引脚定义如下图3所示,

图3 FM25Q125芯片引脚定义图

请特别注意管脚WP#和HOLD#/RESET#(DQ3)的描述

出厂时,QE位为0,芯片处于单线SPI模式,硬件上,芯片的Pin3为WP#信号,Pin7为HOLD#/RESET#信号,继续了解WP#和HOLD#硬件关键的特点。

SPI模式下,如果WP#管脚为低,则禁止改写Status状态寄存器的值;当HOLD#为低时,即使芯片CS片选脚被激活,芯片仍将进入暂停模式,SPI总线无法正常访问SPI Flash,包括读取Status状态寄存器的值,芯片相当于进入了复位状态。因为芯片出厂默认模式是单线SPI模式,因此,我们需要先通过Apollo3的MSPI接口的单线SPI模式(1-1-1)来初始化器件,让器件进入QPI模式(4-4-4)后,然后再使用Quad SPI进行访问SPI Flash,以实现利用最高的效率访问SPI Flash外设。SPI的不同接口类型在传输指令码、地址码、数据码时所使用的传输通道数量不同,如下图4所示:

图 4 SPI不同接口类型的区别

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存