#ifndef FLASH_EXTERNAL_DATA_H #define FLASH_EXTERNAL_DATA_H #include "publicdata/type.h" #include "meter_calculate/meter_calculate_impl.h" /* ============================================================================ * 外部 Flash 容量与地址说明 * * 当前上电识别 JEDEC ID: 0xC84019 * - Manufacturer: 0xC8(GigaDevice) * - Capacity code: 0x19(典型为 256Mbit = 32MB) * * 当前底层驱动已启用 4-byte 地址模式(4 字节地址): * - 可直接访问线性地址范围:0x00000000 ~ 0x01FFFFFF(32MB) * - 总容量:0x02000000 bytes * ============================================================================ */ #define EXFLASH_ADDR_MIN (0x00000000u) #define EXFLASH_ADDR_MAX (0x01FFFFFFu) #define EXFLASH_TOTAL_SIZE (0x02000000u) /* SPI NOR Flash 物理扇区大小(字节) */ #define SPI_SECTOR_SIZE (4096u) #ifndef RECORD_ZERO_SAVE #define RECORD_ZERO_SAVE (0x7FFFu) #endif #ifndef RECORD_HEADER #define RECORD_HEADER (0x55u) #endif /* OTA 区(升级保留区) */ #define UPGRADE_START_ADDR (0x00000000u) #define UPGRADE_END_ADDR (0x001FFFFFu) #define UPGRADE_TOTAL_SIZE (UPGRADE_END_ADDR - UPGRADE_START_ADDR + 1u) /* 配置区 */ #define DATAFLASH_VAR_CFG_DATA1_ADDR (0x210000u) #define DATAFLASH_VAR_CFG_DATA2_ADDR (0x211000u) #define DATAFLASH_VAR_CFG_DATA3_ADDR (0x212000u) #define DATAFLASH_FIX_CFG_DATA1_ADDR (0x213000u) #define DATAFLASH_FIX_CFG_DATA2_ADDR (0x214000u) #define DATAFLASH_FIX_CFG_DATA3_ADDR (0x215000u) #define DATAFLASH_OCPP_CFG_DATA_ADDR (0x216000u) /* 故障、卡号、历史记录区 */ #define DATAFLASH_FAULT_ADDR (0x220000u) #define DATAFLASH_FAULT_SECTOR_CNT (2u) #define DATAFLASH_FAULT_END_ADDR (DATAFLASH_FAULT_ADDR + (DATAFLASH_FAULT_SECTOR_CNT * SPI_SECTOR_SIZE) - 1u) #define DATAFLASH_OCPP_MV_OFFLINE_ADDR (0x2C0000u) #define DATAFLASH_OCPP_MV_OFFLINE_HALF_SIZE (0x8000u) #define DATAFLASH_OCPP_MV_OFFLINE_SECTOR_CNT (16u) #define DATAFLASH_OCPP_MV_OFFLINE_TOTAL_SIZE (DATAFLASH_OCPP_MV_OFFLINE_HALF_SIZE * 2u) #define DATAFLASH_CARD_ADDR (0x222000u) #define DATAFLASH_CARD_SECTOR_CNT (7u) #define DATAFLASH_CARD_END_ADDR (DATAFLASH_CARD_ADDR + (DATAFLASH_CARD_SECTOR_CNT * SPI_SECTOR_SIZE) - 1u) #define DATAFLASH_HIS_RECORD_ADDR (0x230000u) #define DATAFLASH_HIS_RECORD_END_ADDR (0x2BFFFFu) #define DATAFLASH_HIS_RECORD_SIZE (DATAFLASH_HIS_RECORD_END_ADDR - DATAFLASH_HIS_RECORD_ADDR + 1u) #define DATAFLASH_HIS_RECORD_SECTOR_CNT (DATAFLASH_HIS_RECORD_SIZE / SPI_SECTOR_SIZE) /* Charge-order storage layout (compatible with migrated flash_file_mgr module) */ #ifndef CHG_ORDER_RECORD_SIZE #define CHG_ORDER_RECORD_SIZE (sizeof(S_LOG_DATA)) #endif #ifndef CHG_ORDER_FULL_RECORD_SIZE #define CHG_ORDER_FULL_RECORD_SIZE (1u + CHG_ORDER_RECORD_SIZE + 1u) #endif #ifndef CHG_ORDER_PER_SECTOR_CNT #define CHG_ORDER_PER_SECTOR_CNT (SPI_SECTOR_SIZE / CHG_ORDER_FULL_RECORD_SIZE) #endif #ifndef CHG_ORDER_MAX_CNT #define CHG_ORDER_MAX_CNT (200u) #endif #ifndef TEMP_CHG_RECORD_SIZE #define TEMP_CHG_RECORD_SIZE (sizeof(S_LOG_DATA)) #endif /* FatFs 映射区 */ #define FATFS_PHYSICAL_START_ADDR (0xA00000u) #define FATFS_PHYSICAL_STOP_ADDR (EXFLASH_ADDR_MAX) #define FATFS_PARTITION_SIZE (FATFS_PHYSICAL_STOP_ADDR - FATFS_PHYSICAL_START_ADDR + 1u) #define FATFS_TOTAL_SECTORS (FATFS_PARTITION_SIZE / SPI_SECTOR_SIZE) /* 统一对外接口:0=成功,非0=失败 */ U8_T v_flash_dataflash_init(void); U8_T s32_flash_dataflash_write(U32_T addr, U8_T *buf, U32_T len); U8_T s32_flash_dataflash_read(U32_T addr, U8_T *buf, U32_T len); U8_T s32_flash_dataflash_erase_sector(U32_T addr); /* 兼容旧接口命名 */ unsigned int SPI_flsh_ReadID(void); void v_flash_dataflash_fatfs_esaes_sectot(void); #endif