Job_SignsPads/STM32/Code/STM32F405/Application/en25qx64.h
2025-04-22 10:29:37 +08:00

139 lines
6.1 KiB
C

/*
* @Description:
* @Version: 1.0
* @Autor: lzc
* @Date: 2022-09-02 08:59:57
* @LastEditors: lzc
* @LastEditTime: 2024-02-27 10:41:30
*/
#ifndef __EN25QX64_H
#define __EN25QX64_H
#include "sys.h"
/***EN25X系列/Q系列芯片列表***/
// EN25Q80 ID 0XEF13
// EN25Q16 ID 0XEF14
// EN25Q32 ID 0XEF15
// EN25Q64 ID 0XEF16
// EN25Q128 ID 0XEF17
// #define EN25Q80 0XEF13
// #define EN25Q16 0XEF14
// #define EN25Q32 0XEF15
// #define EN25Q64 0XEF16
// #define EN25Q128 0XEF17
// #define EN25Q64 0XC816
// #define EN25Q64 0X1C16 //GD25QXX
// #define EN25Q64 0X2016 //XM25QHXX
#define EN25Q64 0X1c16 // EN25QX64
extern u16 EN25QXX_TYPE; // 定义EN25QXX芯片型号
#define EN25QXX_CS PAout(4) // EN25QXX的片选信号
#define EN25QXX_HOLD PCout(4) // EN25QXX的HOLD信号
/***指令表***/
#define EN25X_WriteEnable 0x06
#define EN25X_WriteDisable 0x04
#define EN25X_ReadStatusReg 0x05
#define EN25X_WriteStatusReg 0x01
#define EN25X_ReadData 0x03
#define EN25X_FastReadData 0x0B
#define EN25X_FastReadDual 0x3B
#define EN25X_PageProgram 0x02
#define EN25X_BlockErase 0xD8
#define EN25X_SectorErase 0x20
#define EN25X_ChipErase 0xC7
#define EN25X_PowerDown 0xB9
#define EN25X_ReleasePowerDown 0xAB
#define EN25X_DeviceID 0xAB
#define EN25X_ManufactDeviceID 0x90
#define EN25X_JedecDeviceID 0x9F
// Part 1 配置参数存储位置 --1MB
#define FLASH_BLOCK_0_START_ADDRESS 0x0000000
#define FLASH_BLOCK_1_START_ADDRESS 0x0010000
#define FLASH_BLOCK_2_START_ADDRESS 0x0020000
#define FLASH_BLOCK_3_START_ADDRESS 0x0030000
#define FLASH_BLOCK_4_START_ADDRESS 0x0040000
#define FLASH_BLOCK_5_START_ADDRESS 0x0050000
#define FLASH_BLOCK_6_START_ADDRESS 0x0060000
#define FLASH_BLOCK_7_START_ADDRESS 0x0070000
#define FLASH_BLOCK_8_START_ADDRESS 0x0080000
#define FLASH_BLOCK_9_START_ADDRESS 0x0090000
#define FLASH_BLOCK_10_START_ADDRESS 0x00A0000
#define FLASH_BLOCK_11_START_ADDRESS 0x00B0000
#define FLASH_BLOCK_12_START_ADDRESS 0x00C0000
#define FLASH_BLOCK_13_START_ADDRESS 0x00D0000
#define FLASH_BLOCK_14_START_ADDRESS 0x00E0000
#define FLASH_BLOCK_15_START_ADDRESS 0x00F0000
// Part 2 异常数据存储位置 --1MB
#define FLASH_BLOCK_16_START_ADDRESS 0x0100000
#define FLASH_BLOCK_17_START_ADDRESS 0x0110000
#define FLASH_BLOCK_18_START_ADDRESS 0x0120000
#define FLASH_BLOCK_19_START_ADDRESS 0x0130000
#define FLASH_BLOCK_20_START_ADDRESS 0x0140000
#define FLASH_BLOCK_21_START_ADDRESS 0x0150000
#define FLASH_BLOCK_22_START_ADDRESS 0x0160000
#define FLASH_BLOCK_23_START_ADDRESS 0x0170000
#define FLASH_BLOCK_24_START_ADDRESS 0x0180000
#define FLASH_BLOCK_25_START_ADDRESS 0x0190000
#define FLASH_BLOCK_26_START_ADDRESS 0x01A0000
#define FLASH_BLOCK_27_START_ADDRESS 0x01B0000
#define FLASH_BLOCK_28_START_ADDRESS 0x01C0000
#define FLASH_BLOCK_29_START_ADDRESS 0x01D0000
#define FLASH_BLOCK_30_START_ADDRESS 0x01E0000
#define FLASH_BLOCK_31_START_ADDRESS 0x01F0000
// Part 3 睡眠报告存储位置 --1MB
#define FLASH_BLOCK_32_START_ADDRESS 0x0200000
#define FLASH_BLOCK_33_START_ADDRESS 0x0210000
#define FLASH_BLOCK_34_START_ADDRESS 0x0220000
#define FLASH_BLOCK_35_START_ADDRESS 0x0230000
#define FLASH_BLOCK_36_START_ADDRESS 0x0240000
#define FLASH_BLOCK_37_START_ADDRESS 0x0250000
#define FLASH_BLOCK_38_START_ADDRESS 0x0260000
#define FLASH_BLOCK_39_START_ADDRESS 0x0270000
#define FLASH_BLOCK_40_START_ADDRESS 0x0280000
#define FLASH_BLOCK_41_START_ADDRESS 0x0290000
#define FLASH_BLOCK_42_START_ADDRESS 0x02A0000
#define FLASH_BLOCK_43_START_ADDRESS 0x02B0000
#define FLASH_BLOCK_44_START_ADDRESS 0x02C0000
#define FLASH_BLOCK_45_START_ADDRESS 0x02D0000
#define FLASH_BLOCK_46_START_ADDRESS 0x02E0000
#define FLASH_BLOCK_47_START_ADDRESS 0x02F0000
// NOTE: 配置参数区域
#define FLASH_IN_BED_THRESHOLD_ADDRESS FLASH_BLOCK_0_START_ADDRESS // 在床阈值
#define FLASH_OFF_BED_THRESHOLD_ADDRESS (FLASH_IN_BED_THRESHOLD_ADDRESS + sizeof(float)) // 离床阈值
// NOTE: 睡眠报告存储区域
#define FLASH_SLEEP_REPORT_DIRECTORY_ADDRESS FLASH_BLOCK_32_START_ADDRESS // 存储位置对应表(目录)
#define FLASH_SLEEP_REPORT_START_SAVE_ADDRESS FLASH_BLOCK_33_START_ADDRESS // 睡眠报告起始存储位置
#define FLASH_SLEEP_REPORT_INFO_ADDRESS FLASH_SLEEP_REPORT_START_SAVE_ADDRESS // 存储参数其中包含时间戳以及其他——4KB
#define FLASH_SLEEP_REPORT_DATA_1_ADDRESS (FLASH_SLEEP_REPORT_INFO_ADDRESS + 0x1000) // 存储4k数据块1
#define FLASH_SLEEP_REPORT_DATA_2_ADDRESS (FLASH_SLEEP_REPORT_DATA_1_ADDRESS + 0x1000) // 存储4k数据块2
#define FLASH_SLEEP_REPORT_RETAIN_ADDRESS (FLASH_SLEEP_REPORT_DATA_2_ADDRESS + 0x1000) // 存储保留数据
#define FLASH_SLEEP_REPORT_TIMESTAMP_ADDRESS FLASH_SLEEP_REPORT_INFO_ADDRESS // 时间戳记录
#define FLASH_SLEEP_REPORT_SCORE_EFFICIENCY_ADDRESS (FLASH_SLEEP_REPORT_TIMESTAMP_ADDRESS + 0x100) // 睡眠得分和效率地址
// NOTE: 在离床参数存储位置
#define FLASH_IN_OFF_BED_OPM_RECORD_ADDRESS FLASH_BLOCK_16_START_ADDRESS // 在离床光功率记录
#define FLASH_NET_CONFIG_STATUS_ADDRESS (FLASH_IN_OFF_BED_OPM_RECORD_ADDRESS + 4) // 网络配置状态记录
void EN25QXX_Init(void);
u16 EN25QXX_ReadID(void); // 读取FLASH ID
u8 EN25QXX_ReadSR(void); // 读取状态寄存器
void EN25QXX_Write_SR(u8 sr); // 写状态寄存器
void EN25QXX_Write_Enable(void); // 写使能
void EN25QXX_Write_Disable(void); // 写保护
void EN25QXX_Write_NoCheck(u8 *pBuffer, u32 WriteAddr, u16 NumByteToWrite);
void EN25QXX_Read(u8 *pBuffer, u32 ReadAddr, u16 NumByteToRead); // 读取flash
void EN25QXX_Write(u8 *pBuffer, u32 WriteAddr, u16 NumByteToWrite); // 写入flash
void EN25QXX_Erase_Chip(void); // 整片擦除
void EN25QXX_Erase_Sector(u32 Dst_Addr); // 扇区擦除
void EN25QXX_Erase_Block(u32 Dst_Addr); // 块擦除
void EN25QXX_Wait_Busy(void); // 等待空闲
void EN25QXX_PowerDown(void); // 进入掉电模式
void EN25QXX_WAKEUP(void); // 唤醒
#endif