STM8用STVP下载写保护程序提示校验失败?

2019-07-18 20:23发布

本帖最后由 aozhouduwang 于 2019-5-26 20:02 编辑

有两个程序,其中一个开了读保护,用STVP下载HEX提示成功[mw_shl_code=c,true]//> Programming  PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY programming completed.
//> Verifying PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY successfully verified.
[/mw_shl_code]

而另一个程序开了读保护,用STVP下载HEX提示 “the device is protected”

[mw_shl_code=c,true]
//> Programming  PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY programming completed.
// Verifying PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//Error : The device is protected
//Operation aborted
//Error : < PROGRAM MEMORY verifying failed.
[/mw_shl_code]



疑问是两个hex在程序中都开了写保护选项字节,为什么其中一个可以用STVP下载成功,而另一个提示校验失败呢,写保护的程序是一模一样的。

贴出写保护代码
[mw_shl_code=c,true]void EEPROM_INIT()
{
        u16 ropAddr=0x4800;//F103的option在4800h开始
        u8 ropOptionStatus;
        FLASH_DeInit();
    // 设置编程时间,指定标准编程时间即可
        FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

        ropOptionStatus=FLASH_ReadOptionByte(ropAddr);;//rop状态
    // 解锁EEPROM区域(注意type是Data)
        FLASH_Unlock(FLASH_MEMTYPE_DATA);

    // 等待解锁成功
    // 本质是判断FLASH->IAPSR寄存器的DUL标志位是否变为1。1表示写保护消除,0为保护中
    // 任何时候都可以通过变更此标志位为0来恢复写保护状态
    while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);

        if(ropOptionStatus != 0xaa)
        {
                FLASH_ProgramOptionByte(ropAddr, 0xaa);//设置读保护
        }

        FLASH_Lock(FLASH_MEMTYPE_DATA);//  Flash Data区加密
}[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。