OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3774|回复: 3

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

[复制链接]

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
发表于 2019-5-26 20:01:15 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 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]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-5-27 02:14:04 | 显示全部楼层
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-5-28 15:10:36 | 显示全部楼层
是在同一个片子上烧写的还是不同的片子上烧写的?如果是同一个片子,那么第一个程序烧进去后片子保护了,第二次烧程序时肯定烧不进去了。除非把片子全部擦出,在烧写第二个程序。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2019-5-29 08:52:18 | 显示全部楼层
HXYDJ 发表于 2019-5-28 15:10
是在同一个片子上烧写的还是不同的片子上烧写的?如果是同一个片子,那么第一个程序烧进去后片子保护了,第 ...

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 13:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表