为什么STM8 IAP 升级 写入不了APP数据

2019-07-19 20:25发布

file:///C:UsersxgAppDataRoamingTencentUsers764017114QQWinTempRichOleGJM}NW1~QCP]0UYXM4S@$OT.pngfile:///C:UsersxgAppDataRoamingTencentUsers764017114QQWinTempRichOleGJM}NW1~QCP]0UYXM4S@$OT.png写入不成功,读出来的全是空的

#define MAIN_USER_RESET_ADDR  0x9A00ul   // app 地址


u16  McuDataStartAddressValue =MAIN_USER_RESET_ADDR;

                                                        Iap_To_Write_AppBin(McuDataStartAddressValue,RecCartVaildDataBuffer,RecFileVaildDataTotalLength);
                                                        McuDataStartAddressValue+=1024;



void  Iap_To_Write_AppBin(u16 Faddress, u8 *pufdata,u16 puflength)
{
                u16 ubBuffPtr =0;       

        FLASH_Unlock(FLASH_MEMTYPE_PROG);

        for(ubBuffPtr = 0; ubBuffPtr < puflength; ubBuffPtr++)
        {
                FLASH_EraseByte(Faddress+ubBuffPtr);
               
            FLASH_ProgramByte((u32)(Faddress+ubBuffPtr),  pufdata[ubBuffPtr]);
        }

       
      FLASH_Lock(FLASH_MEMTYPE_PROG);               
}



void FLASH_ProgramByte(u32 Address, u8 Data)
{
    /* Check parameters */
    assert_param(IS_FLASH_ADDRESS_OK(Address));
    *((PointerAttr u8*) Address) = Data;
}
void FLASH_EraseByte(u32 Address)
{
    /* Check parameter */
    //assert_param(IS_FLASH_ADDRESS_OK(Address));

    /* Erase byte */
   *(PointerAttr u8*) (u16)Address = FLASH_CLEAR_BYTE;

}
/**
  * @}


为什么请大神指导   ,STTOOL 工具读出来的9A00之后都没有数据。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
liang118038
2019-07-20 06:38
首先你那个写入Flash的函数是用什么编程模式?
stm8本身支持3种Flash编程模式
1.字编程模式,可以按一个字来写入,写入前自动执行擦除无需写代码处理的。
2.块编程模式,也是硬件自动擦除,但是以块为单位写入(具体块大小要按型号容量不同有区分,其实主要是影响写入速度而已),关键是块编程模式时不能执行Flash内的代码,写入相关的函数代码必须全部加载到RAM来执行。
3.快块编程模式写入时不自动执行擦除动作,需要写入前执行你写的擦除指定块代码,所以写入速度比块编程模式更快(但同一地址如果没有擦除执行两次写入不同数据将导致数据错误),执行时对Flash操作的代码也必须先加载到RAM来执行。

看你上面的代码里并没发现有设置Flash编程模式的语句命令。

一周热门 更多>