Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
PY32F072
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Puya
PY32F072
Commits
d0088c9d
Commit
d0088c9d
authored
Mar 26, 2025
by
李冠华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
feat:增加校验提供的flash空间是否够用的功能
parent
35ace98a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
83 additions
and
68 deletions
+83
-68
Emulated_EEPROM.c
...ample/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM.c
+18
-44
Emulated_EEPROM.h
...ample/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM.h
+11
-1
Emulated_EEPROM_Access.c
...LASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM_Access.c
+35
-6
Emulated_EEPROM_Access.h
...LASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM_Access.h
+3
-1
Flash_test.h
...TK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Flash_test.h
+16
-16
No files found.
PY32F072_Firmware_V1.0.5/Projects/PY32F072-STK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM.c
View file @
d0088c9d
...
...
@@ -12,47 +12,11 @@
uint32_t
g_u32EEPROMBlock0Buffer
[
EEPROM_BLOCK0_BUFFER_SIZE
/
4U
];
// #define EEPROM_BLOCK0_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_FLAG_SIZE)
// uint32_t g_u32EEPROMBlock0Buffer[EEPROM_BLOCK0_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK1_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_S27_SIZE)
// uint32_t g_u32EEPROMBlock1Buffer[EEPROM_BLOCK1_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK2_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_S2E_SIZE)
// uint32_t g_u32EEPROMBlock2Buffer[EEPROM_BLOCK2_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK3_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_CONFIG_SIZE)
// uint32_t g_u32EEPROMBlock3Buffer[EEPROM_BLOCK3_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK4_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_DTC_SIZE)
// uint32_t g_u32EEPROMBlock4Buffer[EEPROM_BLOCK4_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK5_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_ODO_SIZE)
// uint32_t g_u32EEPROMBlock5Buffer[EEPROM_BLOCK5_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK6_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_ODO_STAMP_SIZE)
// uint32_t g_u32EEPROMBlock6Buffer[EEPROM_BLOCK6_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK7_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_TRIP_STAMP_SIZE)
// uint32_t g_u32EEPROMBlock7Buffer[EEPROM_BLOCK7_BUFFER_SIZE / 4U];
// #define EEPROM_BLOCK8_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_SERVICE_INFO_SIZE)
// uint32_t g_u32EEPROMBlock8Buffer[EEPROM_BLOCK8_BUFFER_SIZE / 4U];
static
const
EEPROM_Block_st_t
g_stEEPROMBlockTable
[]
=
{
/* u32StartAddr u32EndAddr u32DataSize pu32DataBuffer */
{
SECTOR_14_START_ADDR
,
0x0801E7FFUL
,
EEPROM_BLOCK0_BUFFER_SIZE
,
g_u32EEPROMBlock0Buffer
,},
// {0x08019080UL, 0x080190FFUL, EEPROM_BLOCK1_BUFFER_SIZE, g_u32EEPROMBlock1Buffer,},
// {0x08019100UL, 0x0801917FUL, EEPROM_BLOCK2_BUFFER_SIZE, g_u32EEPROMBlock2Buffer,},
// {0x08019180UL, 0x080191FFUL, EEPROM_BLOCK3_BUFFER_SIZE, g_u32EEPROMBlock3Buffer,},
// {0x08019200UL, 0x0801927FUL, EEPROM_BLOCK4_BUFFER_SIZE, g_u32EEPROMBlock4Buffer,},
// {0x08019280UL, 0x0801967FUL, EEPROM_BLOCK5_BUFFER_SIZE, g_u32EEPROMBlock5Buffer,},
// {0x08019680UL, 0x08019B7FUL, EEPROM_BLOCK6_BUFFER_SIZE, g_u32EEPROMBlock6Buffer,},
// {0x08019B80UL, 0x0802157FUL, EEPROM_BLOCK7_BUFFER_SIZE, g_u32EEPROMBlock7Buffer,},
// {0x08021580UL, 0x080215FFUL, EEPROM_BLOCK8_BUFFER_SIZE, g_u32EEPROMBlock8Buffer,},
/*u32UsageTimes u32StartAddr u32EndAddr u32DataSize pu32DataBuffer */
{
EEPROM_TARGET_ERASE_NUM
,
SECTOR_14_START_ADDR
,
0x0801E7FFUL
,
EEPROM_BLOCK0_BUFFER_SIZE
,
g_u32EEPROMBlock0Buffer
,},
{
EEPROM_TARGET_ERASE_NUM1
,
SECTOR_12_START_ADDR
,
0x0801A7FFUL
,
EEPROM_BLOCK0_BUFFER_SIZE
,
g_u32EEPROMBlock0Buffer
,},
};
/****************************************************************************
...
...
@@ -61,9 +25,10 @@ static const EEPROM_Block_st_t g_stEEPROMBlockTable[] =
EEPROM_Block_Access_st_t
g_stEEPROMBlockAccess
[
EEPROM_TOTAL_BLOCK_NUM
];
void
EEPROM_Init
(
void
)
EEPROM_Init_Status_en_t
EEPROM_Init
(
void
)
{
EEPROM_Media_Access_st_t
stFlashAccessFunc
;
uint8_t
u8Result
=
0U
;
// TYW_FDL_Init();
...
...
@@ -74,10 +39,19 @@ void EEPROM_Init(void)
// Int_Data_Flash_Register_P_E_Complete_Cb(EEPROM_Mem_Access_Complete_Callback);
EEPROM_Access_Init
(
g_stEEPROMBlockTable
,
g_stEEPROMBlockAccess
,
&
stFlashAccessFunc
,
EEPROM_TOTAL_BLOCK_NUM
);
u8Result
=
EEPROM_Access_Init
(
g_stEEPROMBlockTable
,
g_stEEPROMBlockAccess
,
&
stFlashAccessFunc
,
EEPROM_TOTAL_BLOCK_NUM
);
if
(
u8Result
==
0xFFU
)
{
return
EEPROM_INIT_FAIL
;
}
else
{
return
EEPROM_INIT_SUCCESS
;
}
}
EEPROM_Status_en_t
EEPROM_Get_Status
(
void
)
...
...
PY32F072_Firmware_V1.0.5/Projects/PY32F072-STK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM.h
View file @
d0088c9d
...
...
@@ -22,6 +22,13 @@ typedef enum
EEPROM_STAT_BUSY
,
}
EEPROM_Status_en_t
;
typedef
enum
{
EEPROM_INIT_SUCCESS
=
0
,
EEPROM_INIT_FAIL
,
}
EEPROM_Init_Status_en_t
;
/****************************************************************************
* !!! The following code should be generated by configuration tool !!! *
****************************************************************************/
...
...
@@ -50,11 +57,14 @@ enum g_enEEPROMBlockName
#define EEPROM_TOTAL_BLOCK_NUM (1U)
/*创建的独立的负载均衡空间的个数*/
#define EEPROM_TARGET_ERASE_NUM 4000000U
#define EEPROM_TARGET_ERASE_NUM1 4000000U
/****************************************************************************
* !!! End of code generation !!! *
****************************************************************************/
extern
void
EEPROM_Init
(
void
);
extern
EEPROM_Init_Status_en_t
EEPROM_Init
(
void
);
extern
EEPROM_Status_en_t
EEPROM_Get_Status
(
void
);
extern
EEPROM_Block_Status_en_t
EEPROM_Get_Block_Status
(
uint16_t
u16BlockID
);
...
...
PY32F072_Firmware_V1.0.5/Projects/PY32F072-STK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM_Access.c
View file @
d0088c9d
...
...
@@ -192,15 +192,13 @@ EEPROM_Mem_Blank_Chk_Func_ptr_t g_pfnEEPROMMemBlankCheck;
EEPROM_Mem_Read_Func_ptr_t
g_pfnEEPROMMemRead
;
EEPROM_Mem_Write_Func_ptr_t
g_pfnEEPROMMemWrite
;
void
EEPROM_Access_Init
(
const
EEPROM_Block_st_t
*
pstBlockTable
,
uint8_t
EEPROM_Access_Init
(
const
EEPROM_Block_st_t
*
pstBlockTable
,
EEPROM_Block_Access_st_t
*
pstBlockAccess
,
EEPROM_Media_Access_st_t
*
pstMediaAccess
,
uint16_t
u16BlockNum
)
{
uint16_t
i
;
uint8_t
u8Loop
;
uint8_t
u8Ready
;
uint16_t
u16Index
;
uint16_t
u16IndexBkup
;
uint16_t
u16RecordNum
;
...
...
@@ -210,12 +208,40 @@ void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
uint32_t
u32DataAddr
;
uint32_t
u32DataAddrBase
;
uint32_t
u32DataAddrEnd
;
uint32_t
u32DataSpaceSize
=
0U
;
uint32_t
u32GivenSpaceSize
=
0U
;
uint32_t
u32LostAccuracy
=
0U
;
EEPROM_Ctrl_Data_un_t
unCtrlData
;
if
((
pstBlockTable
!=
NULL
)
&&
(
pstBlockAccess
!=
NULL
)
&&
\
(
pstMediaAccess
!=
NULL
)
&&
(
u16BlockNum
!=
0U
))
{
/*** Step 0 : 通过传入的使用次数计算使用的flash空间大小,是否会超限 */
for
(
i
=
0U
;
i
<
u16BlockNum
;
i
++
)
{
u32LostAccuracy
=
0U
;
u32LostAccuracy
=
pstBlockTable
[
i
].
u32UsageTimes
%
MAX_ERASE_FREQUENCY
;
/*计算空间时丢失的精度*/
if
(
u32LostAccuracy
!=
0U
)
{
/*增加1个存储块的空间*/
u32LostAccuracy
=
1U
;
}
u32DataSpaceSize
+=
(((
pstBlockTable
[
i
].
u32UsageTimes
/
MAX_ERASE_FREQUENCY
)
+
u32LostAccuracy
)
*
ONE_PAGE_LEN
);
u32GivenSpaceSize
+=
(
pstBlockTable
[
i
].
u32EndAddr
-
pstBlockTable
[
i
].
u32StartAddr
+
1U
);
}
printf
(
"u32DataSpaceSize wei : %x
\n\r
"
,
u32DataSpaceSize
);
printf
(
"u32GivenSpaceSize wei : %x
\n\r
"
,
u32GivenSpaceSize
);
if
(
u32DataSpaceSize
>
u32GivenSpaceSize
)
{
printf
(
"kong jian bu zu!
\n\r
"
);
return
0xFFU
;
}
/*** Step 1 : Setup media(data flash) access functions ***/
g_pfnEEPROMMemErase
=
pstMediaAccess
->
pfnMemErase
;
g_pfnEEPROMMemBlankCheck
=
pstMediaAccess
->
pfnMemBlankChk
;
...
...
@@ -224,7 +250,7 @@ void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
/*** Step 2 : Generate flash read / write control data ***/
g_stEEPROMAccess
.
u8State
=
EEPROM_WR_STATE_IDLE
;
g_stEEPROMAccess
.
u16BlockNum
=
u16BlockNum
;
/*可以操作的E方的区域
(这个项目是9个,对应g_stEEPROMBlockTable这个数组)
*/
g_stEEPROMAccess
.
u16BlockNum
=
u16BlockNum
;
/*可以操作的E方的区域
,可以按项目将flash划分为多个磨损空间,每个空间存储擦写次数相近的数据
*/
g_pstEEPROMBlock
=
pstBlockAccess
;
...
...
@@ -276,7 +302,6 @@ void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
}
u16RecordNum
=
0U
;
u8Ready
=
0U
;
while
(
u8Loop
)
{
...
...
@@ -287,7 +312,6 @@ void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
if
(
unCtrlData
.
stField
.
u16Index
+
unCtrlData
.
stField
.
u16IndexInv
==
0xFFFFU
)
{
u8Loop
=
0U
;
u8Ready
=
1U
;
g_pstEEPROMBlock
[
i
].
u8Status
=
EEPROM_BLOCK_ACTIVE
;
g_pstEEPROMBlock
[
i
].
u8SectorOffset
=
0U
;
...
...
@@ -443,6 +467,11 @@ void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
}
while
(
u8Loop
);
}
}
return
0
;
}
else
{
return
0xFFU
;
}
}
...
...
PY32F072_Firmware_V1.0.5/Projects/PY32F072-STK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Emulated_EEPROM_Access.h
View file @
d0088c9d
...
...
@@ -5,9 +5,11 @@
#include <stdint.h>
#define ONE_PAGE_LEN 0x100U
#define MAX_ERASE_FREQUENCY 100000U
typedef
struct
{
uint32_t
u32UsageTimes
;
uint32_t
u32StartAddr
;
uint32_t
u32EndAddr
;
uint32_t
u32DataSize
;
...
...
@@ -47,7 +49,7 @@ typedef struct
#define EEPROM_BLOCK_CTRL_BYTE_SIZE (8U)
extern
void
EEPROM_Access_Init
(
const
EEPROM_Block_st_t
*
pstBlockTable
,
extern
uint8_t
EEPROM_Access_Init
(
const
EEPROM_Block_st_t
*
pstBlockTable
,
EEPROM_Block_Access_st_t
*
pstBlockAccess
,
EEPROM_Media_Access_st_t
*
pstMediaAccess
,
uint16_t
u16BlockNum
);
...
...
PY32F072_Firmware_V1.0.5/Projects/PY32F072-STK/Example/FLASH/FLASH_PageEraseAndWrite/Src/Flash_test.h
View file @
d0088c9d
...
...
@@ -7,22 +7,22 @@
#define FLASH_DATA_LEN 32
#define SECTOR_0_START_ADDR 0x08000000
#define SECTOR_1_START_ADDR 0x08002000
#define SECTOR_2_START_ADDR 0x08004000
#define SECTOR_3_START_ADDR 0x08006000
#define SECTOR_4_START_ADDR 0x08008000
#define SECTOR_5_START_ADDR 0x0800A000
#define SECTOR_6_START_ADDR 0x0800C000
#define SECTOR_7_START_ADDR 0x0800E000
#define SECTOR_8_START_ADDR 0x08010000
#define SECTOR_9_START_ADDR 0x08012000
#define SECTOR_10_START_ADDR 0x08014000
#define SECTOR_11_START_ADDR 0x08016000
#define SECTOR_12_START_ADDR 0x08018000
#define SECTOR_13_START_ADDR 0x0801A000
#define SECTOR_14_START_ADDR 0x0801C000
#define SECTOR_15_START_ADDR 0x0801E000
#define SECTOR_0_START_ADDR 0x08000000
UL
#define SECTOR_1_START_ADDR 0x08002000
UL
#define SECTOR_2_START_ADDR 0x08004000
UL
#define SECTOR_3_START_ADDR 0x08006000
UL
#define SECTOR_4_START_ADDR 0x08008000
UL
#define SECTOR_5_START_ADDR 0x0800A000
UL
#define SECTOR_6_START_ADDR 0x0800C000
UL
#define SECTOR_7_START_ADDR 0x0800E000
UL
#define SECTOR_8_START_ADDR 0x08010000
UL
#define SECTOR_9_START_ADDR 0x08012000
UL
#define SECTOR_10_START_ADDR 0x08014000
UL
#define SECTOR_11_START_ADDR 0x08016000
UL
#define SECTOR_12_START_ADDR 0x08018000
UL
#define SECTOR_13_START_ADDR 0x0801A000
UL
#define SECTOR_14_START_ADDR 0x0801C000
UL
#define SECTOR_15_START_ADDR 0x0801E000
UL
typedef
struct
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment