optical/NxFuncs/stiap/stflash.h
2025-09-04 09:45:08 +08:00

140 lines
5.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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