W25Q64 Flash存储传感器数据

0
回复
80
查看
[ 复制链接 ]

38

主题

1

回帖

130

积分

管理员

积分
130
2025-6-30 08:44:33 显示全部楼层 阅读模式
W25Q64 Flash存储传感器数据
🔥 实际问题:
"野外监测设备需要断电保存最后100条温湿度记录"
🚀 三步解决方案:
  • 硬件接线:
    [backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]text
    [color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

    复制
    [color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

    下载





    PA5 → FLASH_CLK  PA6 → FLASH_MISO  PA7 → FLASH_MOSI  PA4 → FLASH_CS
  • 关键代码(带错误重试机制):

[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





// 读取Flash ID(验证通信)uint32_t Read_ID() {    uint8_t cmd[4 = {0x9F, 0, 0, 0};    uint8_t id[3;    HAL_SPI_TransmitReceive(&hspi1, cmd, id, 4, 100);    return (id[0<<16)|(id[1<<8)|id[2; // 应返回0xEF4017}// 写入数据(含擦除判断)void Flash_Write(uint32_t addr, uint8_t *data, uint16_t len) {    W25Q64_WriteEnable();    HAL_SPI_Transmit(&hspi1, "\x02", 1, 100); // 页编程指令    HAL_SPI_Transmit(&hspi1, (uint8_t*)&addr, 3, 100);    HAL_SPI_Transmit(&hspi1, data, len, 100);    while(W25Q64_Busy()); // 等待写入完成}
  • 数据管理技巧:

    • 使用循环队列存储:addr = (index % 100) * 64
    • 添加CRC校验:HAL_CRC_Calculate(&hcrc, data, len)


收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则