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]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-18 22:31
帮顶
HXYDJ
2楼-- · 2019-07-18 23:05
是在同一个片子上烧写的还是不同的片子上烧写的?如果是同一个片子,那么第一个程序烧进去后片子保护了,第二次烧程序时肯定烧不进去了。除非把片子全部擦出,在烧写第二个程序。
aozhouduwang
3楼-- · 2019-07-18 23:43
HXYDJ 发表于 2019-5-28 15:10
是在同一个片子上烧写的还是不同的片子上烧写的?如果是同一个片子,那么第一个程序烧进去后片子保护了,第 ...

是不同的片子,把写保护擦掉,两个片子和程序对调烧录,校验出错的还是出错。

是不是程序烧录完后程序已经运行了,这时候肯定不允许读了,所以校验是读flash然后出错了?

一周热门 更多>