作者:Albert Wei,文章来源:FPGA FAE技术分享选集
QSPI(Quad Serial Peripheral Interface)是一种基于 SPI(串行外设接口)的高速数据通信协议.它的全称是Quad SPI,即四路串行外设接口。QSPI通常用于与外部存储设备(如NOR Flash或NAND Flash)进行高速数据传输,并具备以下几个特点:
1.高速启动
QSPI通过四条数据线并行传输数据,数据吞吐量比传统SPI高4倍,适合快速加载大块数据(如固件\操作系统镜像)。例如,ZYNQ\MPSOC\VERSAL等SoC(系统级芯片)可通过QSPI Flash在系统上电时直接加载FSBL\PLM(第一阶段引导程序),显著缩短启动时间。
2.可靠性高
QSPI Flash属于非易失性存储器,断电后数据不会丢失,适合存储系统参数、校准数据等需要长期保留的信息。其写入寿命(通常10万次擦写)优于传统NAND Flash,适合高频写入场景。
3.接口灵活
QSPI仅需4个引脚(时钟线\片选线\四条数据线),引脚占用少,适合空间受限的嵌入式设备。
4.动态重构能力
在ZYNQ\MPSOC\VERSAL等可编程逻辑设备中,QSPI支持运行时加载不同配置文件(如PL比特流),实现动态重构逻辑功能,适用于需要灵活配置的工业控制系统。
5.兼容性强
QSPI协议与SPI兼容,可无缝迁移至支持传统SPI的设备。
硬件环境
本文基本AMD Versal系统的评估套件VCK190进行开发部署,VCK190 是首款 Versal™ AI Core系列评估套件,可帮助设计者使用AI和DSP引擎开发解决方案,与当前服务器级CPU相比,这些引擎能够提供超过100倍的计算性能。凭借各种连接选项和标准化的开发流程,Versal AI Core系列VC1902自适应SoC为云、网络和边缘应用提供出色的AI推理和信号处理吞吐量。
由于VCK190主板并没有QSPI器件,所以需要额外连接套件中的X-EBM-01小板进行QSPI启动引导。其中X-EBM-01小板中使用了两片1Gb MT25QU01GBBB8E12-0SIT的QSPI芯片。
QSPI Flash分区
1. boot分区存放BOOT.BIN,大小根据BOOT.BIN大小进行分配;
2. bootenv分区存放启动环境变量,一般256K左右足够使用;
3. kernel分区image.ub内核、文件系统文件,大小根据image.ub大小进行分配;
4. bootscr分区放启动脚本,一般64K左右足够使用。
Linux QSPI驱动
从petalinux2023.2开始,QSPI的驱动使用parallel-memories和stacked-memories属性来代替原来的is-dual和num-cs来控制QSPI Flash的数量及模式,具体的system-user.dtsi的配置参考如下:
Petalinux配置
1.使用petalinux-config进行配置,在petalinux-config->Subsystem Hardware Settings->Flash Settings位置进行分区配置,具体大小和偏移可以参考上图;
2.petalinux-config->Image Packaging Configuration->Root filesystem type进行文件系统类型选择,这里使用INITRD类型;
3.在petalinux-config->u-boot Configuration → u-boot script configuration 中的QSPI\OSPI和JTAG配置启动脚本中的偏移位置,这个需要和分区对应起来;
4.在u-boot的配置中配置BootSrc的起始位置,命令是petalinux-config -c u-boot;
编译打包
$petalinux-build
$petalinux-package boot --plm --psmfw --u-boot --dtb --kernel –force
烧录
使用vitis,在菜单中选择[Vitis]→[Program Flash],将boot.pdi替换成petalinux工程目录下的image/linux/BOOT.BIN
启动
根据UG1366将VCK190配置成QSPI32启动方式进行启动,具体如下:
基于上述步骤可以完成Versal的QSPI Flash引导启动Petalinux。
如果您了解更多关于AMD器件在QSPI Flash引导Petalinux的应用,欢迎联系: