optical/NxFuncs/stiap/stflash.h

140 lines
5.2 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __STFLASH_H__
#define __STFLASH_H__
#include "config.h"
#ifndef STM32_FLASH_BASE
#define STM32_FLASH_BASE FLASH_BASE // STM32 FLASH <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#endif
#ifdef FLASH_END
#define STM32_FLASH_SIZE (FLASH_END - FLASH_BASE + 1) // <20><>ѡSTM32<33><32>FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>λΪ<CEBB>ֽ<EFBFBD>)
#else
#ifdef FLASH_BANK1_END
#define STM32_FLASH_SIZE (FLASH_BANK1_END - FLASH_BASE + 1) // <20><>ѡSTM32<33><32>FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>λΪ<CEBB>ֽ<EFBFBD>)
#endif
#endif
#if (__CORTEX_M == 0)
/*
С<EFBFBD><EFBFBD>64K<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>(F03x, F04x, F05x)
<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>128K<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>(F07x, F09x)
*/
#if (STM32_FLASH_SIZE <= (64*1024))
#define STM32_FLASH_SEC_SIZE (1*1024) //
#else
#define STM32_FLASH_SEC_SIZE (2*1024) //
#endif
#define STM32_FLASH_SEC_NUM (STM32_FLASH_SIZE/STM32_FLASH_SEC_SIZE) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // ÿ<>ζ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#elif (__CORTEX_M == 3)
/*
С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4K<EFBFBD><EFBFBD>64λ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ32<EFBFBD><EFBFBD>1K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16K<EFBFBD><EFBFBD>64λ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ128<EFBFBD><EFBFBD>1K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ64K<EFBFBD><EFBFBD>64λ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ256<EFBFBD><EFBFBD>2K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ32K<EFBFBD><EFBFBD>64λ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ128<EFBFBD><EFBFBD>2K<EFBFBD>ֽڵ<EFBFBD>ҳ<EFBFBD><EFBFBD>
*/
#if (STM32_FLASH_SIZE <= (128*1024))
#define STM32_FLASH_SEC_SIZE (1*1024) // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> 1K<31>ֽ<EFBFBD>
#else
#define STM32_FLASH_SEC_SIZE (2*1024) // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> 2K<32>ֽ<EFBFBD>
#endif
#define STM32_FLASH_SEC_NUM (STM32_FLASH_SIZE/STM32_FLASH_SEC_SIZE) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // ÿ<>ζ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#elif (__CORTEX_M == 4)
// STM32 FLASH <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define STM32_FLASH_ADDR_SECTOR_0 ((u32)(STM32_FLASH_BASE + 0x000000)) //<2F><><EFBFBD><EFBFBD> 0 <20><>ʼ<EFBFBD><CABC>ַ, 16 Kbytes
#define STM32_FLASH_ADDR_SECTOR_1 ((u32)(STM32_FLASH_BASE + 0x004000)) //<2F><><EFBFBD><EFBFBD> 1 <20><>ʼ<EFBFBD><CABC>ַ, 16 Kbytes
#define STM32_FLASH_ADDR_SECTOR_2 ((u32)(STM32_FLASH_BASE + 0x008000)) //<2F><><EFBFBD><EFBFBD> 2 <20><>ʼ<EFBFBD><CABC>ַ, 16 Kbytes
#define STM32_FLASH_ADDR_SECTOR_3 ((u32)(STM32_FLASH_BASE + 0x00C000)) //<2F><><EFBFBD><EFBFBD> 3 <20><>ʼ<EFBFBD><CABC>ַ, 16 Kbytes
#define STM32_FLASH_ADDR_SECTOR_4 ((u32)(STM32_FLASH_BASE + 0x010000)) //<2F><><EFBFBD><EFBFBD> 4 <20><>ʼ<EFBFBD><CABC>ַ, 64 Kbytes
#define STM32_FLASH_ADDR_SECTOR_5 ((u32)(STM32_FLASH_BASE + 0x020000)) //<2F><><EFBFBD><EFBFBD> 5 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_ADDR_SECTOR_6 ((u32)(STM32_FLASH_BASE + 0x040000)) //<2F><><EFBFBD><EFBFBD> 6 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_ADDR_SECTOR_7 ((u32)(STM32_FLASH_BASE + 0x060000)) //<2F><><EFBFBD><EFBFBD> 7 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#if (STM32_FLASH_SIZE > (512*1024))
#define STM32_FLASH_ADDR_SECTOR_8 ((u32)(STM32_FLASH_BASE + 0x080000)) //<2F><><EFBFBD><EFBFBD> 8 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_ADDR_SECTOR_9 ((u32)(STM32_FLASH_BASE + 0x0A0000)) //<2F><><EFBFBD><EFBFBD> 9 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_ADDR_SECTOR_10 ((u32)(STM32_FLASH_BASE + 0x0C0000)) //<2F><><EFBFBD><EFBFBD> 10 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_ADDR_SECTOR_11 ((u32)(STM32_FLASH_BASE + 0x0E0000)) //<2F><><EFBFBD><EFBFBD> 11 <20><>ʼ<EFBFBD><CABC>ַ, 128 Kbytes
#define STM32_FLASH_SEC_NUM 12
#else
#define STM32_FLASH_SEC_NUM 8 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
#define STM32_FLASH_SIZE_SECTOR_0 ((u32)(16*1024)) //<2F><><EFBFBD><EFBFBD> 0 <20><>С, 16 Kbytes
#define STM32_FLASH_SIZE_SECTOR_1 ((u32)(16*1024)) //<2F><><EFBFBD><EFBFBD> 1 <20><>С, 16 Kbytes
#define STM32_FLASH_SIZE_SECTOR_2 ((u32)(16*1024)) //<2F><><EFBFBD><EFBFBD> 2 <20><>С, 16 Kbytes
#define STM32_FLASH_SIZE_SECTOR_3 ((u32)(16*1024)) //<2F><><EFBFBD><EFBFBD> 3 <20><>С, 16 Kbytes
#define STM32_FLASH_SIZE_SECTOR_4 ((u32)(64*1024)) //<2F><><EFBFBD><EFBFBD> 4 <20><>С, 64 Kbytes
#define STM32_FLASH_SIZE_SECTOR_5 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 5 <20><>С, 128 Kbytes
#define STM32_FLASH_SIZE_SECTOR_6 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 6 <20><>С, 128 Kbytes
#define STM32_FLASH_SIZE_SECTOR_7 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 7 <20><>С, 128 Kbytes
#if (STM32_FLASH_SIZE > (512*1024))
#define STM32_FLASH_SIZE_SECTOR_8 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 8 <20><>С, 128 Kbytes
#define STM32_FLASH_SIZE_SECTOR_9 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 9 <20><>С, 128 Kbytes
#define STM32_FLASH_SIZE_SECTOR_10 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 10 <20><>С, 128 Kbytes
#define STM32_FLASH_SIZE_SECTOR_11 ((u32)(128*1024)) //<2F><><EFBFBD><EFBFBD> 11 <20><>С, 128 Kbytes
#endif
#define STM32_FLASH_RW_SIZE (2*1024) // ÿ<>ζ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#endif
#define STM32_APP_ADDR (STM32_FLASH_BASE+STM32_BOOT_SIZE) // Ӧ<>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH)
#ifndef STF_UPDATE_SIZE
#define STF_UPDATE_SIZE (0) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
#endif
#ifndef STM32_PARA_SIZE
#define STM32_PARA_SIZE (0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#endif
#ifdef STM32_FLASH_SEC_SIZE
#define MARK_SIZE (STM32_FLASH_RW_SIZE) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
#define STF_UPDATE_BEGIN (STM32_FLASH_BASE+STM32_FLASH_SIZE-STM32_PARA_SIZE-STF_UPDATE_SIZE-MARK_SIZE)
#define STM32_PARA_ADDR (STM32_FLASH_BASE+STM32_FLASH_SIZE-STM32_PARA_SIZE)
#endif
//-------------------------------------------------------------------------
// Cortex-M4<4D><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>һ<EFBFBD><D2BB>,<2C><><EFBFBD>޻<EFBFBD>д<EFBFBD><D0B4>
#ifndef NO_BUFF_WHEN_WT
#define NO_BUFF_WHEN_WT 0
#endif
//-------------------------------------------------------------------------
int GetFlashSectorIdx(u32 faddr);
int STMFlashErase(u32 secIdx, int secnums);
int STMFlashRead(u32 rdAddr, u16 * pBuffer, u16 hwNumToWrite);
int STMFlashCheck(u32 ckAddr, u16 * pBuffer, u16 hwNumOfChekc);
int STMFlashWrite(u32 wrAddr, u16 * pBuffer, u16 hwNumToWrite, int svwhenera);
//-------------------------------------------------------------------------
#endif