树莓派4B上玩转W25QXX:Linux SPI驱动开发完整教程
2026/9/19 6:47:12 网站建设 项目流程

树莓派4B上玩转W25QXX:Linux SPI驱动开发完整教程

【免费下载链接】w25qxxW25QXX(W25Q10, W25Q20, W25Q40, W25Q80, W25Q16, W25Q32, W25Q64, W25Q128, W25Q256, W25Q512, W25Q01, W25Q02) full-featured driver library for general-purpose MCU and Linux.项目地址: https://gitcode.com/gh_mirrors/w2/w25qxx

W25QXX 是一款面向通用 MCU 与 Linux 的全功能 SPI 串行闪存驱动库,支持 W25Q10、W25Q20、W25Q40、W25Q80、W25Q16、W25Q32、W25Q64、W25Q128、W25Q256、W25Q512、W25Q01、W25Q02 全系列芯片,提供闪存读写、擦除、JEDEC ID 读取、块锁等完整功能,且代码符合 MISRA 规范。本教程带你快速在树莓派4B上完成接线、编译并验证 W25QXX 闪存驱动。🚀

为什么选择这套 W25QXX 驱动库

在开始之前,先了解这套驱动库的强大之处:

  • 芯片覆盖广:从 1Mb(W25Q10)到 512Mb(W25Q512),12 款旺宏/华邦 W25Q 系列闪存全覆盖
  • 平台无关设计:同一套驱动核心即可用于 Linux 和各类 MCU(项目内提供 STM32F407、STM32F767、树莓派4B 三个参考工程)
  • 功能完整:基础读写之外,还实现快速读、页编程、4K/32K/64K 擦除、状态寄存器、安全寄存器、SFDP 参数读取等高级功能
  • 质量可靠:MIT 协议开源,代码通过 MISRA 扫描(扫描报告见misra/w25qxx_polyspace_report.pdf

项目目录结构清晰,核心文件都在这些位置:

目录作用
src/W25QXX 驱动核心源码
interface/平台无关的 SPI/QSPI 接口模板
example/basic 与 advance 两套示例代码
test/驱动功能测试代码
doc/离线 API 文档
datasheet/全系列 W25QXX 芯片手册
project/raspberrypi4b/树莓派4B 完整参考工程

树莓派4B SPI接线:W25QXX引脚对照表

硬件连接是驱动开发的第一步。树莓派4B 使用 SPI0 总线连接 W25QXX 芯片,接线关系如下(BCM 编号):

W25QXX 引脚功能树莓派4B GPIO(BCM)40pin 物理脚
CLKSPI 时钟 SCLKGPIO1123
DOSPI 输入 MISOGPIO921
DISPI 输出 MOSIGPIO1019
/CS片选 CE0GPIO824
VCC / VCCQ电源 2.7V~3.6V3.3V(脚1/17)
GND0V

下面是树莓派4B 的 J8 GPIO 排针引脚图,SPI 相关的 MOSI(脚19)、MISO(脚21)、SCLK(脚23)、CE0(脚24)一目了然:

💡小提示:驱动默认以 SPI Mode 3、1MHz 频率打开/dev/spidev0.0设备节点,普通 SPI 单线读写的 W25QXX 芯片在该配置下即可稳定通信,无需改频。

三步安装:一键编译 W25QXX 驱动工程

准备工作只需 3 步,5 分钟即可跑通。⚡

第一步:安装依赖

sudo apt-get install libgpiod-dev pkg-config cmake -y

第二步:获取项目代码

git clone https://gitcode.com/gh_mirrors/w2/w25qxx cd w25qxx/project/raspberrypi4b

第三步:构建工程

工程同时提供 Makefile 与 CMake 两种构建方式:

# 方式一:Makefile make sudo make install # 可选:安装到系统 # 方式二:CMake mkdir build && cd build cmake .. make sudo make install # 可选:安装后支持 find_package(w25qxx REQUIRED)

编译成功后会得到w25qxx命令行工具,它把全部 50 项驱动功能都封装成了参数,调试闪存时再也不用手写测试代码。

快速验证:4条命令确认W25QXX驱动正常

编译完成后,用下面 4 条命令即可完成"信息→接线→读ID→读写"的完整验证闭环:

① 查看芯片与驱动信息

./w25qxx -i
w25qxx: chip is Winbond W25QXX. w25qxx: manufacturer is Winbond. w25qxx: interface is SPI QSPI. w25qxx: driver version is 1.0. w25qxx: min supply voltage is 2.7V. w25qxx: max supply voltage is 3.6V.

② 查看当前板子的引脚连接

./w25qxx -p
w25qxx: SPI interface SCK connected to GPIO11(BCM). w25qxx: SPI interface MISO connected to GPIO9(BCM). w25qxx: SPI interface MOSI connected to GPIO10(BCM). w25qxx: SPI interface CS connected to GPIO8(BCM).

③ 读取芯片 ID(关键验证点)

./w25qxx -e get-id --type=W25Q128 --interface=spi
w25qxx: manufacturer is 0xEF device id is 0x17.

厂商 ID0xEF代表旺宏(Winbond);若读到的 ID 全为0xFF0x00,请优先检查接线与 SPI 模式。

④ 写入并回读数据

./w25qxx -e write --type=W25Q128 --interface=spi --addr=0x000000 --data=0x08 ./w25qxx -e read --type=W25Q128 --interface=spi --addr=0x000000
w25qxx: addr 0 write data 8. w25qxx: addr 0 is 8.

✅ 写入 8、回读 8,数据闭环成功,说明你的 W25QXX 驱动开发环境已经完全就绪!

进阶玩法:50项功能命令速查表

驱动工具提供了 50 项命令,覆盖从基础读写到 SFDP 高级读取的全部功能。以下是最常用的几组:

自动化测试命令

命令作用
./w25qxx -t reg --type=W25Q128 --interface=spi运行寄存器测试,逐项校验状态/锁/复位等全部寄存器功能
./w25qxx -t read --type=W25Q128 --interface=spi运行整片读测试,含 4K/32K/64K 擦除与快速读校验

基础功能命令

功能命令示例
获取 ID./w25qxx -e get-id --type=W25Q128 --interface=spi
整片擦除./w25qxx -e chip-erase --type=W25Q128 --interface=spi
断电 / 唤醒./w25qxx -e power-down/-e wake-up

高级功能命令

功能命令示例
快速读取./w25qxx -e advance-fast-read --type=W25Q128 --interface=spi --addr=0x000000
页编程./w25qxx -e advance-page-program --type=W25Q128 --interface=spi --addr=0x000000 --data=0x06
4K/32K/64K 块擦除./w25qxx -e advance-erase-4k --type=W25Q128 --interface=spi --addr=0x000000
全局块锁/解锁./w25qxx -e advance-global-lock/-e advance-global-unlock
读取 JEDEC ID./w25qxx -e advance-get-jedec-id --type=W25Q128 --interface=spi
读取 SFDP 参数./w25qxx -e advance-spi-get-sfdp --type=W25Q128 --interface=spi

完整 50 项命令说明可在project/raspberrypi4b/README.md中查阅,输入./w25qxx -h也能随时打印帮助。

二次开发:读懂源码结构

想在自己的项目里集成 W25QXX 驱动?只需三步(参考 README 的 Install 章节):

  1. 实现平台接口:参考interface/driver_w25qxx_interface_template.c模板,为 W25QXX 实现 7 个基础 SPI 回调(初始化、收发字节、延时、调试打印等)
  2. 加入驱动核心:将src/目录(含 driver_w25qxx.c 与 driver_w25qxx.h)加入工程
  3. 调用 API:参考example/driver_w25qxx_basic.h的封装,先调用 init 初始化,再用get_idwriteread完成读写

树莓派4B 工程的接口实现位于project/raspberrypi4b/driver/src/raspberrypi4b_driver_w25qxx_interface.c,底层通过 Linux spidev 驱动完成 SPI 通信(project/raspberrypi4b/interface/src/spi.c),是学习 Linux SPI 驱动开发的绝佳范例。📚

常见问题速解

Q:读 ID 一直是 0xFF 怎么办?A:依次检查 ① CE0 是否正确接 GPIO8 ② SPI 模式是否为 Mode 3 ③ 晶振与供电是否稳定 ④ 芯片型号与--type参数是否一致。

Q:能跑更高频率吗?A:W25QXX 支持最高 133MHz,但树莓派 GPIO 走 SPI0 单线模式时建议先用 1MHz~50MHz 稳定后再逐步上调。

Q:想看芯片手册的引脚定义和时序?A:datasheet/目录内置了全系列 12 款 W25QXX 芯片手册,例如datasheet/w25q128_datasheet.pdf

Q:想要离线 API 文档?A:打开doc/html/index.html即可浏览完整的 Doxygen 接口文档。


🎯小结:本文带你在树莓派4B上完成了 W25QXX 串行闪存驱动从接线、编译到 50 项功能验证的完整流程。得益于平台无关的驱动设计与命令行测试工具,从"插上线"到"读回数据"只需几分钟。动手试试吧,让 W25QXX 闪存成为你嵌入式项目中的可靠存储伙伴!

【免费下载链接】w25qxxW25QXX(W25Q10, W25Q20, W25Q40, W25Q80, W25Q16, W25Q32, W25Q64, W25Q128, W25Q256, W25Q512, W25Q01, W25Q02) full-featured driver library for general-purpose MCU and Linux.项目地址: https://gitcode.com/gh_mirrors/w2/w25qxx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询