前提:
1.芯片型號(hào)CH579M
2.bin文件約110K。
3.芯片分為IAP、A、B三個(gè)區(qū),A和B存放當(dāng)前運(yùn)行程序和升級(jí)程序,IAP負(fù)責(zé)判斷A還是B為當(dāng)前運(yùn)行程序并啟動(dòng)。
4.工作環(huán)境40~60攝氏度。
更新FLAHS操作步驟:
1.請求當(dāng)前運(yùn)行區(qū)域,當(dāng)前運(yùn)行在A區(qū)則發(fā)送B區(qū)升級(jí)文件,反之同理。
2.發(fā)送升級(jí)區(qū)文件,以每包256字節(jié)寫入,每512字節(jié)擦除塊一次,進(jìn)行程序更新。
3.發(fā)送完成后進(jìn)行讀取整個(gè)flash的文件進(jìn)行md5校驗(yàn),校驗(yàn)成功則重啟,讓IAP運(yùn)行新升級(jí)包。
發(fā)現(xiàn)問題:
? ? ? 預(yù)計(jì)有1000左右CH579M芯片應(yīng)用量,無規(guī)律的進(jìn)行程序升級(jí)和更新,總體平均不超過3次,每片最高不超過10次,斷斷續(xù)續(xù)發(fā)現(xiàn)有4片F(xiàn)LASH芯片出現(xiàn)壞塊無法寫入。
通過程序中使用FlashBlockErase和FlashWriteBuf塊進(jìn)行更新,然后讀數(shù)據(jù)進(jìn)行校驗(yàn)時(shí),校驗(yàn)異常。
通過jlink進(jìn)行燒寫,燒寫正常,校驗(yàn)異常。
通過WCHISPTool串口進(jìn)行燒寫,燒寫正常,校驗(yàn)異常。
還有一點(diǎn)奇怪的是至少有兩片芯片(其余芯片之前沒有太留意),異常塊地址為0xF700,不知道有沒有什么提示作用。
但是機(jī)緣巧合的是,以上都失敗以后,通過WCHISPTool開啟兩線仿真后,jlink一下燒寫正常,然后其余flash操作又都正常了。感覺開啟兩線仿真把某些標(biāo)志位清除了,請問能否告訴一下開啟兩線仿真做了什么設(shè)置,以便讓程序在操作flash出現(xiàn)異常后能自己清除標(biāo)志位。期待技術(shù)人員的回復(fù),謝謝。若代碼不便公開,可否發(fā)送到個(gè)人信息保護(hù),已隱藏郵箱。
以下為程序更新flash的操作代碼、jlink燒寫報(bào)錯(cuò)代碼、WCHISPTool串口燒寫報(bào)錯(cuò)截圖