实现大部分小板通信命令

This commit is contained in:
ranchuan
2023-10-07 18:15:52 +08:00
parent 8e3a140bec
commit ffb4ff97b2
21 changed files with 1000 additions and 173 deletions

View File

@@ -41,6 +41,8 @@ scheme 109~110
#define FLASH_PARAM_SECTOR_NUM (1)
#define FLASH_SCHEME_SECTOR (109)
#define FLASH_SCHEME_SECTOR_NUM (3)
#define FLASH_JWTCODE_SECTOR (112)
#define FLASH_JWTCODE_SECTOR_NUM (9)
@@ -78,7 +80,7 @@ typedef struct{
// 擦除指定扇区返回0成功-1失败
static int flash_erase(uint32_t FLASH_Sector)
static int flash_erase(uint32_t sector)
{
self_def *s=&g_self;
FLASH_Status ret;
@@ -89,7 +91,7 @@ static int flash_erase(uint32_t FLASH_Sector)
FLASH_Unlock();
FLASH_CLEAR_FLAG();
// 对于f103 2048byte为一个扇区这里把扇区地址转化为flash地址
ret=FLASH_ErasePage(FLASH_Sector*2048);
ret=FLASH_ErasePage(sector*2048);
rt_mutex_release(s->mutex);
if(ret!=FLASH_COMPLETE)
{
@@ -102,6 +104,24 @@ static int flash_erase(uint32_t FLASH_Sector)
}
// 操作开始
int flash_operate_start(void)
{
FLASH_Status state;
int ret=0;
self_def *s=&g_self;
#ifdef RT_THREAD
param_check(s->mutex);
#endif
rt_mutex_take(s->mutex,RT_WAITING_FOREVER);
FLASH_Unlock();
FLASH_CLEAR_FLAG();
rt_mutex_release(s->mutex);
return 0;
}
// 操作结束
int flash_operate_end(void)
{
@@ -159,7 +179,7 @@ int flash_erase_slave(void)
}
return 0;
}
//方案区 4K
//方案区 6K
int flash_erase_scheme(void)
{
int ret;
@@ -176,6 +196,17 @@ int flash_erase_lua(void)
return -1;
}
// 模块程序区 16K
int flash_erase_jwtcode(void)
{
int ret;
for(int i=0;i<FLASH_JWTCODE_SECTOR_NUM;i++){
ret=flash_erase(FLASH_JWTCODE_SECTOR+i);
if(ret!=0) return -1;
}
return 0;
}
uint32_t *flash_get_param(void)
{
@@ -201,6 +232,10 @@ uint32_t *flash_get_scheme(void)
{
return (void *)(FLASH_BASE+FLASH_SECTOR_SIZE*FLASH_SCHEME_SECTOR);
}
uint32_t *flash_get_jwtcode(void)
{
return (void *)(FLASH_BASE+FLASH_SECTOR_SIZE*FLASH_JWTCODE_SECTOR);
}
uint32_t *flash_get_lua(void)
{
@@ -252,6 +287,24 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len)
}
// 写数据自动擦除
int flash_write_with_erase(uint8_t *addr,const uint8_t *data,int len)
{
int ret=0;
uint32_t addr_u32=(uint32_t)addr;
if((addr_u32%FLASH_SECTOR_SIZE)==0){
ret=flash_erase(addr_u32/FLASH_SECTOR_SIZE);
flash_operate_end();
if(ret!=0) return -1;
}else{
flash_operate_start();
}
ret=flash_write(addr,data,len);
flash_operate_end();
if(ret!=0) return -1;
return 0;
}
uint8_t *flash_get_rom(rom_head **head)

View File

@@ -23,14 +23,18 @@ int flash_erase_app2(void);
int flash_erase_slave(void);
int flash_erase_scheme(void);
int flash_erase_lua(void);
int flash_erase_jwtcode(void);
uint32_t *flash_get_param(void);
//uint32_t *flash_get_app1(void);
uint32_t *flash_get_app2(void);
uint32_t *flash_get_slave(void);
uint32_t *flash_get_scheme(void);
uint32_t *flash_get_lua(void);
uint32_t *flash_get_jwtcode(void);
int flash_write(uint8_t *addr,const uint8_t *data,int len);
int flash_operate_end(void);
int flash_write_with_erase(uint8_t *addr,const uint8_t *data,int len);