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 的起始地址
|
||
#endif
|
||
|
||
#ifdef FLASH_END
|
||
#define STM32_FLASH_SIZE (FLASH_END - FLASH_BASE + 1) // 所选STM32的FLASH容量大小(单位为字节)
|
||
#else
|
||
#ifdef FLASH_BANK1_END
|
||
#define STM32_FLASH_SIZE (FLASH_BANK1_END - FLASH_BASE + 1) // 所选STM32的FLASH容量大小(单位为字节)
|
||
#endif
|
||
#endif
|
||
|
||
|
||
|
||
|
||
#if (__CORTEX_M == 0)
|
||
/*
|
||
小于64K,每个存储块划分为1K字节的页。(F03x, F04x, F05x)
|
||
|
||
大于等于128K,每个存储块划分为2K字节的页。(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) // 扇区个数
|
||
|
||
#define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // 每次读写的字节数
|
||
|
||
#elif (__CORTEX_M == 3)
|
||
|
||
/*
|
||
小容量产品主存储块最大为4K×64位,每个存储块划分为32个1K字节的页。
|
||
中容量产品主存储块最大为16K×64位,每个存储块划分为128个1K字节的页。
|
||
大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页。
|
||
互联型产品主存储块最大为32K×64位,每个存储块划分为128个2K字节的页。
|
||
*/
|
||
|
||
#if (STM32_FLASH_SIZE <= (128*1024))
|
||
#define STM32_FLASH_SEC_SIZE (1*1024) // 每个扇区的字节数 1K字节
|
||
#else
|
||
#define STM32_FLASH_SEC_SIZE (2*1024) // 每个扇区的字节数 2K字节
|
||
#endif
|
||
|
||
#define STM32_FLASH_SEC_NUM (STM32_FLASH_SIZE/STM32_FLASH_SEC_SIZE) // 扇区个数
|
||
|
||
#define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // 每次读写的字节数
|
||
|
||
|
||
#elif (__CORTEX_M == 4)
|
||
|
||
// STM32 FLASH 扇区的起始地址
|
||
#define STM32_FLASH_ADDR_SECTOR_0 ((u32)(STM32_FLASH_BASE + 0x000000)) //扇区 0 起始地址, 16 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_1 ((u32)(STM32_FLASH_BASE + 0x004000)) //扇区 1 起始地址, 16 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_2 ((u32)(STM32_FLASH_BASE + 0x008000)) //扇区 2 起始地址, 16 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_3 ((u32)(STM32_FLASH_BASE + 0x00C000)) //扇区 3 起始地址, 16 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_4 ((u32)(STM32_FLASH_BASE + 0x010000)) //扇区 4 起始地址, 64 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_5 ((u32)(STM32_FLASH_BASE + 0x020000)) //扇区 5 起始地址, 128 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_6 ((u32)(STM32_FLASH_BASE + 0x040000)) //扇区 6 起始地址, 128 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_7 ((u32)(STM32_FLASH_BASE + 0x060000)) //扇区 7 起始地址, 128 Kbytes
|
||
|
||
#if (STM32_FLASH_SIZE > (512*1024))
|
||
#define STM32_FLASH_ADDR_SECTOR_8 ((u32)(STM32_FLASH_BASE + 0x080000)) //扇区 8 起始地址, 128 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_9 ((u32)(STM32_FLASH_BASE + 0x0A0000)) //扇区 9 起始地址, 128 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_10 ((u32)(STM32_FLASH_BASE + 0x0C0000)) //扇区 10 起始地址, 128 Kbytes
|
||
#define STM32_FLASH_ADDR_SECTOR_11 ((u32)(STM32_FLASH_BASE + 0x0E0000)) //扇区 11 起始地址, 128 Kbytes
|
||
|
||
#define STM32_FLASH_SEC_NUM 12
|
||
#else
|
||
#define STM32_FLASH_SEC_NUM 8 // 扇区个数
|
||
#endif
|
||
|
||
#define STM32_FLASH_SIZE_SECTOR_0 ((u32)(16*1024)) //扇区 0 大小, 16 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_1 ((u32)(16*1024)) //扇区 1 大小, 16 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_2 ((u32)(16*1024)) //扇区 2 大小, 16 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_3 ((u32)(16*1024)) //扇区 3 大小, 16 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_4 ((u32)(64*1024)) //扇区 4 大小, 64 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_5 ((u32)(128*1024)) //扇区 5 大小, 128 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_6 ((u32)(128*1024)) //扇区 6 大小, 128 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_7 ((u32)(128*1024)) //扇区 7 大小, 128 Kbytes
|
||
|
||
#if (STM32_FLASH_SIZE > (512*1024))
|
||
#define STM32_FLASH_SIZE_SECTOR_8 ((u32)(128*1024)) //扇区 8 大小, 128 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_9 ((u32)(128*1024)) //扇区 9 大小, 128 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_10 ((u32)(128*1024)) //扇区 10 大小, 128 Kbytes
|
||
#define STM32_FLASH_SIZE_SECTOR_11 ((u32)(128*1024)) //扇区 11 大小, 128 Kbytes
|
||
#endif
|
||
|
||
#define STM32_FLASH_RW_SIZE (2*1024) // 每次读写的字节数
|
||
|
||
#endif
|
||
|
||
#define STM32_APP_ADDR (STM32_FLASH_BASE+STM32_BOOT_SIZE) // 应用程序起始地址(存放在FLASH)
|
||
|
||
#ifndef STF_UPDATE_SIZE
|
||
#define STF_UPDATE_SIZE (0) // 升级文件存储区域的大小
|
||
#endif
|
||
|
||
#ifndef STM32_PARA_SIZE
|
||
#define STM32_PARA_SIZE (0) // 参数存储区域大小
|
||
#endif
|
||
|
||
#ifdef STM32_FLASH_SEC_SIZE
|
||
#define MARK_SIZE (STM32_FLASH_RW_SIZE) // 升级标志存储区域的大小
|
||
|
||
#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处理器,FLASH各扇区大小不一致,需无缓写入
|
||
#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
|
||
|