Skip to main content
QSPI(四线串行外设接口)控制器是在 Qualcomm SoC 中实现的高速同步串行总线主控。它通过支持最多四条双向数据线(IO0–IO3)扩展了传统的 4 线 SPI 总线,在相同时钟频率下可实现标准 SPI 最高 4 倍的吞吐量。
QSPI 总线信号接口

图:QSPI 总线信号接口

总线信号说明

信号方向说明
CLK 输出由 QSPI 主控生成的串行时钟。
CS_N 输出片选(低电平有效)。置位以选择第一个外设。在分段传输过程中保持置位。
IO0 双向数据线 0。
IO1 双向数据线 1。
IO2 双向数据线 2。
IO3 双向数据线 3。

I/O 模式波形

QSPI I/O 模式波形:1 位QSPI I/O 模式波形:2 位QSPI I/O 模式波形:4 位

图:QSPI I/O 模式波形:1 位、2 位和 4 位

QSPI 控制器内部架构

QSPI 控制器内部框图

图:QSPI 控制器内部框图

QSPI 配置

Linux

本节提供有关 QSPI 软件驱动程序内核配置和设备树节点更改的信息。 支持 QSPI 接口需要以下驱动程序内核配置。

QSPI 接口组件

本节提供有关内核设备树节点以及相关文档的信息。 表:QSPI 接口:Linux
文件类型说明
设备树源文件
Pinctrl 设置

使用 SPI-NOR 进行 Linux QSPI 验证

这些验证确认 QSPI 控制器在 Linux 上可与符合 JEDEC 标准的 SPI-NOR 闪存设备正常配合工作。测试涵盖三个核心方面:验证硬件在启动时被正确检测和枚举、确认可从闪存可靠地读取数据,以及确保擦除后写操作能够成功完成。在启用新板或修改 QSPI 设备树配置后,请使用这些检查。 以下设备树片段启用 QSPI 控制器并将其绑定到 SPI-NOR 闪存设备:
1. 初始化与检测 这些测试确认 QSPI 控制器和 NOR 闪存在启动时被 Linux 正确识别,并且在尝试任何读写之前,所有闪存分区都可作为 MTD 设备使用。
测试说明示例命令预期结果
检查 QSPI 控制器在启动时成功启动,内核日志中无错误dmesg | grep -i spiQSPI 控制器初始化无错误
通过从 sysfs 接口读取其 JEDEC ID 来确认 NOR 闪存芯片被识别cat /sys/class/mtd/mtd0/device/spi-nor/jedec_id检测到 NOR 闪存且 JEDEC ID 正确
确认内核报告的闪存总大小和擦除块布局与设备规格一致cat /proc/mtd闪存大小和擦除大小与规格一致
确认所有闪存分区都可通过 /dev 下的 MTD 字符设备访问ls -l /dev/mtd*所有 MTD 设备和分区可见
2. 读操作 这些测试验证可以准确地从闪存读取数据,包括从闪存地址空间末尾读取以及在压力条件下重复读取等边界情况。
测试说明示例命令预期结果
从闪存起始位置读取一个 256 字节的块,并确认数据检索无错误dd if=/dev/mtd0 of=/tmp/read.bin bs=256 count=1数据读取成功
从闪存的最后 256 字节读取,以确认不会发生越界访问或缓冲区溢出dd if=/dev/mtd0 of=/tmp/boundary.bin bs=1 count=256 skip=$((SIZE-256))无边界溢出
执行 100 次连续的 4K 块读取循环,以确认在重复访问下运行稳定且无错误for i in {1..100}; do echo "iter $i"; dd if=/dev/mtd0 of=/dev/null bs=4K count=10; done重复读取稳定
3. 写操作 这些测试确认擦除后可以正确地将数据写入闪存,包括多页写入和覆盖写入场景,这些是固件更新工作流中最常见的操作。
测试说明示例命令预期结果
擦除一个闪存扇区并写入测试模式,以确认基本的单扇区写入功能flash_erase /dev/mtd0 0 1 && echo TEST > /tmp/t.bin && dd if=/tmp/t.bin of=/dev/mtd0写入成功
写入跨多个页的 16 KB 随机数据,以确认驱动程序正确处理页边界跨越dd if=/dev/urandom of=/tmp/m.bin bs=4K count=4 && flashcp /tmp/m.bin /dev/mtd0多页写入成功
擦除先前写入的扇区并重写,以确认闪存在擦除后正确接受新数据flash_erase /dev/mtd0 0 1 && flashcp /tmp/t.bin /dev/mtd0新数据写入正确