Add function comments for flash related functions
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
#include "flash.h"
|
||||
#include "MIMXRT1052.h"
|
||||
|
||||
uint8_t NorFlash_BUFFER[4096]; //4K buffer cache
|
||||
uint8_t NorFlash_BUFFER[4096]; //4K buffer cache
|
||||
uint8_t buffer[FLASH_PAGE_SIZE]; //256 bytes buffer cache
|
||||
/*******************************************************************************
|
||||
* Prototypes
|
||||
@@ -26,8 +26,8 @@ uint8_t buffer[FLASH_PAGE_SIZE]; //256 bytes buffer cache
|
||||
static status_t Flexspi_Nor_Wait_Busy(uint32_t instance, uint32_t baseAddr);
|
||||
static status_t Flexspi_Nor_Write_Enable(uint32_t instance, uint32_t baseAddr);
|
||||
static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t sampleClkMode);
|
||||
static void flexspi_clock_gate_enable(uint32_t instance);
|
||||
static void flexspi_clock_gate_disable(uint32_t instance);
|
||||
static void flexspi_clock_gate_enable(void);
|
||||
static void flexspi_clock_gate_disable(void);
|
||||
static status_t flexspi_get_clock(uint32_t instance, flexspi_clock_type_t type, uint32_t *freq);
|
||||
static status_t flexspi_get_ticks(uint32_t *ticks, uint32_t intervalNs, uint32_t freq, uint32_t unit);
|
||||
static status_t flexspi_configure_dll(uint32_t instance, flexspi_mem_config_t *config);
|
||||
@@ -57,6 +57,13 @@ static const lookuptable_t FlashLookupTable={
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: Flexspi_Nor_Wait_Busy
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>ȴ<EFBFBD>FlexSPI NOR Flashæµ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: instance:FlexSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
baseAddr:<3A><>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1>Flash<73><68>ַ(32bit)
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t Flexspi_Nor_Wait_Busy(uint32_t instance, uint32_t baseAddr)
|
||||
{
|
||||
status_t status = kStatus_InvalidArgument;
|
||||
@@ -93,6 +100,13 @@ static status_t Flexspi_Nor_Wait_Busy(uint32_t instance, uint32_t baseAddr)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: Flexspi_Nor_Write_Enable
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ʹ<><CAB9> FlexSPI NOR Flash<73><68>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: instance:FlexSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
baseAddr:<3A><>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1>Flash<73><68>ַ(32bit)
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t Flexspi_Nor_Write_Enable(uint32_t instance, uint32_t baseAddr)
|
||||
{
|
||||
status_t status = kStatus_InvalidArgument;
|
||||
@@ -110,6 +124,14 @@ static status_t Flexspi_Nor_Write_Enable(uint32_t instance, uint32_t baseAddr)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_clock_config
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>FlexSPIģ<49><C4A3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
* <20><> <20><>: instance:FlexSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
freq:<3A><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FlexSPIʱ<49><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
sampleClkMode:ָ<><D6B8>FlexSPIʱ<49>ӵIJ<D3B5><C4B2><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ,<2C><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>SDR<44><52>DDRģʽ
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t sampleClkMode)
|
||||
{
|
||||
uint32_t pfd480 = 0;
|
||||
@@ -166,7 +188,7 @@ static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t samp
|
||||
cscmr1 |= CCM_CSCMR1_FLEXSPI_PODF(podf - 1);
|
||||
|
||||
FLEXSPI->MCR0 |= FLEXSPI_MCR0_MDIS_MASK;
|
||||
flexspi_clock_gate_disable(instance);
|
||||
flexspi_clock_gate_disable();
|
||||
|
||||
if(pfd480 != CCM_ANALOG->PFD_480)
|
||||
{
|
||||
@@ -176,7 +198,7 @@ static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t samp
|
||||
{
|
||||
CCM->CSCMR1 = cscmr1;
|
||||
}
|
||||
flexspi_clock_gate_enable(instance);
|
||||
flexspi_clock_gate_enable();
|
||||
FLEXSPI->MCR0 &= ~FLEXSPI_MCR0_MDIS_MASK;
|
||||
}
|
||||
else
|
||||
@@ -187,18 +209,38 @@ static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t samp
|
||||
}
|
||||
|
||||
|
||||
static void flexspi_clock_gate_enable(uint32_t instance)
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_clock_gate_enable
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>FlexSPIģ<49><C4A3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ſ<EFBFBD>
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
static void flexspi_clock_gate_enable(void)
|
||||
{
|
||||
CCM->CCGR6 |= CCM_CCGR6_CG5_MASK;
|
||||
}
|
||||
|
||||
|
||||
static void flexspi_clock_gate_disable(uint32_t instance)
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_clock_gate_disable
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>ر<EFBFBD>FlexSPIģ<49><C4A3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ſ<EFBFBD>
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
static void flexspi_clock_gate_disable(void)
|
||||
{
|
||||
CCM->CCGR6 &= (uint32_t)~CCM_CCGR6_CG5_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_get_clock
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡFlexSPIʱ<49><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
* <20><> <20><>: instance:FlexSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
type:<3A><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
freq:<3A><><EFBFBD>ڴ洢<DAB4><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t flexspi_get_clock(uint32_t instance, flexspi_clock_type_t type, uint32_t *freq)
|
||||
{
|
||||
uint32_t clockFrequency = 0;
|
||||
@@ -248,6 +290,15 @@ static status_t flexspi_get_clock(uint32_t instance, flexspi_clock_type_t type,
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_get_ticks
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>FlexSPIʱ<49><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: ticks:<3A><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
intervalNs:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>루ns<6E><73>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>
|
||||
freq:FlexSPIʱ<49><CAB1>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>λΪMHz<48><7A>
|
||||
unit:ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>λ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䳤<EFBFBD><E4B3A4>,<2C><>nsΪ<73><CEAA>λ
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t flexspi_get_ticks(uint32_t *ticks, uint32_t intervalNs, uint32_t freq, uint32_t unit)
|
||||
{
|
||||
status_t status = kStatus_InvalidArgument;
|
||||
@@ -278,6 +329,13 @@ static status_t flexspi_get_ticks(uint32_t *ticks, uint32_t intervalNs, uint32_t
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_configure_dll
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLEXSPI<50>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>DLL(<28>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
* <20><> <20><>: instance:FLEXSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
config:<3A>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><CAB1>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><CAB1><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t flexspi_configure_dll(uint32_t instance, flexspi_mem_config_t *config)
|
||||
{
|
||||
status_t status = kStatus_InvalidArgument;
|
||||
@@ -414,6 +472,13 @@ static status_t flexspi_configure_dll(uint32_t instance, flexspi_mem_config_t *c
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flexspi_config_mcr1
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>FlexSPIģ<49><C4A3><EFBFBD><EFBFBD>MCR1<52>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
* <20><> <20><>: instance:FLEXSPIʵ<49><CAB5><EFBFBD><EFBFBD>
|
||||
onfigָ<67><D6B8>FlexSPI<50>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
static status_t flexspi_config_mcr1(uint32_t instance, flexspi_mem_config_t *config)
|
||||
{
|
||||
uint32_t seqWaitTicks = 0xFFFFu;
|
||||
@@ -447,6 +512,12 @@ static status_t flexspi_config_mcr1(uint32_t instance, flexspi_mem_config_t *con
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_GetSectorSize
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,HYPER FLASHΪ64K<34>ֽ<EFBFBD>,NOR FLASHΪ4K<34>ֽ<EFBFBD>
|
||||
*******************************************************************************/
|
||||
uint32_t FLASH_GetSectorSize(void)
|
||||
{
|
||||
#ifndef HYPER_FLASH
|
||||
@@ -457,6 +528,12 @@ uint32_t FLASH_GetSectorSize(void)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_GetProgramCmd
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡҳ<C8A1><D2B3>С
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>С,HYPER FLASHΪ512<31>ֽ<EFBFBD>,NOR FLASHΪ256<35>ֽ<EFBFBD>
|
||||
*******************************************************************************/
|
||||
uint32_t FLASH_GetProgramCmd(void)
|
||||
{
|
||||
uint32_t Program_Unit;
|
||||
@@ -470,6 +547,12 @@ uint32_t FLASH_GetProgramCmd(void)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_Init
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Flash<73>ӿڳ<D3BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>Flash<73><68><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
void FLASH_Init(void)
|
||||
{
|
||||
/* Update LUT Table for Status, Write Enable, Erase and Program */
|
||||
@@ -483,6 +566,12 @@ void FLASH_Init(void)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_DeInit
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Flash<73>ӿڷ<D3BF><DAB7><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
void FLASH_DeInit(void)
|
||||
{
|
||||
lookuptable_t clearlut;
|
||||
@@ -493,6 +582,13 @@ void FLASH_DeInit(void)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_EraseSector
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Flash<73><68><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
* <20><> <20><> ֵ: None
|
||||
* ע <20><>: <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:30ms~200/400ms
|
||||
*******************************************************************************/
|
||||
uint8_t FLASH_EraseSector(uint32_t addr)
|
||||
{
|
||||
status_t status;
|
||||
@@ -516,6 +612,15 @@ uint8_t FLASH_EraseSector(uint32_t addr)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_WritePage
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дFlashһ<68><D2BB>ҳ
|
||||
* <20><> <20><>: addr:д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
buf:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
len:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>256)
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ע <20><>: <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
uint8_t FLASH_WritePage(uint32_t addr, const uint32_t *buf, uint32_t len)
|
||||
{
|
||||
status_t status;
|
||||
@@ -542,6 +647,14 @@ uint8_t FLASH_WritePage(uint32_t addr, const uint32_t *buf, uint32_t len)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: FLASH_Read
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>Flash<73><68><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: addr:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
buf:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
len:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len)
|
||||
{
|
||||
status_t status;
|
||||
@@ -566,6 +679,14 @@ status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flash_erase
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>Flashָ<68><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵĿռ<C4BF>
|
||||
* <20><> <20><>: addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
byte_cnt:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>,<2C><>4k<34>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
* <20><> <20><> ֵ: None
|
||||
* ע <20><>: <20><><EFBFBD><EFBFBD>4k<34>ֽڵģ<DAB5>Ҳ<EFBFBD><D2B2>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4k<34>ֽ<EFBFBD>
|
||||
*******************************************************************************/
|
||||
status_t flash_erase(uint32_t start_addr, uint32_t byte_cnt)
|
||||
{
|
||||
uint32_t addr;
|
||||
@@ -584,12 +705,30 @@ status_t flash_erase(uint32_t start_addr, uint32_t byte_cnt)
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flash_write
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>FLASH_WritePage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>дFlashһ<68><D2BB>ҳ
|
||||
* <20><> <20><>: addr:д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
buf:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
len:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>256)
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ע <20><>: <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
status_t flash_write(uint32_t start_addr, uint8_t *buf, uint32_t byte_cnt)
|
||||
{
|
||||
return FLASH_WritePage(start_addr, (void *)buf, byte_cnt);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flash_read
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>Flash<73><68><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: addr:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
buf:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
len:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
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 */
|
||||
@@ -614,12 +753,20 @@ status_t flash_read(uint32_t addr, uint8_t *buf, uint32_t len)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: flash_copy
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ʵ<><CAB5>flash<73><68><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||
* <20><> <20><>: srcAddr:Դflash<73><68><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
dstAddr:Ŀ<><C4BF>flash<73><68><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ;
|
||||
imageSize:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>flash<73>ռ<EFBFBD><D5BC><EFBFBD>С,<2C><>λΪ<CEBB>ֽ<EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
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 + 1))
|
||||
if((srcAddr == dstAddr) || imageSize > APP_FLASH_SIZE)
|
||||
{
|
||||
return (status_t)kStatus_Fail;
|
||||
}
|
||||
@@ -672,6 +819,13 @@ status_t flash_copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: NOR_FLASH_Erase
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Flashָ<68><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵĿռ<C4BF>,<2C><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڿ<D6BD><DABF>ܴ<EFBFBD><DCB4><EFBFBD>imageSize
|
||||
* <20><> <20><>: addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
imageSize:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
* <20><> <20><> ֵ: None
|
||||
*******************************************************************************/
|
||||
status_t NOR_FLASH_Erase(uint32_t app_base_addr,uint32_t imageSize)
|
||||
{
|
||||
uint16_t i;
|
||||
@@ -691,6 +845,15 @@ status_t NOR_FLASH_Erase(uint32_t app_base_addr,uint32_t imageSize)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: NorFlash_Write_PageProgram
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: д<><D0B4>Flashָ<68><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
WriteAddr:д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>256)
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD>״ֵ̬Ϊ kStatus_Success<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ֵ̬Ϊ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ע <20><>: <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
void NorFlash_Write_PageProgram(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
{
|
||||
uint8_t temp_data[256] = {0xff};
|
||||
@@ -705,7 +868,17 @@ void NorFlash_Write_PageProgram(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t Num
|
||||
}
|
||||
|
||||
|
||||
void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: NorFlash_Write_NoCheck
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><EFBFBD><DEBC><EFBFBD>д<EFBFBD><D0B4>W25QXX<58><58>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼָ<CABC><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
WriteAddr:<3A><>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
* ע <20><>: <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>д<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ϊ0XFF,<2C><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>0XFF<46><46>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ʧ<EFBFBD><CAA7>!
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>,<2C><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫȷ<D2AA><C8B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Խ<EFBFBD><D4BD>!
|
||||
*******************************************************************************/
|
||||
void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
{
|
||||
uint16_t pageRemain;
|
||||
|
||||
@@ -742,6 +915,15 @@ void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByte
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: NorFlash_Write
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: д<><D0B4>W25QXX<58><58>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
WriteAddr:<3A><>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
* <20><> <20><> ֵ: None
|
||||
* ע <20><>: <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
{
|
||||
uint32_t secPos;
|
||||
@@ -754,16 +936,16 @@ void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
|
||||
WriteAddr &= 0x0FFFFFFF;
|
||||
|
||||
secPos = WriteAddr/SECTOR_SIZE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
secPos = WriteAddr/SECTOR_SIZE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
secOff = WriteAddr%SECTOR_SIZE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
secRemain = SECTOR_SIZE - secOff;//<2F><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
|
||||
|
||||
if(NumByteToWrite <= secRemain)
|
||||
{
|
||||
secRemain = NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4096<39><36><EFBFBD>ֽ<EFBFBD>
|
||||
}
|
||||
secRemain = NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4096<39><36><EFBFBD>ֽ<EFBFBD>
|
||||
}
|
||||
while(1)
|
||||
{
|
||||
{
|
||||
FLASH_Read(FLASH_BASE + secPos*SECTOR_SIZE, (void *)NorFlash_BUF, SECTOR_SIZE);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<secRemain;i++)//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
@@ -777,8 +959,7 @@ void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
FLASH_EraseSector(FLASH_BASE + secPos*SECTOR_SIZE);
|
||||
for(i=0;i<secRemain;i++)//<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
NorFlash_BUF[i+secOff] = pBuffer[i];
|
||||
|
||||
NorFlash_BUF[i+secOff] = pBuffer[i];
|
||||
}
|
||||
NorFlash_Write_NoCheck(NorFlash_BUF,FLASH_BASE + secPos*SECTOR_SIZE,SECTOR_SIZE);//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
@@ -812,6 +993,14 @@ void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: NOR_FLASH_Write
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: д<><D0B4>W25QXX<58><58>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: FlashAddress:<3A><><EFBFBD>ڴ洢<DAB4><E6B4A2>ǰд<C7B0><D0B4>Flash<73><68>ַ<EFBFBD><D6B7>ָ<EFBFBD>룬д<EBA3AC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ƶ<EFBFBD>
|
||||
Data:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
DataLength:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
* <20><> <20><> ֵ: 0
|
||||
*******************************************************************************/
|
||||
#ifndef USE_HIGHT_SPEED_TRANS
|
||||
uint32_t NOR_FLASH_Write(uint32_t* FlashAddress, uint8_t* Data ,uint16_t DataLength)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "common.h"
|
||||
#include "imxrt_ota.h"
|
||||
|
||||
|
||||
static const uint32_t crc32tab[] = {
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
|
||||
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
|
||||
@@ -92,6 +93,13 @@ static const uint32_t crc32tab[] = {
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: calculate_crc32
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<73>ڴ<EFBFBD><DAB4><EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRC32У<32><D0A3><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: addr:<3A><>ʾFlash<73><68>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
||||
len:<3A><>ʾ<EFBFBD><CABE>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>CRC32<33><32><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
* <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>CRC32ֵ
|
||||
*******************************************************************************/
|
||||
static uint32_t calculate_crc32(uint32_t addr, uint32_t len)
|
||||
{
|
||||
uint32_t crc = 0xFFFFFFFF;
|
||||
@@ -105,6 +113,13 @@ static uint32_t calculate_crc32(uint32_t addr, uint32_t len)
|
||||
return crc^0xFFFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: UpdateOTAStatus
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>OTA<54><41>״̬<D7B4><CCAC>Ϣ
|
||||
* <20><> <20><>: status:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>ĵ<EFBFBD>״ֵ̬
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
void UpdateOTAStatus(ota_status_t status)
|
||||
{
|
||||
ota_info_t ota_info;
|
||||
@@ -116,6 +131,17 @@ void UpdateOTAStatus(ota_status_t status)
|
||||
flash_write(FLAG_FLAH_ADDRESS,(void *)&ota_info,sizeof(ota_info_t));
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: UpdateOTAFlag
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>OTA Flag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>app<70><70><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
|
||||
* <20><> <20><>: app_size:<3A>µĹ̼<C4B9><CCBC>Ĵ<EFBFBD>С,<2C><>λ<EFBFBD>ֽ<EFBFBD>
|
||||
version:<3A>µĹ̼<C4B9><CCBC>İ汾
|
||||
status:OTA<54><41>״̬<D7B4><CCAC>Ϣ
|
||||
description:<3A>°汾<C2B0>Ĺ̼<C4B9><CCBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
error_message:<3A><><EFBFBD>¹<EFBFBD><C2B9><EFBFBD><EFBFBD>д洢<D0B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
*******************************************************************************/
|
||||
void UpdateOTAFlag(uint32_t app_size, uint32_t version, uint32_t status, uint8_t* description, uint8_t* error_message)
|
||||
{
|
||||
ota_info_t ota_info; // <20><><EFBFBD><EFBFBD>OTA<54><41>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
@@ -133,6 +159,14 @@ void UpdateOTAFlag(uint32_t app_size, uint32_t version, uint32_t status, uint8_t
|
||||
flash_write(FLAG_FLAH_ADDRESS,(void *)&ota_info,sizeof(ota_info_t));
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* <20><> <20><> <20><>: UpdateApplication
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>bootloader<65><72><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>Flash<73><68>Flag<61><67><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>а汾<D0B0><E6B1BE><EFBFBD><EFBFBD>
|
||||
* <20><> <20><>: <20><>
|
||||
* <20><> <20><> ֵ: <20><>
|
||||
* ע <20><>: <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>app<70><70><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
void UpdateApplication(void)
|
||||
{
|
||||
status_t status;
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
@@ -27,18 +26,18 @@ uint8_t tab_1024[1024] ={0};
|
||||
uint8_t FileName[FILE_NAME_LENGTH];
|
||||
|
||||
|
||||
/**
|
||||
* @brief Receive byte from sender
|
||||
* @param c: Character
|
||||
* @param timeout: Timeout
|
||||
* @retval 0: Byte received
|
||||
* -1: Timeout
|
||||
*/
|
||||
static int32_t Receive_Byte (uint8_t *c, uint32_t timeout)
|
||||
/*******************************************************************************
|
||||
* 函 数 名: Receive_Byte
|
||||
* 功能描述: 从发送方接收字节
|
||||
* 形 参: c:用于存储接收到的字符
|
||||
timeout:超时时间
|
||||
* 返 回 值: 0:收到数据,-1:超时未接收到
|
||||
*******************************************************************************/
|
||||
static int32_t Receive_Byte(uint8_t *c, uint32_t timeout)
|
||||
{
|
||||
while (timeout-- > 0)
|
||||
while(timeout-- > 0)
|
||||
{
|
||||
if (SerialKeyPressed(c) == 1)
|
||||
if(SerialKeyPressed(c) == 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -46,23 +45,27 @@ static int32_t Receive_Byte (uint8_t *c, uint32_t timeout)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send a byte
|
||||
* @param c: Character
|
||||
* @retval 0: Byte sent
|
||||
*/
|
||||
static uint32_t Send_Byte (uint8_t c)
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: Send_Byte
|
||||
* 功能描述: 发送一个字节的数据
|
||||
* 形 参: c:要发送的数据
|
||||
* 返 回 值: 0
|
||||
*******************************************************************************/
|
||||
static uint32_t Send_Byte(uint8_t c)
|
||||
{
|
||||
SerialPutChar(c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update CRC16 for input byte
|
||||
* @param CRC input value
|
||||
* @param input byte
|
||||
* @retval Updated CRC value
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: UpdateCRC16
|
||||
* 功能描述: 更新输入数据的CRC16校验
|
||||
* 形 参: crcIn:输入的16位crc数据
|
||||
byte:输入的8位数据
|
||||
* 返 回 值: 更新后的crc数据
|
||||
*******************************************************************************/
|
||||
uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
|
||||
{
|
||||
uint32_t crc = crcIn;
|
||||
@@ -87,12 +90,14 @@ uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
|
||||
return (crc&0xffffu);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cal CRC16 for YModem Packet
|
||||
* @param data
|
||||
* @param length
|
||||
* @retval CRC value
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: Cal_CRC16
|
||||
* 功能描述: 计算CRC16,用于YModem的数据包
|
||||
* 形 参: data:数据buffer
|
||||
size:数据长度
|
||||
* 返 回 值: 生成的crc数据
|
||||
*******************************************************************************/
|
||||
uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
|
||||
{
|
||||
uint32_t crc = 0;
|
||||
@@ -108,12 +113,14 @@ uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
|
||||
return (crc&0xffffu);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cal Check sum for YModem Packet
|
||||
* @param data
|
||||
* @param length
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: CalChecksum
|
||||
* 功能描述: 计算检查YModem数据包的总和
|
||||
* 形 参: data:数据buffer
|
||||
size:数据长度
|
||||
* 返 回 值: 计算到的数据包总和
|
||||
*******************************************************************************/
|
||||
uint8_t CalChecksum(const uint8_t* data, uint32_t size)
|
||||
{
|
||||
uint32_t sum = 0;
|
||||
@@ -127,24 +134,21 @@ uint8_t CalChecksum(const uint8_t* data, uint32_t size)
|
||||
return (sum&0xffu);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Receive a packet from sender
|
||||
* @param data
|
||||
* @param length
|
||||
* @param timeout
|
||||
* 0: end of transmission
|
||||
* -1: abort by sender
|
||||
* >0: packet length
|
||||
* @retval 0: normally return
|
||||
* -1: timeout or packet error
|
||||
* 1: abort by user
|
||||
*/
|
||||
static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: Receive_Packet
|
||||
* 功能描述: 从发送方接收数据包
|
||||
* 形 参: data:数据buffer
|
||||
length:存储数据长度的指针
|
||||
timeout:超时时间
|
||||
* 返 回 值: 0:正常返回,-1:发送者中止/超时/数据包错误,1:用户中止
|
||||
*******************************************************************************/
|
||||
static int32_t Receive_Packet(uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
{
|
||||
uint16_t i, packet_size, computedcrc;
|
||||
uint8_t c;
|
||||
*length = 0;
|
||||
if (Receive_Byte(&c, timeout) != 0)
|
||||
if(Receive_Byte(&c, timeout) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@@ -159,7 +163,7 @@ static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
case EOT:
|
||||
return 0;
|
||||
case CA:
|
||||
if ((Receive_Byte(&c, timeout) == 0) && (c == CA))
|
||||
if((Receive_Byte(&c, timeout) == 0) && (c == CA))
|
||||
{
|
||||
*length = -1;
|
||||
return 0;
|
||||
@@ -175,14 +179,14 @@ static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
return -1;
|
||||
}
|
||||
*data = c;
|
||||
for (i = 1; i < (packet_size + PACKET_OVERHEAD); i ++)
|
||||
for(i = 1; i < (packet_size + PACKET_OVERHEAD); i ++)
|
||||
{
|
||||
if (Receive_Byte(data + i, timeout) != 0)
|
||||
if(Receive_Byte(data + i, timeout) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
|
||||
if(data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@@ -192,7 +196,7 @@ static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
/* Check that received CRC match the already computed CRC value
|
||||
data[packet_size+3]<<8) | data[packet_size+4] contains the received CRC
|
||||
computedcrc contains the computed CRC value */
|
||||
if (computedcrc != (uint16_t)((data[packet_size+3]<<8) | data[packet_size+4]))
|
||||
if(computedcrc != (uint16_t)((data[packet_size+3]<<8) | data[packet_size+4]))
|
||||
{
|
||||
/* CRC error */
|
||||
return -1;
|
||||
@@ -202,12 +206,16 @@ static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Receive a file using the ymodem protocol
|
||||
* @param buf: Address of the first byte,addr:download flash start address
|
||||
* @retval The size of the file
|
||||
*/
|
||||
int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: Ymodem_Receive
|
||||
* 功能描述: 使用ymodem协议接收文件
|
||||
* 形 参: buf:数据buffer
|
||||
addr:下载flash起始地址
|
||||
timeout:超时时间
|
||||
* 返 回 值: 文件的大小
|
||||
*******************************************************************************/
|
||||
int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr)
|
||||
{
|
||||
uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH], *file_ptr, *buf_ptr;
|
||||
int32_t i, packet_length, session_done, file_done, packets_received, errors, session_begin, size = 0;
|
||||
@@ -216,15 +224,15 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
/* Initialize flashdestination variable */
|
||||
flashdestination = addr;
|
||||
|
||||
for (session_done = 0, errors = 0, session_begin = 0; ;)
|
||||
for(session_done = 0, errors = 0, session_begin = 0; ;)
|
||||
{
|
||||
for (packets_received = 0, file_done = 0, buf_ptr = buf; ;)
|
||||
for(packets_received = 0, file_done = 0, buf_ptr = buf; ;)
|
||||
{
|
||||
switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
|
||||
switch(Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
|
||||
{
|
||||
case 0:
|
||||
errors = 0;
|
||||
switch (packet_length)
|
||||
switch(packet_length)
|
||||
{
|
||||
/* Abort by sender */
|
||||
case - 1:
|
||||
@@ -237,24 +245,24 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
break;
|
||||
/* Normal packet */
|
||||
default:
|
||||
if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
|
||||
if((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
|
||||
{
|
||||
Send_Byte(NAK);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (packets_received == 0)
|
||||
if(packets_received == 0)
|
||||
{
|
||||
/* Filename packet */
|
||||
if (packet_data[PACKET_HEADER] != 0)
|
||||
if(packet_data[PACKET_HEADER] != 0)
|
||||
{
|
||||
/* Filename packet has valid data */
|
||||
for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
|
||||
for(i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
|
||||
{
|
||||
FileName[i++] = *file_ptr++;
|
||||
}
|
||||
FileName[i++] = '\0';
|
||||
for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < (FILE_SIZE_LENGTH - 1));)
|
||||
for(i = 0, file_ptr ++; (*file_ptr != ' ') && (i < (FILE_SIZE_LENGTH - 1));)
|
||||
{
|
||||
file_size[i++] = *file_ptr++;
|
||||
}
|
||||
@@ -263,7 +271,7 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
|
||||
/* Test the size of the image to be sent */
|
||||
/* Image size is greater than Flash size */
|
||||
if (size > (USER_FLASH_SIZE + 1))
|
||||
if(size > APP_FLASH_SIZE)
|
||||
{
|
||||
/* End session */
|
||||
Send_Byte(CA);
|
||||
@@ -292,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) == 0)
|
||||
#else
|
||||
if (NOR_FLASH_Write(&flashdestination, buf, (uint16_t) packet_length,0) == 0)
|
||||
if(NOR_FLASH_Write(&flashdestination, buf, (uint16_t)packet_length, 0) == 0)
|
||||
#endif
|
||||
{
|
||||
Send_Byte(ACK);
|
||||
@@ -317,11 +325,11 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
Send_Byte(CA);
|
||||
return -3;
|
||||
default:
|
||||
if (session_begin > 0)
|
||||
if(session_begin > 0)
|
||||
{
|
||||
errors ++;
|
||||
}
|
||||
if (errors > MAX_ERRORS)
|
||||
if(errors > MAX_ERRORS)
|
||||
{
|
||||
Send_Byte(CA);
|
||||
Send_Byte(CA);
|
||||
@@ -330,12 +338,12 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
Send_Byte(CRC16);
|
||||
break;
|
||||
}
|
||||
if (file_done != 0)
|
||||
if(file_done != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (session_done != 0)
|
||||
if(session_done != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -346,44 +354,46 @@ int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr)
|
||||
return (int32_t)size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Download a file via serial port
|
||||
* @param flash start addr
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* 函 数 名: SerialDownload
|
||||
* 功能描述: 通过串口下载文件
|
||||
* 形 参: addr:存储文件的flash起始地址
|
||||
* 返 回 值: 文件的大小
|
||||
*******************************************************************************/
|
||||
int32_t SerialDownload(const uint32_t addr)
|
||||
{
|
||||
uint8_t Number[10] = {0};
|
||||
int32_t Size = 0;
|
||||
uint8_t Number[10] = {0};
|
||||
int32_t Size = 0;
|
||||
|
||||
Serial_PutString("Waiting for the file to be sent ... (press 'a' to abort)\n\r");
|
||||
Size = Ymodem_Receive(&tab_1024[0], addr);
|
||||
if (Size > 0)
|
||||
{
|
||||
Serial_PutString("\n\n\r Programming Completed Successfully!\n\r--------------------------------\r\n Name: ");
|
||||
Serial_PutString(FileName);
|
||||
Int2Str(Number, Size);
|
||||
Serial_PutString("\n\r Size: ");
|
||||
Serial_PutString(Number);
|
||||
Serial_PutString(" Bytes\r\n");
|
||||
Serial_PutString("-------------------\n");
|
||||
}
|
||||
else if (Size == -1)
|
||||
{
|
||||
Serial_PutString("\n\n\rThe image size is higher than the allowed space memory!\n\r");
|
||||
}
|
||||
else if (Size == -2)
|
||||
{
|
||||
Serial_PutString("\n\n\rVerification failed!\n\r");
|
||||
}
|
||||
else if (Size == -3)
|
||||
{
|
||||
Serial_PutString("\r\n\nAborted by user.\n\r");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial_PutString("\n\rFailed to receive the file!\n\r");
|
||||
}
|
||||
Serial_PutString("Waiting for the file to be sent ... (press 'a' to abort)\n\r");
|
||||
Size = Ymodem_Receive(&tab_1024[0], addr);
|
||||
if(Size > 0)
|
||||
{
|
||||
Serial_PutString("\n\n\r Programming Completed Successfully!\n\r--------------------------------\r\n Name: ");
|
||||
Serial_PutString(FileName);
|
||||
Int2Str(Number, Size);
|
||||
Serial_PutString("\n\r Size: ");
|
||||
Serial_PutString(Number);
|
||||
Serial_PutString(" Bytes\r\n");
|
||||
Serial_PutString("-------------------\n");
|
||||
}
|
||||
else if(Size == -1)
|
||||
{
|
||||
Serial_PutString("\n\n\rThe image size is higher than the allowed space memory!\n\r");
|
||||
}
|
||||
else if(Size == -2)
|
||||
{
|
||||
Serial_PutString("\n\n\rVerification failed!\n\r");
|
||||
}
|
||||
else if(Size == -3)
|
||||
{
|
||||
Serial_PutString("\r\n\nAborted by user.\n\r");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial_PutString("\n\rFailed to receive the file!\n\r");
|
||||
}
|
||||
|
||||
return Size;
|
||||
return Size;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <stdint.h>
|
||||
#include "common.h"
|
||||
|
||||
#define USER_FLASH_SIZE 0x100000 //Application package size is limited to 1M
|
||||
#define PACKET_SEQNO_INDEX (1)
|
||||
#define PACKET_SEQNO_COMP_INDEX (2)
|
||||
|
||||
@@ -53,6 +52,6 @@
|
||||
#define MAX_ERRORS (5)
|
||||
|
||||
int32_t SerialDownload(const uint32_t addr);
|
||||
int32_t Ymodem_Receive (uint8_t *buf, const uint32_t addr);
|
||||
int32_t Ymodem_Receive(uint8_t *buf, const uint32_t addr);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user