Use different flash functions in the non-zero wait area and the zero wait area.

This commit is contained in:
songyanguang 2025-05-14 16:11:31 +08:00
parent 33523335e2
commit 77ef32cbb9
12 changed files with 72 additions and 38 deletions

View File

@ -22,6 +22,7 @@ CONFIG_BSP_USING_LTE=y
CONFIG_LTE_BUS_NAME="lte"
CONFIG_LTE_DRV_NAME="lte_drv"
CONFIG_LTE_DEVICE_NAME_1="lte_dev1"
# CONFIG_LTE_TEST is not set
#
# Hardware feature
@ -193,14 +194,15 @@ CONFIG_TOOL_USING_OTA=y
CONFIG_MCUBOOT_APPLICATION=y
CONFIG_OTA_BY_PLATFORM=y
# CONFIG_OTA_BY_TCPSERVER is not set
# CONFIG_OTA_BY_NONE is not set
#
# Flash area address and size configuration.
#
CONFIG_CHIP_FLAH_BASE=0x08000000
CONFIG_XIUOS_FLAH_ADDRESS=0x0801c000
CONFIG_BAKUP_FLAH_ADDRESS=0x0801c000
CONFIG_DOWN_FLAH_ADDRESS=0x0801c000
CONFIG_XIUOS_FLAH_ADDRESS=0x08030000
CONFIG_BAKUP_FLAH_ADDRESS=0x08030000
CONFIG_DOWN_FLAH_ADDRESS=0x08030000
CONFIG_FLAG_FLAH_ADDRESS=0x08077000
CONFIG_APP_FLASH_SIZE=0x00100000
CONFIG_OTA_RX_TIMEOUT=600
@ -219,7 +221,7 @@ CONFIG_ADD_XIZI_FEATURES=y
# CONFIG_ADD_RTTHREAD_FEATURES is not set
# CONFIG_SUPPORT_SENSOR_FRAMEWORK is not set
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
# CONFIG_CONNECTION_FRAMEWORK_DEBUG is not set
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
# CONFIG_CONNECTION_INDUSTRIAL_NETWORK is not set
# CONFIG_CONNECTION_INDUSTRIAL_FIELDBUS is not set
# CONFIG_CONNECTION_INDUSTRIAL_WLAN is not set

View File

@ -22,6 +22,7 @@ CONFIG_BSP_USING_LTE=y
CONFIG_LTE_BUS_NAME="lte"
CONFIG_LTE_DRV_NAME="lte_drv"
CONFIG_LTE_DEVICE_NAME_1="lte_dev1"
# CONFIG_LTE_TEST is not set
#
# Hardware feature
@ -198,9 +199,9 @@ CONFIG_OTA_BY_PLATFORM=y
# Flash area address and size configuration.
#
CONFIG_CHIP_FLAH_BASE=0x08000000
CONFIG_XIUOS_FLAH_ADDRESS=0x0801c000
CONFIG_BAKUP_FLAH_ADDRESS=0x0801c000
CONFIG_DOWN_FLAH_ADDRESS=0x0801c000
CONFIG_XIUOS_FLAH_ADDRESS=0x08030000
CONFIG_BAKUP_FLAH_ADDRESS=0x08030000
CONFIG_DOWN_FLAH_ADDRESS=0x08030000
CONFIG_FLAG_FLAH_ADDRESS=0x08077000
CONFIG_APP_FLASH_SIZE=0x00100000
CONFIG_OTA_RX_TIMEOUT=600

View File

@ -169,16 +169,17 @@ CONFIG_FS_VFS_DEVFS=y
CONFIG_TOOL_USING_OTA=y
CONFIG_MCUBOOT_BOOTLOADER=y
# CONFIG_MCUBOOT_APPLICATION is not set
# CONFIG_OTA_BY_PLATFORM is not set
CONFIG_OTA_BY_PLATFORM=y
# CONFIG_OTA_BY_TCPSERVER is not set
# CONFIG_OTA_BY_NONE is not set
#
# Flash area address and size configuration.
#
CONFIG_CHIP_FLAH_BASE=0x08000000
CONFIG_XIUOS_FLAH_ADDRESS=0x0801c000
CONFIG_BAKUP_FLAH_ADDRESS=0x0801c000
CONFIG_DOWN_FLAH_ADDRESS=0x0801c000
CONFIG_XIUOS_FLAH_ADDRESS=0x08030000
CONFIG_BAKUP_FLAH_ADDRESS=0x08030000
CONFIG_DOWN_FLAH_ADDRESS=0x08030000
CONFIG_FLAG_FLAH_ADDRESS=0x08077000
CONFIG_APP_FLASH_SIZE=0x00100000
CONFIG_OTA_RX_TIMEOUT=600

View File

@ -72,12 +72,14 @@ void readRomConfiguration(void) {
extern pmodule_cfg CFG; // 指向配置信息的指针
/* 从EEPROM中读取网络配置信息 */
KPrintf("%s PAGE_WRITE_START_ADDR=%08x\n", __func__, PAGE_WRITE_START_ADDR);
KPrintf("%s PAGE_READ_START_ADDR=%08x\n", __func__, PAGE_WRITE_START_ADDR);
CFG_READ(PAGE_WRITE_START_ADDR, Configbuf, MODULE_CFG_LEN);
/* 如果存储在EEPROM中的网络配置信息无效或者WCHNET还没有被主机配置过通过默认配置信息初始化WCHNET */
if ((CFG->cfgFlag[0] != checkcode1) || (CFG->cfgFlag[1] != checkcode2)) {
KPrintf("%s PAGE_ERASE_START_ADDR=%08x\n", __func__, PAGE_WRITE_START_ADDR);
CFG_ERASE(PAGE_WRITE_START_ADDR, FLASH_PAGE_SIZE);
KPrintf("%s PAGE_WRITE_START_ADDR=%08x\n", __func__, PAGE_WRITE_START_ADDR);
CFG_WRITE(PAGE_WRITE_START_ADDR, (u8 *)&defaultConfiguration, MODULE_CFG_LEN);
KPrintf("%s NVIC_SystemReset\n\n", __func__);
NVIC_SystemReset(); // 复位ch32v208

View File

@ -27,7 +27,7 @@ MEMORY
FLASH-160K + RAM-32K
*/
/*FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 448K*/
FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 412K
FLASH (rx) : ORIGIN = 0x00030000, LENGTH = 284K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
}

View File

@ -26,7 +26,8 @@ MEMORY
FLASH-144K + RAM-48K
FLASH-160K + RAM-32K
*/
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
/*FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K*/
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 192K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
}

View File

@ -21,6 +21,7 @@
#include "ymodem.h"
#include "string.h"
#include "flash_for_ota.h"
#include "boot_for_ota.h"
uint8_t tab_1024[1024] ={0};
uint8_t FileName[FILE_NAME_LENGTH];
@ -49,6 +50,6 @@ int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr)
*******************************************************************************/
int32_t SerialDownload(const uint32_t addr)
{
int32_t Size = 0;
int32_t Size = IMAGE_IAP_SIZE;
return Size;
}

View File

@ -22,7 +22,7 @@
#define __BOOT_FOR_OTA_H__
#define IMAGE_IAP_START_ADD 0x08000000
#define IMAGE_IAP_SIZE (64 * 1024)
#define IMAGE_IAP_SIZE (192 * 1024)
#define IMAGE_A_START_ADD (IMAGE_IAP_START_ADD + IMAGE_IAP_SIZE)
void mcuboot_bord_init(void);

View File

@ -102,27 +102,14 @@ void mcuboot_bord_init(void)
void mcuboot_reset(void)
{
/*
__set_FAULTMASK(1);
NVIC_SystemReset();*/
KPrintf("%s NVIC_SystemReset\n\n", __func__);
NVIC_SystemReset();
}
void mcuboot_jump(void)
{
KPrintf("boot jumpApp\n\n");
KPrintf("%s jumpApp\n\n", __func__);
jumpApp();
/*
uint32_t addr = XIUOS_FLAH_ADDRESS;
SCB->VTOR = addr;
asm volatile("LDR R0, %0" : : "m"(addr));
asm volatile("LDR R0, [R0]");
asm volatile("MOV SP, R0");
addr += 4;
asm volatile("LDR R0, %0" : : "m"(addr));
asm volatile("LDR R0, [R0]");
asm volatile("BX R0");*/
}
void mcuboot_delay(uint32_t ms)

View File

@ -75,6 +75,7 @@ void FLASH_DeInit(void)
imageSize:
* : , kStatus_Success,
*******************************************************************************/
#ifdef MCUBOOT_BOOTLOADER
status_t Flash_Erase(uint32_t start_addr, uint32_t imageSize)
{
uint32_t page_count;
@ -91,7 +92,25 @@ status_t Flash_Erase(uint32_t start_addr, uint32_t imageSize)
return (status_t)kStatus_Success;
}
#else
status_t Flash_Erase(uint32_t start_addr, uint32_t imageSize)
{
/*
uint32_t page_count;
uint32_t pageNum = (imageSize%FLASH_BLOCK_SIZE != 0)? (imageSize/FLASH_BLOCK_SIZE + 1):(imageSize/FLASH_BLOCK_SIZE);
KPrintf("Flash_Erase start_addr=%08x pageNum=0x%x\n", start_addr, imageSize);
FLASH_Unlock();
for(page_count = 0; page_count < pageNum; page_count++)
{
FLASH_ErasePage(start_addr + (page_count * FLASH_BLOCK_SIZE));
}
FLASH_Lock();
KPrintf("Flash_Erase start_addr=%08x success\n", start_addr);
*/
return (status_t)kStatus_Success;
}
#endif
/*******************************************************************************
* : Flash_Write
* : W25QXX在指定地址开始写入指定长度的数据
@ -101,12 +120,13 @@ status_t Flash_Erase(uint32_t start_addr, uint32_t imageSize)
* : , kStatus_Success,
* :
*******************************************************************************/
#ifdef MCUBOOT_BOOTLOADER
status_t Flash_Write(uint32_t WriteAddr, uint8_t *pBuffer, uint32_t NumByteToWrite)
{
uint32_t page_count;
uint32_t pageNum = (NumByteToWrite%FLASH_PAGE_FAST_SIZE != 0)? (NumByteToWrite/FLASH_PAGE_FAST_SIZE + 1):(NumByteToWrite/FLASH_PAGE_FAST_SIZE);
KPrintf("Flash_Write start_addr=%08x pBuffer=%p imageSize=0x%x\n", WriteAddr, pBuffer, NumByteToWrite);
KPrintf("Flash_Write start_addr=%08x pBuffer=%p NumByteToWrite=0x%x\n", WriteAddr, pBuffer, NumByteToWrite);
FLASH_Unlock_Fast();
for(page_count = 0; page_count < pageNum; page_count++)
{
@ -116,9 +136,24 @@ status_t Flash_Write(uint32_t WriteAddr, uint8_t *pBuffer, uint32_t NumByteToWri
KPrintf("Flash_Write start_addr=%08x success\n", WriteAddr);
return (status_t)kStatus_Success;
}
#else
status_t Flash_Write(uint32_t WriteAddr, uint8_t *pBuffer, uint32_t NumByteToWrite)
{
uint32_t addr;
uint32_t *p_buff = (uint32_t *)pBuffer;
KPrintf("Flash_Write start_addr=%08x pBuffer=%p NumByteToWrite=0x%x\n", WriteAddr, pBuffer, NumByteToWrite);
FLASH_Unlock();
for (addr = WriteAddr; addr < WriteAddr + NumByteToWrite; addr += 4, p_buff++) {
FLASH_ProgramWord(addr, *p_buff);
}
FLASH_Lock();
KPrintf("Flash_Write start_addr=%08x success\n", WriteAddr);
return (status_t)kStatus_Success;
}
#endif
/*******************************************************************************
* : Flash_Read
* : Flash内容

View File

@ -256,8 +256,10 @@ KPrintf("%s %d\n", __func__, __LINE__);
#endif
KPrintf("%s %d\n", __func__, __LINE__);
#ifdef TOOL_SHELL
extern long ShowTask(void);
ShowTask();
#endif
StartupOsAssign();
return 0;
}

View File

@ -16,7 +16,7 @@ menu "OTA function"
bool "Config as application."
endchoice
if MCUBOOT_APPLICATION
#if MCUBOOT_APPLICATION
choice
prompt "The way of OTA firmware upgrade."
default OTA_BY_PLATFORM
@ -29,9 +29,11 @@ menu "OTA function"
bool "Through the public network TCP server."
select SUPPORT_CONNECTION_FRAMEWORK
select CONNECTION_ADAPTER_4G
endchoice
endif
config OTA_BY_NONE
bool "Not download firmware."
endchoice
#endif
menu "Flash area address and size configuration."
config CHIP_FLAH_BASE