U-boot驱动之QSPI驱动移植 全球观察

1、概述

本文主要讲述了U-boot的QSPI驱动移植方法及验证方法。在产品调试阶段,U-boot的driver子系统包含了丰富的外设驱动,方便外设功能验证与调试。


(资料图片)

示例U-boot版本:2022.10。硬件平台:ARM SOC。

2、原理

U-boot的SPI驱动子系统集成了主流厂家的SPI和QSPI控制器驱动,驱动源码位于目录u-boot-2022.10/drivers/spi。

本文以移植Cadence QSPI控制器驱动为例,其对应的驱动程序位于./drivers/spi目录下,无需手动添加,只需使能相应的编译配置开关即可;同时需要添加Cadence QSPI控制器及其Flash的设备树,对必要的参数进行配置。

U-boot的命令子系统包含了众多测试命令子集,其中sf命令集用来对SPI接口的Flash存储器进行功能测试,完成检测、擦除、读、写等常用操作。

3、移植方法

(1)编译配置

使能CONFIG_CADENCE_QSPI,以添加Cadence QSPI驱动;同时设置QPSI参考时钟频率值,以100MHz为例。这样./drivers/spi目录下的cadence_qspi.c和cadence_qspi_apb.c就被使能编译了。

图1. Cadence QSPI驱动配置

(2)设备树添加QSPI控制器和Flash节点

在设备树添加Cadence QSPI控制器节点及其Flash节点。添加方法可参考如下文件:

./doc/device-tree-bindings/spi/spi-cadence.txt

4、验证方法

(1)编译sf测试工具

为编译sf测试工具,应配置U-boot,使能CONFIG_CMD_SF。

图2. sf测试工具配置

(2)使用sf命令测试

测试方法及结果如下:

Flash检测

cmd>sf probe

SF: Detected gd25q127c with page size 256 Bytes, erase size 4 KiB, total 16 MiB

Flash擦除

cmd>sf erase 0 8000

SF: 32768 bytes @ 0x0 Erased: OK

Flash写入

cmd>sf write 50000000 0 8000

device 0 offset 0x0, size 0x8000

SF: 32768 bytes @ 0x0 Written: OK

Flash读取

cmd>sf read 60000000 0 8000

device 0 offset 0x0, size 0x8000

spi_flash_std_read: offset:0x0,len:0x8000 ,_read func: 00000000bffc2b24

SF: 32768 bytes @ 0x0 Read: OK