树莓派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 物理脚 |
|---|---|---|---|
| CLK | SPI 时钟 SCLK | GPIO11 | 23 |
| DO | SPI 输入 MISO | GPIO9 | 21 |
| DI | SPI 输出 MOSI | GPIO10 | 19 |
| /CS | 片选 CE0 | GPIO8 | 24 |
| VCC / VCCQ | 电源 2.7V~3.6V | 3.3V(脚1/17) | — |
| GND | 地 | 0V | — |
下面是树莓派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 -iw25qxx: 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 -pw25qxx: 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=spiw25qxx: manufacturer is 0xEF device id is 0x17.厂商 ID
0xEF代表旺宏(Winbond);若读到的 ID 全为0xFF或0x00,请优先检查接线与 SPI 模式。
④ 写入并回读数据
./w25qxx -e write --type=W25Q128 --interface=spi --addr=0x000000 --data=0x08 ./w25qxx -e read --type=W25Q128 --interface=spi --addr=0x000000w25qxx: 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 章节):
- 实现平台接口:参考
interface/driver_w25qxx_interface_template.c模板,为 W25QXX 实现 7 个基础 SPI 回调(初始化、收发字节、延时、调试打印等) - 加入驱动核心:将
src/目录(含 driver_w25qxx.c 与 driver_w25qxx.h)加入工程 - 调用 API:参考
example/driver_w25qxx_basic.h的封装,先调用 init 初始化,再用get_id、write、read完成读写
树莓派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),仅供参考