@@ -58,11 +58,11 @@ static const lookuptable_t FlashLookupTable={
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : Flexspi_Nor_Wait_Busy
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> ȴ<EFBFBD> FlexSPI NOR Flashæµ״̬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FlexSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
baseAddr:<EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> Flash<EFBFBD> <EFBFBD> ַ (32bit)
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : Flexspi_Nor_Wait_Busy
* 功能描述: 等待 FlexSPI NOR Flash忙碌状态结束
* 形 参 : instance:FlexSPI实例号
baseAddr:开始读取的 Flash地址 (32bit)
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t Flexspi_Nor_Wait_Busy ( uint32_t instance , uint32_t baseAddr )
{
@@ -101,11 +101,11 @@ static status_t Flexspi_Nor_Wait_Busy(uint32_t instance, uint32_t baseAddr)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : Flexspi_Nor_Write_Enable
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : ʹ <> <CAB9> FlexSPI NOR Flash<EFBFBD> <EFBFBD> д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FlexSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
baseAddr:<EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> Flash<EFBFBD> <EFBFBD> ַ (32bit)
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : Flexspi_Nor_Write_Enable
* 功能描述: 使能 FlexSPI NOR Flash的写入操作
* 形 参 : instance:FlexSPI实例号
baseAddr:开始读取的 Flash地址 (32bit)
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t Flexspi_Nor_Write_Enable ( uint32_t instance , uint32_t baseAddr )
{
@@ -125,12 +125,12 @@ static status_t Flexspi_Nor_Write_Enable(uint32_t instance, uint32_t baseAddr)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_clock_config
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> FlexSPIģ<49> <C4A3> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FlexSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
freq:<EFBFBD> <EFBFBD> ʾ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> FlexSPIʱ<EFBFBD> <EFBFBD> Ƶ<EFBFBD> <EFBFBD>
sampleClkMode:ָ<EFBFBD> <EFBFBD> FlexSPIʱ<EFBFBD> ӵIJ<EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> ģʽ ,<2C> <> <EFBFBD> <EFBFBD> ѡ <EFBFBD> <D1A1> SDR<EFBFBD> <EFBFBD> DDRģʽ
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flexspi_clock_config
* 功能描述: 配置FlexSPI模块的时钟
* 形 参 : instance:FlexSPI实例号
freq:表示所需的 FlexSPI时钟频率
sampleClkMode:指定 FlexSPI时钟的采样时钟模式,可以选择 SDR或 DDR模式
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static void flexspi_clock_config ( uint32_t instance , uint32_t freq , uint32_t sampleClkMode )
{
@@ -210,10 +210,10 @@ static void flexspi_clock_config(uint32_t instance, uint32_t freq, uint32_t samp
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_clock_gate_enable
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> FlexSPIģ<49> <C4A3> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> ſ <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <>
* 函 数 名 : flexspi_clock_gate_enable
* 功能描述: 开启FlexSPI模块的时钟门控
* 形 参: 无
* 返 回 值: 无
*******************************************************************************/
static void flexspi_clock_gate_enable ( void )
{
@@ -222,10 +222,10 @@ static void flexspi_clock_gate_enable(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_clock_gate_disable
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> ر<EFBFBD> FlexSPIģ<49> <C4A3> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> ſ <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <>
* 函 数 名 : flexspi_clock_gate_disable
* 功能描述: 关闭FlexSPI模块的时钟门控
* 形 参: 无
* 返 回 值: 无
*******************************************************************************/
static void flexspi_clock_gate_disable ( void )
{
@@ -234,12 +234,12 @@ static void flexspi_clock_gate_disable(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_get_clock
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> ȡ FlexSPIʱ<EFBFBD> <EFBFBD> Ƶ<EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FlexSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
type:<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
freq:<EFBFBD> <EFBFBD> <EFBFBD> ڴ洢<EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> Ƶ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flexspi_get_clock
* 功能描述: 获取 FlexSPI时钟频率
* 形 参 : instance:FlexSPI实例号
type:所需时钟类型
freq:用于存储获取到的时钟频率类型
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t flexspi_get_clock ( uint32_t instance , flexspi_clock_type_t type , uint32_t * freq )
{
@@ -291,13 +291,13 @@ static status_t flexspi_get_clock(uint32_t instance, flexspi_clock_type_t type,
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_get_ticks
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> FlexSPIʱ<49> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : ticks:<EFBFBD> <EFBFBD> <EFBFBD> ڴ洢<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> 룬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
intervalNs:<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 루ns<EFBFBD> <EFBFBD> Ϊ<EFBFBD> <EFBFBD> λ<EFBFBD> <EFBFBD>
freq:FlexSPIʱ<EFBFBD> <EFBFBD> Ƶ<EFBFBD> ʣ<EFBFBD> <EFBFBD> <EFBFBD> λΪ MHz<EFBFBD> <EFBFBD>
unit:ʱ<EFBFBD> <EFBFBD> <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> λ
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flexspi_get_ticks
* 功能描述: 计算FlexSPI时钟周期数
* 形 参 : ticks:用于存储计算结果的指针,即所需的时钟周期数;
intervalNs:所需的时间间隔, 以纳秒( ns) 为单位;
freq:FlexSPI时钟频率,单位为 MHz;
unit:时钟周期单位,即计算结果中每个时钟周期代表的时间长度,以ns为单位
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t flexspi_get_ticks ( uint32_t * ticks , uint32_t intervalNs , uint32_t freq , uint32_t unit )
{
@@ -330,11 +330,11 @@ static status_t flexspi_get_ticks(uint32_t *ticks, uint32_t intervalNs, uint32_t
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_configure_dll
* <EFBFBD> <EFBFBD> <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> )
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FLEXSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
config:<EFBFBD> 洢<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȡʱ<EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Чʱ<EFBFBD> <EFBFBD> <EFBFBD> Ȳ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flexspi_configure_dll
* 功能描述: 用来配置FLEXSPI存储器的DLL(延迟锁存器 )
* 形 参 : instance:FLEXSPI实例号
config:存储器配置信息,包括读取时钟源、数据有效时间等参数
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t flexspi_configure_dll ( uint32_t instance , flexspi_mem_config_t * config )
{
@@ -473,11 +473,11 @@ static status_t flexspi_configure_dll(uint32_t instance, flexspi_mem_config_t *c
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flexspi_config_mcr1
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> FlexSPIģ<49> <C4A3> <EFBFBD> <EFBFBD> MCR1<52> Ĵ<EFBFBD> <C4B4> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : instance:FLEXSPIʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
onfigָ<EFBFBD> <EFBFBD> FlexSPI<EFBFBD> 洢<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ýṹ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flexspi_config_mcr1
* 功能描述: 配置FlexSPI模块的MCR1寄存器
* 形 参 : instance:FLEXSPI实例号
onfig指向 FlexSPI存储器配置结构体的指针
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
static status_t flexspi_config_mcr1 ( uint32_t instance , flexspi_mem_config_t * config )
{
@@ -513,10 +513,10 @@ static status_t flexspi_config_mcr1(uint32_t instance, flexspi_mem_config_t *con
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_GetSectorSize
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> ȡ<EFBFBD> <C8A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С ,HYPER FLASHΪ 64K<EFBFBD> ֽ<EFBFBD> ,NOR FLASHΪ 4K<EFBFBD> ֽ<EFBFBD>
* 函 数 名 : FLASH_GetSectorSize
* 功能描述: 获取扇区大小
* 形 参: 无
* 返 回 值: 返回扇区大小 ,HYPER FLASH为 64K字节 ,NOR FLASH为 4K字节
*******************************************************************************/
uint32_t FLASH_GetSectorSize ( void )
{
@@ -529,10 +529,10 @@ uint32_t FLASH_GetSectorSize(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_GetProgramCmd
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> ȡҳ<C8A1> <D2B3> С
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <> <EFBFBD> <EFBFBD> ҳ<EFBFBD> <D2B3> С ,HYPER FLASHΪ 512<EFBFBD> ֽ<EFBFBD> ,NOR FLASHΪ 256<EFBFBD> ֽ<EFBFBD>
* 函 数 名 : FLASH_GetProgramCmd
* 功能描述: 获取页大小
* 形 参: 无
* 返 回 值: 返回页大小 ,HYPER FLASH为 512字节 ,NOR FLASH为 256字节
*******************************************************************************/
uint32_t FLASH_GetProgramCmd ( void )
{
@@ -548,10 +548,10 @@ uint32_t FLASH_GetProgramCmd(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_Init
* <EFBFBD> <EFBFBD> <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>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <>
* 函 数 名 : FLASH_Init
* 功能描述: Flash接口初始化,需在进行Flash相关操作前进行调用
* 形 参: 无
* 返 回 值: 无
*******************************************************************************/
void FLASH_Init ( void )
{
@@ -567,10 +567,10 @@ void FLASH_Init(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_DeInit
* <EFBFBD> <EFBFBD> <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>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <>
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <>
* 函 数 名 : FLASH_DeInit
* 功能描述: Flash接口反初始化, 需在完成Flash相关操作后进行调用
* 形 参: 无
* 返 回 值: 无
*******************************************************************************/
void FLASH_DeInit ( void )
{
@@ -583,11 +583,11 @@ void FLASH_DeInit(void)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_EraseSector
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> Flash<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
* <EFBFBD> <EFBFBD> <20> <> ֵ : None
* ע <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> :30ms~200/400ms
* 函 数 名 : FLASH_EraseSector
* 功能描述: 擦除一个 Flash扇区
* 形 参 : addr:擦除区域起始地址
* 返 回 值 : None
* 注 释: 擦除一个扇区的最少时间 :30ms~200/400ms
*******************************************************************************/
uint8_t FLASH_EraseSector ( uint32_t addr )
{
@@ -613,13 +613,13 @@ uint8_t FLASH_EraseSector(uint32_t addr)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_WritePage
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : д Flashһ <EFBFBD> <EFBFBD> ҳ
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
buf:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
len:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> 256)
* <EFBFBD> <EFBFBD> <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>
* ע <EFBFBD> <EFBFBD> : <20> <> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> ʼ д<CABC> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 256<35> ֽڵ<D6BD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD>
* 函 数 名 : FLASH_WritePage
* 功能描述 : 写 Flash一个页
* 形 参 : addr:写入区域起始地址
buf:数据存储区
len:要写入的字节数(最大 256)
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
* 注 释: 在指定地址开始写入最大256字节的数据
*******************************************************************************/
uint8_t FLASH_WritePage ( uint32_t addr , const uint32_t * buf , uint32_t len )
{
@@ -648,12 +648,12 @@ uint8_t FLASH_WritePage(uint32_t addr, const uint32_t *buf, uint32_t len)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : FLASH_Read
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> Flash<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:<EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
buf:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
len:Ҫ<EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : FLASH_Read
* 功能描述: 读 Flash内容
* 形 参 : addr:读取区域起始地址
buf:数据存储区
len:要读取的字节数
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
status_t FLASH_Read ( uint32_t addr , uint32_t * buf , uint32_t len )
{
@@ -680,12 +680,12 @@ status_t FLASH_Read(uint32_t addr, uint32_t *buf, uint32_t len)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flash_erase
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> Flashָ<68> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ȵĿռ <C4BF>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
byte_cnt:Ҫ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> ,<2C> <> 4k<34> ֽ<EFBFBD> Ϊ<EFBFBD> <CEAA> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ
* <EFBFBD> <EFBFBD> <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>
* ע <EFBFBD> <EFBFBD> : <20> <> <EFBFBD> <EFBFBD> 4k<34> ֽڵģ<DAB5> Ҳ<EFBFBD> <D2B2> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4k<34> ֽ<EFBFBD>
* 函 数 名 : flash_erase
* 功能描述: 擦除Flash指定长度的空间
* 形 参 : addr:擦除区域起始地址
byte_cnt:要擦除的字节数,以4k字节为最小擦除单位
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
* 注 释: 不满4k字节的, 也需要擦除掉4k字节
*******************************************************************************/
status_t flash_erase ( uint32_t start_addr , uint32_t byte_cnt )
{
@@ -707,12 +707,12 @@ status_t flash_erase(uint32_t start_addr, uint32_t byte_cnt)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flash_write
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> flash<73> <68> ʼ <EFBFBD> <CABC> ַд<D6B7> <D0B4> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
buf:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
byte_cnt:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flash_write
* 功能描述: 在指定的flash起始地址写入指定长度的数据
* 形 参 : addr:写入区域起始地址
buf:数据存储区
byte_cnt:要写入的字节数
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
status_t flash_write ( uint32_t start_addr , uint8_t * buf , uint32_t byte_cnt )
{
@@ -736,12 +736,12 @@ status_t flash_write(uint32_t start_addr, uint8_t *buf, uint32_t byte_cnt)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flash_read
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : <20> <> Flash<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:<EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
buf:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
len:Ҫ<EFBFBD> <EFBFBD> ȡ<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flash_read
* 功能描述: 读 Flash内容
* 形 参 : addr:读取区域起始地址
buf:数据存储区
len:要读取的字节数
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
status_t flash_read ( uint32_t addr , uint8_t * buf , uint32_t len )
{
@@ -768,12 +768,12 @@ status_t flash_read(uint32_t addr, uint8_t *buf, uint32_t len)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : flash_copy
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : ʵ<> <CAB5> flash<73> <68> <EFBFBD> <EFBFBD> <EFBFBD> ڷ<EFBFBD> <DAB7> <EFBFBD> ֮<EFBFBD> <D6AE> <EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : srcAddr:Դ flash<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
dstAddr:Ŀ<EFBFBD> <EFBFBD> flash<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ ;
imageSize:Ҫ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> flash<EFBFBD> ռ <EFBFBD> <EFBFBD> <EFBFBD> С ,<2C> <> λΪ<CEBB> ֽ<EFBFBD>
* <EFBFBD> <EFBFBD> <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>
* 函 数 名 : flash_copy
* 功能描述: 实现flash数据在分区之间的拷贝
* 形 参 : srcAddr:源 flash的起始地址
dstAddr:目标 flash的起始地址 ;
imageSize:要拷贝的flash空间大小,单位为字节
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
*******************************************************************************/
status_t flash_copy ( uint32_t srcAddr , uint32_t dstAddr , uint32_t imageSize )
{
@@ -834,11 +834,11 @@ status_t flash_copy(uint32_t srcAddr,uint32_t dstAddr, uint32_t imageSize)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : NOR_FLASH_Erase
* <EFBFBD> <EFBFBD> <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
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : addr:<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
imageSize:Ҫ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <20> <> ֵ : None
* 函 数 名 : NOR_FLASH_Erase
* 功能描述: 以扇区为擦除单位擦除Flash指定长度的空间,最终擦除的字节可能大于 imageSize
* 形 参 : addr:擦除区域起始地址
imageSize:要擦除的字节数
* 返 回 值 : None
*******************************************************************************/
status_t NOR_FLASH_Erase ( uint32_t app_base_addr , uint32_t imageSize )
{
@@ -860,13 +860,13 @@ status_t NOR_FLASH_Erase(uint32_t app_base_addr,uint32_t imageSize)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : NorFlash_Write_PageProgram
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : д<> <D0B4> Flashָ<68> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : pBuffer:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
WriteAddr:д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> ַ
NumByteToWrite:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> 256)
* <EFBFBD> <EFBFBD> <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>
* ע <EFBFBD> <EFBFBD> : <20> <> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> ʼ д<CABC> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 256<35> ֽڵ<D6BD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD>
* 函 数 名 : NorFlash_Write_PageProgram
* 功能描述: 写入Flash指定长度的数据
* 形 参 : pBuffer:数据存储区
WriteAddr:写入区域起始地址
NumByteToWrite:要写入的字节数(最大 256)
* 返 回 值: 如果函数执行成功,状态值为 kStatus_Success, 否则状态值为其他错误码
* 注 释: 在指定地址开始写入最大256字节的数据
*******************************************************************************/
void NorFlash_Write_PageProgram ( uint8_t * pBuffer , uint32_t WriteAddr , uint16_t NumByteToWrite )
{
@@ -883,24 +883,24 @@ void NorFlash_Write_PageProgram(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t Num
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : NorFlash_Write_NoCheck
* <EFBFBD> <EFBFBD> <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>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : pBuffer:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
WriteAddr:<EFBFBD> <EFBFBD> ʼ д<EFBFBD> <EFBFBD> <EFBFBD> ĵ<EFBFBD> ַ (24bit)
NumByteToWrite:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> 65535)
* <EFBFBD> <EFBFBD> <20> <> ֵ: <20> <>
* ע <EFBFBD> <EFBFBD> : <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> !
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Զ<EFBFBD> <EFBFBD> <EFBFBD> ҳ<EFBFBD> <EFBFBD> <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> !
* 函 数 名 : NorFlash_Write_NoCheck
* 功能描述: 无检验写入W25QXX从指定地址开始指定长度的数据
* 形 参 : pBuffer:数据存储区
WriteAddr:开始写入的地址 (24bit)
NumByteToWrite:要写入的字节数(最大 65535)
* 返 回 值: 无
* 注 释: 必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败 !
具有自动换页功能,在指定地址开始写入指定长度的数据,但是要确保地址不越界 !
*******************************************************************************/
void NorFlash_Write_NoCheck ( uint8_t * pBuffer , uint32_t WriteAddr , uint16_t NumByteToWrite )
{
uint16_t pageRemain ;
pageRemain = 256 - WriteAddr % 256 ; //<EFBFBD> <EFBFBD> ҳʣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
pageRemain = 256 - WriteAddr % 256 ; //单页剩余的字节数
if ( NumByteToWrite < = pageRemain )
{
pageRemain = NumByteToWrite ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 256<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD>
pageRemain = NumByteToWrite ; //不大于256个字节
}
while ( 1 )
@@ -908,21 +908,21 @@ void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByte
NorFlash_Write_PageProgram ( pBuffer , WriteAddr , pageRemain ) ;
if ( NumByteToWrite = = pageRemain )
{
break ; //д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
break ; //写入结束了
}
else //NumByteToWrite>pageRemain
{
pBuffer + = pageRemain ;
WriteAddr + = pageRemain ;
NumByteToWrite - = pageRemain ; //<EFBFBD> <EFBFBD> ȥ<EFBFBD> Ѿ<EFBFBD> д<EFBFBD> <EFBFBD> <EFBFBD> ˵<EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
NumByteToWrite - = pageRemain ; //减去已经写入了的字节数
if ( NumByteToWrite > 256 )
{
pageRemain = 256 ; //һ <EFBFBD> ο <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <EFBFBD> 256<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD>
pageRemain = 256 ; //一次可以写入256个字节
}
else
{
pageRemain = NumByteToWrite ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 256<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
pageRemain = NumByteToWrite ; //不够256个字节了
}
}
}
@@ -930,13 +930,13 @@ void NorFlash_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByte
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : NorFlash_Write
* <EFBFBD> <EFBFBD> <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>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : pBuffer:<EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
WriteAddr:<EFBFBD> <EFBFBD> ʼ д<EFBFBD> <EFBFBD> <EFBFBD> ĵ<EFBFBD> ַ (24bit)
NumByteToWrite:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> 65535)
* <EFBFBD> <EFBFBD> <20> <> ֵ : None
* ע <EFBFBD> <EFBFBD> : <20> ú<EFBFBD> <C3BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* 函 数 名 : NorFlash_Write
* 功能描述: 写入W25QXX在指定地址开始写入指定长度的数据
* 形 参 : pBuffer:数据存储区
WriteAddr:开始写入的地址 (24bit)
NumByteToWrite:要写入的字节数(最大 65535)
* 返 回 值 : None
* 注 释: 该函数带擦除操作
*******************************************************************************/
void NorFlash_Write ( uint8_t * pBuffer , uint32_t WriteAddr , uint16_t NumByteToWrite )
{
@@ -946,61 +946,61 @@ void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
uint16_t i ;
uint8_t * NorFlash_BUF = 0 ;
NorFlash_BUF = NorFlash_BUFFER ; //RAM<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4K
NorFlash_BUF = NorFlash_BUFFER ; //RAM缓冲区 4K
WriteAddr & = 0x0FFFFFFF ;
secPos = WriteAddr / SECTOR_SIZE ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
secOff = WriteAddr % SECTOR_SIZE ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڵ<EFBFBD> ƫ<EFBFBD> <EFBFBD>
secRemain = SECTOR_SIZE - secOff ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʣ<EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD> <EFBFBD> <EFBFBD> С
secPos = WriteAddr / SECTOR_SIZE ; //扇区地址
secOff = WriteAddr % SECTOR_SIZE ; //在扇区内的偏移
secRemain = SECTOR_SIZE - secOff ; //扇区剩余空间大小
if ( NumByteToWrite < = secRemain )
{
secRemain = NumByteToWrite ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4096<EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD>
secRemain = NumByteToWrite ; //不大于4096个字节
}
while ( 1 )
{
FLASH_Read ( FLASH_BASE + secPos * SECTOR_SIZE , ( void * ) NorFlash_BUF , SECTOR_SIZE ) ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < secRemain ; i + + ) //У <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
FLASH_Read ( FLASH_BASE + secPos * SECTOR_SIZE , ( void * ) NorFlash_BUF , SECTOR_SIZE ) ; //读出整个扇区的内容
for ( i = 0 ; i < secRemain ; i + + ) //校验数据
{
if ( NorFlash_BUF [ secOff + i ] ! = 0xFF )
{
break ; //<EFBFBD> <EFBFBD> Ҫ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
break ; //需要擦除
}
}
if ( i < secRemain ) //<EFBFBD> <EFBFBD> Ҫ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( i < secRemain ) //需要擦除
{
FLASH_EraseSector ( FLASH_BASE + secPos * SECTOR_SIZE ) ;
for ( i = 0 ; i < secRemain ; i + + ) //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < secRemain ; i + + ) //复制
{
NorFlash_BUF [ i + secOff ] = pBuffer [ i ] ;
}
NorFlash_Write_NoCheck ( NorFlash_BUF , FLASH_BASE + secPos * SECTOR_SIZE , SECTOR_SIZE ) ; //д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
NorFlash_Write_NoCheck ( NorFlash_BUF , FLASH_BASE + secPos * SECTOR_SIZE , SECTOR_SIZE ) ; //写入整个扇区
}
else
{
NorFlash_Write_NoCheck ( pBuffer , FLASH_BASE + WriteAddr , secRemain ) ; //д<EFBFBD> Ѿ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˵<EFBFBD> ,ֱ<> <D6B1> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʣ<EFBFBD> <CAA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
NorFlash_Write_NoCheck ( pBuffer , FLASH_BASE + WriteAddr , secRemain ) ; //写已经擦除了的,直接写入扇区剩余区间 .
}
if ( NumByteToWrite = = secRemain )
{
break ; //д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
break ; //写入结束了
}
else //д<EFBFBD> <EFBFBD> δ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
else //写入未结束
{
secPos + + ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <EFBFBD> 1
secOff = 0 ; //ƫ<EFBFBD> <EFBFBD> λ<EFBFBD> <EFBFBD> Ϊ 0
secPos + + ; //扇区地址增 1
secOff = 0 ; //偏移位置为 0
pBuffer + = secRemain ; //ָ<EFBFBD> <EFBFBD> ƫ<EFBFBD> <EFBFBD>
WriteAddr + = secRemain ; //д<EFBFBD> <EFBFBD> ַƫ<EFBFBD> <EFBFBD>
NumByteToWrite - = secRemain ; //<EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݼ<EFBFBD>
pBuffer + = secRemain ; //指针偏移
WriteAddr + = secRemain ; //写地址偏移
NumByteToWrite - = secRemain ; //字节数递减
if ( NumByteToWrite > SECTOR_SIZE )
{
secRemain = SECTOR_SIZE ; //<EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
secRemain = SECTOR_SIZE ; //下一个扇区还是写不完
}
else
{
secRemain = NumByteToWrite ; //<EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
secRemain = NumByteToWrite ; //下一个扇区可以写完了
}
}
}
@@ -1008,12 +1008,12 @@ void NorFlash_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
/*******************************************************************************
* <EFBFBD> <EFBFBD> <20> <> <20> <> : NOR_FLASH_Write
* <EFBFBD> <EFBFBD> <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>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : FlashAddress:<EFBFBD> <EFBFBD> <EFBFBD> ڴ洢<EFBFBD> <EFBFBD> ǰд<EFBFBD> <EFBFBD> Flash<EFBFBD> <EFBFBD> ַ<EFBFBD> <EFBFBD> ָ<EFBFBD> 룬д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <EFBFBD> ƶ<EFBFBD>
Data:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ洢<EFBFBD> <EFBFBD>
DataLength:Ҫд<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <20> <> ֵ : 0
* 函 数 名 : NOR_FLASH_Write
* 功能描述: 写入W25QXX在指定地址开始写入指定长度的数据
* 形 参 : FlashAddress:用于存储当前写入Flash地址的指针, 写入过程中会移动
Data:要写入数据存储区
DataLength:要写入的字节数
* 返 回 值 : 0
*******************************************************************************/
# ifndef USE_HIGHT_SPEED_TRANS
uint32_t NOR_FLASH_Write ( uint32_t * FlashAddress , uint8_t * Data , uint16_t DataLength )