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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
}
@@ -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
}
@@ -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;
}
@@ -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);
@@ -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)
@@ -75,11 +75,12 @@ 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;
uint32_t pageNum = (imageSize%FLASH_PAGE_FAST_SIZE != 0)? (imageSize/FLASH_PAGE_FAST_SIZE + 1):(imageSize/FLASH_PAGE_FAST_SIZE);
KPrintf("Flash_Erase start_addr=%08x imageSize=0x%x\n", start_addr, imageSize);
FLASH_Unlock_Fast();
for(page_count = 0; page_count < pageNum; 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内容