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不同接口类型的区别
图片新闻
技术文库
最新活动更多
-
即日-12.26立即报名>>> 【在线会议】村田用于AR/VR设计开发解决方案
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
1月9日立即预约>>> 【直播】ADI电能计量方案:新一代直流表、EV充电器和S级电能表
-
即日-1.14火热报名中>> OFweek2025中国智造CIO在线峰会
-
即日-1.20限时下载>>> 爱德克(IDEC)设备及工业现场安全解决方案
-
即日-1.24立即参与>>> 【限时免费】安森美:Treo 平台带来出色的精密模拟
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论