0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用标准SPI的方式去读写W25Q128呢

冬至配饺子 来源:TopSemic嵌入式 作者:TopSemic 2022-08-16 10:21 次阅读

1.W25Q128介绍

当我们有比较多的数据需要掉电存储时,上一篇文章所介绍的 24C02 (256个字节EEPROM)就不够了。此时我们会用到另外一种类型的存储器,即 Flash。比如具有 SPI 接口的 W25Q128。这颗小芯片虽然也只有简单的 8 个引脚,但存储容量却达到了128M-bit,也就是 16M 字节,同时它的读写速度可以达到 66MB/S。但是由于 STM32F030 不支持 Quad/Dual SPI,只能以标准 SPI 方式读写,所以速度会低一些。以下是 W25Q128 的主要特点:

a.133MHz SPI Clock。

b.10万次擦写寿命,20年数据保持时间。

c.每颗具有64-Bit唯一序列号 Unique ID。

d.每次可以写入 1 到 256 字节数据。

e.写之前需要对目的地址所在扇区进行擦除操作。

pYYBAGL6_g2AcRcFAAAquLX2F9A809.png

( Winbond W25Q128 datasheet )

我们通过以下连线使 W25Q128 连至 STM32F030 的 SPI1:

W25Q128 STM32F030

Pin 1 /CS PA4 也可以用其它 GPIO 引脚

Pin 2 DO PA6 SPI1_MISO

Pin 3 /WP ( VCC )

Pin 4 GND ( GND )

Pin 5 DI PA7 SPI1_MOSI

Pin 6 CLK PA5 SPI1_SCK

Pin 7 /HOLD or /RESET ( VCC )

Pin 8 VCC ( VCC )

2.代码

代码的开发如果想提高效率,一个方法就是充分利用前人的成果,而不是自己一再的去造轮子。

GNU General Public License v3.0我们把它集成进SPI例程里,完成 W25Q128 的读写功能。Step 1,下载后把解压的文件夹 w25qxx-master 放在 STM32Cube_FW_F0_V1.11.0\Drivers\BSP\Components

poYBAGL6_ieAO6U_AAByM4isWts892.png

Step 2, 我们用 Keil 打开下面这个工程:STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling\MDK-ARM\Project.uvprojx在项目(STM32F030R8-Nucleo)上点鼠标右键,选择Add Group...新建 Group 并改名称为 Drivers\BSP\Components\w25qxx-master

pYYBAGL6_jeAZHY3AADTWtoIYnE725.png

Step 3, 在 Drivers\BSP\Components\w25qxx-master上点右键,选择Add Existing Files to Group "Drivers\BSP\Components\w25qxx-master"...,找到 Drivers/BSP/components/w25qxx-master/w25qxx.c 点击Add,然后可以看到w25qxx.c已经添加进项目中:

pYYBAGL6_keAb6INAAB_mhBDD84395.png

Step 4, 在 Options for Target 里添加路径,这里使用的是工程所在路径的相对路径,也可以使用绝对路径,但如果工程拷贝到别的地方的时候,此包含路径就需要跟随更改。Add include path ../../../../../../Drivers/BSP/components/w25qxx-master

poYBAGL6_leADqIVAAFFyC8370M808.png

Step 5, 驱动头文件 w25qxx.h 中原来包含的的 spi.h, 因为我们使用的 Cube 库,头文件需要做如下替换://#include "spi.h"#include "stm32f0xx_hal.h"Step 6, main.h 里根据实际情况配置引脚,把驱动头文件 #include "w25qxx.h" 包含进来。片选信号 CS 可以由任意一个 GPIO 控制,在函数HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)里把CS引脚配置为GPIO输出就行了,实际的拉低拉高是驱动代码实现的。

pYYBAGL6_nWAfKJQAAELkLXHCu0036.png

poYBAGL6_nuATqzeAAFLO6ma58Q559.png

Step 7, 在 main.c 里定义了 SpiHandle 并指向 SPI1, 我们在 w25qxx.c里也要用到这个 Handle,所以通过 extern 来引用一下。

poYBAGL6_oyAVdmIAADxMrpaxjo604.png

Step 8, 初始化 SPI1,然后调用 w25qxx 驱动的初始化代码 W25qxx_Init( ); 然后就可以用擦除,读写等函数了。

pYYBAGL6_qCAPcfvAAFuW24sgJA429.png

在代码的修改过程中,我们可以再次体会 Cube 库的这种分层结构带来的好处,特别是如何与第三方驱动代码融合。各个模块就像积木一样,我们只需要把它们搭建起来就可以快速的实现我们想要的功能。下面是读出数据时实际抓取的波形:

pYYBAGL6_q-AUkwfAACANbss55c731.png



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6036

    文章

    44553

    浏览量

    634777
  • EEPROM
    +关注

    关注

    9

    文章

    1019

    浏览量

    81565
  • SPI接口
    +关注

    关注

    0

    文章

    258

    浏览量

    34373
  • STM32F0
    +关注

    关注

    0

    文章

    61

    浏览量

    17103
收藏 人收藏

    评论

    相关推荐

    编程SPI FLASH W28Q128

    嗨,我正在设计一块带有Spartan 6的电路板,我想使用连接在Spartan SPI总线上的W25Q128 SPI闪存(Windbond),并通过Spartan对SPI进行编程。我的
    发表于 01-21 07:53

    SPI读写W25Q128

    STM32库里面基本都有,调用就好。但是下面还有一些不懂得地方,应该是关于W25Q128的。这个u8类型数据右移16位不是等于0吗,就变成了传输24位地址??往W25Q128里面读的时候就一定时0XFF,还是随便吗???
    发表于 04-23 11:00

    W25Q128芯片简介

    1、W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存储空间为 128Mbit,相当于 16M 字节。 W25Q128 可以支持
    发表于 08-13 08:49

    W25Q128V芯片的特点有哪些

    W25Q128V芯片是串行闪存,可以通过标准/两线/四线SPI控制,W25Q128fv管脚如上,作为标准
    发表于 12-09 07:10

    如何利用SPI串行外设接口读取W25Q128的数据

    SPI是什么?SPI有哪几种模式?如何利用SPI串行外设接口读取
    发表于 12-16 07:09

    W25Q128与NRF***是怎样通过SPI进行连接的

    SPI是什么?SPI的工作原理是什么?W25Q128与NRF***是怎样通过SPI进行连接的?
    发表于 12-20 06:54

    基于STM32F407利用HAL库使用SPIW25Q128进行读写实验

    基于STM32F407利用HAL库使用SPIW25Q128进行读写实验。
    发表于 02-17 06:31

    华芯微特SWM260读写W25Q128的方法

    W25Q128读写采用的是SPI接口;本人移植的程序是在STM32上验证过的,只需要修改相应的底层函数即可;初始化SPI接口;void MX_SP
    发表于 02-28 12:24

    基于RT-Thread的W25Q128虚拟U盘和文件系统如何实现自由切换

    文件系统RT-Thread:W25Q128虚拟U盘并搭载文件系统RT-Thread:STM32F407虚拟U盘,无法识别拔出问题解决方案1、W25Q128分区使用fal组件给spi flash 分区(如何分区见fal
    发表于 08-04 10:57

    一文解析SPI外设驱动W25Q128

    1、NuMaker-M2354试用之SPI 驱动W25Q128功能模块的硬件介绍开发版本身没有spi外设,没办法需要焊接或者连接spi外设。经过芯片文档查询M2354由四组
    发表于 08-19 14:51

    W25Q128 闪存芯片SPI详解

    W25Q128V芯片是串行闪存,可以通过标准/两线/四线SPI控制,W25Q128fv管脚如上,作为标准
    发表于 11-26 17:36 264次下载
    <b class='flag-5'>W25Q128</b> 闪存芯片<b class='flag-5'>SPI</b>详解

    stm32 cubemx usb spi flash w25q128 u盘调试笔记

    基本代码确定使用需求 USB SPIusb以下配置保持默认配置即可,切记不要胡乱修改参数。spi调试spi flash我使用的flash 是w25q128 spi 通信模式,所以直接找
    发表于 12-14 18:52 33次下载
    stm32 cubemx usb <b class='flag-5'>spi</b> flash <b class='flag-5'>w25q128</b> u盘调试笔记

    【C应用】基于HAL库的SPI读FLASH

    基于STM32F407利用HAL库使用SPIW25Q128进行读写实验。
    发表于 12-22 19:22 7次下载
    【C应用】基于HAL库的<b class='flag-5'>SPI</b>读FLASH

    STM32CUBEMX(13)--SPIW25Q128外部Flash移植

    省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如 EEPROM,FLASH,实时时钟,AD转换器。 W25Q128 是一款SPI接口的Flash芯片,其存储空间为
    的头像 发表于 11-14 16:54 3498次阅读
    STM32CUBEMX(13)--<b class='flag-5'>SPI</b>,<b class='flag-5'>W25Q128</b>外部Flash移植

    瑞萨e2studio----串口获取数据通过SPI存储于W25Q128外部flash

    本篇文章主要介绍如何使用e2studio对瑞萨进行spi配置,同时移植stm32上的W25Q128到瑞萨上,同时通过对该FLASH进行读写操作,验证是否正确。
    的头像 发表于 12-02 17:54 2948次阅读
    瑞萨e2studio----串口获取数据通过<b class='flag-5'>SPI</b>存储于<b class='flag-5'>W25Q128</b>外部flash