/* * @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