加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

玩转X-CTR100 l STM32F4 l W25Q64 SPI串行FLASH存储

发布时间:2020-12-15 19:48:50 所属栏目:百科 来源:网络整理
导读:我造轮子,你造车,创客一起造起来! 塔克创新 资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】 ???? 本文介绍X-CTR100控制器 板载FLASH存储芯片W25Q64的使用。 W25Q64,芯片容量为64M bit,即8M Byte,可用于存储参数、字库、图片等数

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

????

本文介绍X-CTR100控制器 板载FLASH存储芯片W25Q64的使用。

W25Q64,芯片容量为64M bit,即8M Byte,可用于存储参数、字库、图片等数据。

原理

W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb。该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。W25Q64的最小擦除单位为一个扇区,也就是每次必须擦除4K个字节。所以,这需要给W25Q64开辟一个至少4K的缓存区,这样必须要求芯片有4K以上的SRAM才能有很好的操作。W25Q64的擦写周期多达10W次,可将数据保存达20年之久,支持2.7~3.6V的电压,支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可达80Mhz。

? 支持标准、双输出和四输出的SPI

? 高性能串行闪存

? 高达普通串行闪存性能的6倍

? 80Mhz的时钟操作

? 支持160Mhz的双输出SPI

? 支持320Mhz的四输出SPI

? 40MB/S的数据连续传输速率

? 高效的"连续读取模式"

? 低指令开销

? 仅需8个时钟周期处理内存

? 允许XIP操作

? 性能优于X16并行闪存

? 低功耗,温度范围宽

? 单电源2.7V至3.6V

? 4mA有源电流

? -40°C 至+85°C的正常运行温度范围

? 灵活的4KB扇区构架

? 扇区统一擦除(4KB)

? 块擦除(32KB和64KB)

? 1到256个字节编程

? 超过10万次擦除/写循环

? 超过20年的数据保存

? 高级的安全功能

? 软件和硬件写保护

? 自上至下,扇区或块选择

? 锁定和保护OTP

? 每个设备都有唯一的64位ID

? CS:片选信号输入

? DO(IO1):数据输出(数据输入输出1)

? WP(IO2):写保护输入(数据输入输出2)

? GND:地信号

? DI(IO0):数据输入(数据输入输出0)

? CLK:串行时钟输入

? HOLD(IO3):Hold输入(数据输入输出3)

? VCC:电源

例程

读取W25Q64芯片ID,FLASH读写数据测试,掉电唤醒测试。

硬件说明

硬件资源:

  • 串口UART1
  • W25Q64

硬件连接:

X-CTR100设计有SPI FLASH存储芯片和TF卡接口,共用SPI1资源,可通过片选信号进行分时工作。

软件生态

X-SOFT软件生态,X-API文件如下。

ax_w25q64.c——X-CTR100 板载W25Q64 FLASH存储源文件

ax_w25q64.h——X-CTR100 板载W25Q64 FLASH存储头文件

操作函数如下:

void AX_W25Q64_Init(void); //W25Q64初始化

void AX_W25Q64_SectorErase(uint32_t sector); //W25Q64擦除一个扇区????

void AX_W25Q64_ChipErase(void); //W25Q64擦除整个芯片

void AX_W25Q64_Read(uint8_t *pbuf,uint32_t addr,uint16_t num); //W25Q64指定地址读出指定长度的数据

void AX_W25Q64_Write(uint8_t *pbuf,uint16_t num); //W25Q64指定地址写入指定长度的数据

void AX_W25Q64_PageWrite(uint8_t *pbuf,uint16_t num); //W25Q64页写操作

uint32_t AX_W25Q64_ReadID(void); //W25Q64读取芯片ID

void AX_W25Q64_WakeUp(void); //W25Q64唤醒操作

void AX_W25Q64_PowerDown(void); //W25Q64掉电操作

软件说明

本例程FLASH初始化成功后,首先进行读取ID操作,然后进行数据读写测试,并显示读写数据进行对比。最后进行掉电唤醒测试,掉电500ms后唤醒芯片。在FLASH不操作状态下,掉电处理可降低系统功耗。主程序代码如下。

int main(void)

{

????uint8_t str[] = { "X-CTR100 FLASH TEST" };

????uint8_t str1[sizeof(str)];

????uint32_t id = 0;

????uint32_t address = 2 * 4096;

?

????/* X-CTR100初始化 */

????AX_Init(115200);

????printf("***X-CTR100 FLASH W25Q64读写例程***rnrn");

?

????//模块初始化及配置

????AX_W25Q64_Init();

?

????//XAPI测试:读取W25Q64 FLASH ID测试

????printf("*W25Q64 读取FLASH ID测试rn");

????id = AX_W25Q64_ReadID();

????printf("*W25Q64 FLASH ID:0x%Xrnrn",id);

?

?

????//X-API测试:读写W25Q64测试????

????printf("*W25Q64读写测试rn");

????//擦除将要写入的FLASH扇区

????AX_W25Q64_SectorErase(address);

????//写数据

????AX_W25Q64_Write(str,address,sizeof(str));

????printf("*地址 0x%X 写入数据:%srn",str);

????//读数据

????AX_W25Q64_Read(str1,sizeof(str));

????printf("*地址 0x%X 读出数据:%srn",str1);

?

????//X-API测试:掉电唤醒测试

????AX_W25Q64_PowerDown();

????AX_Delayms(500);

????AX_W25Q64_WakeUp();

?

????while (1)

????{

????????AX_Delayms(500);

????????AX_LEDG_Toggle();

????}

}

实现效果

上电复位后,运行效果如下图所示。

????

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读