Linux驱动开发-编写W25Q64(Flash)驱动

1. W25QXX介绍

W25Q64是一颗SPI接口的Flash存储芯片,是华邦W25QXX系列里的一个具体型号,这个系列里包含了W25Q16,W25Q32,W25Q64,W5Q128等等。编程代码逻辑都差不多,主要是容量的区别。

本篇文章就介绍如何在Linux系统下编写W25Q64芯片的驱动,完成数据存储,W25Q64支持标准SPI总线,当前驱动程序底层的代码写了两种方式,一种是采用内核提供的SPI子系统框架,一种直接采用软件模拟SPI时序的方式驱动,具体代码在第3章贴出来了。

下面是来至W25Qxx中文手册的介绍

W25Q64 (64M-bit), W25Q16(16M-bit)和 W25Q32(32M-bit)是为系统提供一个最小的空间、引脚和功耗的存储器解决方案的串行 Flash 存储器。 25Q 系列比普通的串行 Flash 存储器更灵活,性能更优越。基于双倍/四倍的 SPI,它们能够可以立即完成提供数据给 RAM, 包括存储声音、文本和数据。芯片支持的工作电压 2.7V 到 3.6V,正常工作时电流小于 5mA,掉电时低于 1uA。所有芯片提供标准的封装。

W25Q64/16/32 由每页 256 字节组成。 每页的 256 字节用一次页编程指令即可完成。 每次可以擦除 16 页(1 个扇区)、 128 页(32KB 块)、 256 页(64KB 块)和全片擦除。W25Q64 的内存空间结构: 一页 256 字节, 4K(4096 字节)为一个扇区, 16 个扇区为 1 块, 容量为 8M 字节,共有 128 个块,2048 个扇区。W25Q64/16/32 支持

内容概要:本文档详细介绍了正点原子出品的SPI驱动调试参考手册,涵盖了SPI(串行外设接口)的基础知识、子系统简介、组成部分、MTD子系统、设备驱动编写流程、内核SPI子系统和MTD设备驱动使能、设备树添加及MTD块设备的使用。文档不仅解释了SPI的工作原理、信号线、通信模式和优缺点,还深入探讨了嵌入式Linux中SPI和MTD子系统的实现,包括核心层、主机控制器驱动、设备驱动、设备树支持和用户空间接口。此外,文档还提供了详细的硬件配置和软件调试步骤,包括原理图分析、硬件实物展示、内核配置、设备树节点添加以及文件读写测试。 适合人群:具备一定嵌入式系统开发基础,尤其是对SPI和MTD子系统有一定了解的研发人员和技术爱好者。 使用场景及目标:①帮助开发者理解和掌握SPI和MTD子系统的原理及其实现;②指导开发者在嵌入式Linux环境下配置和调试SPI设备,特别是W25Q128 SPI FLASH模块;③提供详细的步骤和实例,确保开发者能够顺利完成硬件连接、内核配置、设备树添加和文件读写测试。 其他说明:文档由广州市星翼电子科技有限公司(正点原子)发布,提供丰富的在线资源和支持,包括官方网站、在线教学平台、论坛、B站视频和淘宝店铺。用户可以通过这些渠道获取更多信息和技术支持。文档还包含了免责声明,强调内容仅供参考,具体操作需谨慎。
### 如何从 W25Q64 Flash Memory 芯片读取设备 ID 为了从 W25Q64 Flash Memory 芯片读取设备 ID,可以遵循 SPI 通信协议并发送特定命令序列来请求设备识别信息。具体操作如下: 对于 W25Q64 型号的闪存芯片,制造商提供了标准指令集用于执行各种功能,其中包括读取唯一标识符的操作。通过向该存储器发出 `JEDEC` 编程代码(即 `0x9F`),能够触发返回制造商标识、内存类型以及容量规格的数据串。 在 Linux 系统环境下实现这一目标时,通常涉及配置平台数据结构以匹配具体的硬件特性,并利用内核驱动程序完成实际交互过程。例如,在定义静态平台数据对象时指定正确的设备型号字符串[^2]。 当准备就绪后,可以通过编程方式调用相应的 I/O 控制接口或者直接编写应用程序借助 `/dev/mtd*` 设备节点来进行低级访问。下面是一个简单的 Python 示例演示如何使用 spidev 库与 SPI 总线上的 W25Q64 进行通讯从而获取其 JEDEC ID: ```python import spidev spi = spidev.SpiDev() spi.open(0, 0) def read_jedec_id(): jedec_cmd = [0x9F] result = spi.xfer(jedec_cmd + [0]*3) manuf_id = result[1] mem_type = result[2] capacity = result[3] print(f"Manufacturer ID: {manuf_id:#04X}") print(f"Memory Type: {mem_type:#04X}") print(f"Capacity: {capacity:#04X}") read_jedec_id() spi.close() ``` 此脚本打开 SPI 接口并与连接至 MOSI 和 MISO 的 W25Q64 完成交互,最终输出解析后的三字节 JEDEC 标准格式的身份码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DS小龙哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值