前提:
1.芯片型号CH579M
2.bin文件约110K。
3.芯片分为IAP、A、B三个区,A和B存放当前运行程序和升级程序,IAP负责判断A还是B为当前运行程序并启动。
4.工作环境40~60摄氏度。
更新FLAHS操作步骤:
1.请求当前运行区域,当前运行在A区则发送B区升级文件,反之同理。
2.发送升级区文件,以每包256字节写入,每512字节擦除块一次,进行程序更新。
3.发送完成后进行读取整个flash的文件进行md5校验,校验成功则重启,让IAP运行新升级包。
发现问题:
预计有1000左右CH579M芯片应用量,无规律的进行程序升级和更新,总体平均不超过3次,每片最高不超过10次,断断续续发现有4片FLASH芯片出现坏块无法写入。
通过程序中使用FlashBlockErase和FlashWriteBuf块进行更新,然后读数据进行校验时,校验异常。
通过jlink进行烧写,烧写正常,校验异常。
通过WCHISPTool串口进行烧写,烧写正常,校验异常。
还有一点奇怪的是至少有两片芯片(其余芯片之前没有太留意),异常块地址为0xF700,不知道有没有什么提示作用。
但是机缘巧合的是,以上都失败以后,通过WCHISPTool开启两线仿真后,jlink一下烧写正常,然后其余flash操作又都正常了。感觉开启两线仿真把某些标志位清除了,请问能否告诉一下开启两线仿真做了什么设置,以便让程序在操作flash出现异常后能自己清除标志位。期待技术人员的回复,谢谢。若代码不便公开,可否发送到个人信息保护,已隐藏邮箱。
以下为程序更新flash的操作代码、jlink烧写报错代码、WCHISPTool串口烧写报错截图