140 lines
5.2 KiB
C
140 lines
5.2 KiB
C
|
|
|
|||
|
|
#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
|
|||
|
|
|