diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/flash.c b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/flash.c index b10baee6b..a1d77d816 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/flash.c +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/flash.c @@ -507,7 +507,7 @@ static status_t flexspi_config_mcr1(uint32_t instance, flexspi_mem_config_t *con // Configure MCR1 FLEXSPI->MCR1 = FLEXSPI_MCR1_SEQWAIT(seqWaitTicks) | FLEXSPI_MCR1_AHBBUSWAIT(ahbBusWaitTicks); - return kStatus_Success; + return (status_t)kStatus_Success; } @@ -647,14 +647,14 @@ uint8_t FLASH_WritePage(uint32_t addr, const uint32_t *buf, uint32_t len) /******************************************************************************* -* 函 数 名: FLASH_Read +* 函 数 名: FLASH_ReadBuf * 功能描述: 读Flash内容 * 形 参: addr:读取区域起始地址 buf:数据存储区 len:要读取的字节数 * 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 *******************************************************************************/ -status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len) +status_t FLASH_ReadBuf(uint32_t addr, uint32_t *buf, uint32_t len) { status_t status; flexspi_xfer_t flashXfer; @@ -678,206 +678,28 @@ status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len) } -/******************************************************************************* -* 函 数 名: flash_erase -* 功能描述: 擦除Flash指定长度的空间 -* 形 参: addr:擦除区域起始地址 - byte_cnt:要擦除的字节数,以4k字节为最小擦除单位 -* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 -* 注 释: 不满4k字节的,也需要擦除掉4k字节 -*******************************************************************************/ -status_t flash_erase(uint32_t start_addr, uint32_t byte_cnt) -{ - uint32_t addr; - status_t status; - - addr = start_addr; - while(addr < (byte_cnt + start_addr)) - { - status = FLASH_EraseSector(addr); - if(status != kStatus_Success) - { - return status; - } - addr += FLASH_GetSectorSize(); - } - return status; -} - - -/******************************************************************************* -* 函 数 名: flash_write -* 功能描述: 在指定的flash起始地址写入指定长度的数据 -* 形 参: addr:写入区域起始地址 - buf:数据存储区 - byte_cnt:要写入的字节数 -* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 -*******************************************************************************/ -status_t flash_write(uint32_t start_addr, uint8_t *buf, uint32_t byte_cnt) -{ - uint32_t size; - status_t status; - while(byte_cnt > 0) - { - size = byte_cnt > FLASH_PAGE_SIZE ? FLASH_PAGE_SIZE : byte_cnt; - status = FLASH_WritePage(start_addr, (void *)buf, size); - if(status != kStatus_Success) - { - return status; - } - start_addr += size; - buf += size; - byte_cnt -= size; - } - - return kStatus_Success; -} - - -/******************************************************************************* -* 函 数 名: flash_read -* 功能描述: 读Flash内容 -* 形 参: addr:读取区域起始地址 - buf:数据存储区 - len:要读取的字节数 -* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 -*******************************************************************************/ -status_t flash_read(uint32_t addr, uint8_t *buf, uint32_t len) -{ - /* For FlexSPI Memory ReadBack, use IP Command instead of AXI command for security */ - if((addr >= 0x60000000) && (addr < 0x61000000)) - { - return FLASH_Read(addr, (void *)buf, len); - } - - else - { - void* result = memcpy(buf, (void*)addr, len); - if(result == NULL) - { - return (status_t)kStatus_Fail; - } - else - { - return (status_t)kStatus_Success; - } - - } -} - - -/******************************************************************************* -* 函 数 名: flash_copy -* 功能描述: 实现flash数据在分区之间的拷贝 -* 形 参: srcAddr:源flash的起始地址 - dstAddr:目标flash的起始地址; - imageSize:要拷贝的flash空间大小,单位为字节 -* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 -*******************************************************************************/ -status_t flash_copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize) -{ - uint32_t PageNum, Remain, i; - status_t status; - - if((srcAddr == dstAddr) || imageSize > APP_FLASH_SIZE) - { - return (status_t)kStatus_Fail; - } - - status = flash_erase(dstAddr,imageSize); - if(status != kStatus_Success) - { - KPrintf("Erase flash 0x%08x failure !\r\n",dstAddr); - return status; - } - - PageNum = imageSize/FLASH_PAGE_SIZE; - Remain = imageSize%FLASH_PAGE_SIZE; - - for(i=0;i= 0x60000000) && (addr < 0x61000000)) + { + return FLASH_ReadBuf(addr, (void *)buf, len); + } + + else + { + void* result = memcpy(buf, (void*)addr, len); + if(result == NULL) + { + return (status_t)kStatus_Fail; + } + else + { + return (status_t)kStatus_Success; + } + + } +} + + +/******************************************************************************* +* 函 数 名: Flash_Copy +* 功能描述: 实现flash数据在分区之间的拷贝 +* 形 参: srcAddr:源flash的起始地址 + dstAddr:目标flash的起始地址; + imageSize:要拷贝的flash空间大小,单位为字节 +* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success,否则状态值为其他错误码 +*******************************************************************************/ +status_t Flash_Copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize) +{ + uint32_t PageNum, Remain, i; + status_t status; + + if((srcAddr == dstAddr) || imageSize > APP_FLASH_SIZE) + { + return (status_t)kStatus_Fail; + } + + status = Flash_Erase(dstAddr,imageSize); + if(status != kStatus_Success) + { + KPrintf("Erase flash 0x%08x failure !\r\n",dstAddr); + return status; + } + + PageNum = imageSize/FLASH_PAGE_SIZE; + Remain = imageSize%FLASH_PAGE_SIZE; + + for(i=0;i=SECTOR_SIZE) { - NorFlash_Write(dataBuff,WriteAddr,dataLen); + status = Flash_Write(WriteAddr,dataBuff,dataLen); + if (status != kStatus_Success) + { + return status; + } packetNum = 0; dataLen = 0; } @@ -1050,10 +1032,14 @@ uint32_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLen } else { - NorFlash_Write(dataBuff,WriteAddr,dataLen); + status = Flash_Write(WriteAddr,dataBuff,dataLen); + if (status != kStatus_Success) + { + return status; + } packetNum = 0; dataLen = 0; } - return (0); + return (status_t)kStatus_Success;; } #endif diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/ymodem.c b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/ymodem.c index 661f6e81c..f443f60a8 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/ymodem.c +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/common/ymodem.c @@ -280,7 +280,7 @@ int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr) } /* erase user application area */ - NOR_FLASH_Erase(addr,size); + Flash_Erase(addr,size); Send_Byte(ACK); Send_Byte(CRC16); } @@ -300,9 +300,9 @@ int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr) /* Write received data in Flash */ #ifndef USE_HIGHT_SPEED_TRANS - if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t)packet_length) == 0) + if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t)packet_length) == kStatus_Success) #else - if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t)packet_length, 0) == 0) + if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t)packet_length, 0) == kStatus_Success) #endif { Send_Byte(ACK); @@ -349,7 +349,10 @@ int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr) } } #ifdef USE_HIGHT_SPEED_TRANS - NOR_FLASH_Write(&flashdestination, buf, (uint16_t) packet_length,1); + if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t) packet_length,1) != kStatus_Success) + { + return -4; + } #endif return (int32_t)size; } diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/include/flash.h b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/include/flash.h index fd59738cb..a71feeceb 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/include/flash.h +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/third_party_driver/include/flash.h @@ -63,21 +63,19 @@ void FLASH_Init(void); void FLASH_DeInit(void); uint8_t FLASH_EraseSector(uint32_t addr); uint8_t FLASH_WritePage(uint32_t addr, const uint32_t *buf, uint32_t len); -status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len); -status_t flash_erase(uint32_t start_addr, uint32_t byte_cnt); -status_t flash_write(uint32_t start_addr, uint8_t *buf, uint32_t byte_cnt); -status_t flash_read(uint32_t addr, uint8_t *buf, uint32_t len); -status_t flash_copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize); +status_t FLASH_ReadBuf(uint32_t addr, uint32_t *buf, uint32_t len); +status_t NorFlash_Write_PageProgram(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); +status_t NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); -status_t NOR_FLASH_Erase(uint32_t app_base_addr,uint32_t imageSize); -void NorFlash_Write_PageProgram(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); -void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); -void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); +status_t Flash_Erase(uint32_t start_addr, uint32_t imageSize); +status_t Flash_Write(uint32_t WriteAddr, uint8_t *pBuffer, uint32_t NumByteToWrite); +status_t Flash_Read(uint32_t addr, uint8_t *buf, uint32_t len); +status_t Flash_Copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize); #ifndef USE_HIGHT_SPEED_TRANS -uint32_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLength); +status_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLength); #else -uint32_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLength,uint8_t doneFlag); +status_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLength,uint8_t doneFlag); #endif #endif diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/flash/flash_ops.h b/Ubiquitous/XiZi_IIoT/tool/bootloader/flash/flash_ops.h index b0ff530f0..e75abcd2e 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/flash/flash_ops.h +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/flash/flash_ops.h @@ -30,8 +30,8 @@ typedef struct void (*flash_deinit)(void); /* flash operation */ - status_t (*op_flash_erase)(uint32_t start_addr, uint32_t byte_cnt); - status_t (*op_flash_write)(uint32_t start_addr, uint8_t *buf, uint32_t byte_cnt); + status_t (*op_flash_erase)(uint32_t start_addr, uint32_t imageSize); + status_t (*op_flash_write)(uint32_t WriteAddr, uint8_t *pBuffer, uint32_t NumByteToWrite); status_t (*op_flash_read)(uint32_t addr, uint8_t *buf, uint32_t len); status_t (*op_flash_copy)(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize); diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c index 9bf31420b..28f412d93 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c @@ -39,11 +39,6 @@ static void BackupVersion(void); static void BootLoaderJumpApp(void); static status_t UpdateOTAFlag(ota_info_t *ptr); -#ifdef MCUBOOT_APPLICATION -static void app_ota(void); -#endif - - /**************************************************************************** * Private Data ****************************************************************************/ @@ -54,10 +49,10 @@ static const mcuboot_t mcuboot = Serial_PutString, FLASH_Init, FLASH_DeInit, - flash_erase, - flash_write, - flash_read, - flash_copy, + Flash_Erase, + Flash_Write, + Flash_Read, + Flash_Copy, SerialDownload, mcuboot_reset, mcuboot_jump,