• 資料介紹
    • 問(wèn)題現(xiàn)象
    • 問(wèn)題分析及測(cè)試
    • 后記
  • 資料預(yù)覽
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

LAT1151 程序運(yùn)行在 STM32H750 的外擴(kuò) FLASH 上兩小時(shí)后死機(jī)

03/25 15:52
701
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

LAT1151 程序運(yùn)行在 STM32H750 的外擴(kuò) FLASH 上兩小時(shí)后死機(jī)

452.44 KB

問(wèn)題現(xiàn)象

客戶(hù)使用 STM32H750VBT6,通過(guò) QSPI 外擴(kuò)了一個(gè) 4M 的 NOR FLASH,采用memory map 模式。當(dāng)程序跳轉(zhuǎn)運(yùn)行到外設(shè) FLASH 后,大約兩個(gè)小時(shí)后程序死機(jī)??蛻?hù)使用的 IDE 是 KEIL,此問(wèn)題可以固定重現(xiàn)。 在 KEIL 調(diào)試模式下重現(xiàn)問(wèn)題時(shí),通過(guò)多次觀察發(fā)現(xiàn),程序死的位置總體上會(huì)停在兩個(gè)位置,并不是同一個(gè)位置。一個(gè)是 TIM15函數(shù)的入口;另一個(gè)是進(jìn)入中斷函數(shù)后的一個(gè)賦值語(yǔ)句。

問(wèn)題分析及測(cè)試

通過(guò)拜訪客戶(hù),觀察到死機(jī)位置處于即將進(jìn)入 TIM15 中斷入口處,但還未進(jìn)入之時(shí)。查看客戶(hù)的原理圖,發(fā)現(xiàn)兩個(gè) VCAP 并未從外部相連,于是要求客戶(hù)直接從外部將此兩個(gè)引腳飛線短連。 但是,后來(lái)經(jīng)測(cè)試問(wèn)題仍然重現(xiàn)。

又觀察到 PC13 連接為 GPIO 輸出引腳,用于驅(qū)動(dòng)一外部組件。 考慮到備份域相關(guān)的一些引腳其驅(qū)動(dòng)能力相對(duì)弱一些,于是讓客戶(hù)將 PC13 引腳斷開(kāi)后再測(cè)試,結(jié)果問(wèn)題仍然重現(xiàn)。

上面是一些硬件相關(guān)的懷疑點(diǎn),經(jīng)測(cè)試結(jié)果來(lái)看,與此問(wèn)題無(wú)關(guān)。 看來(lái)主要可能還是軟件方面的問(wèn)題。

在軟件上確定客戶(hù)已經(jīng)打開(kāi)了 IO 補(bǔ)償功能,但 IO 速度設(shè)置的是 HIGH,于是讓客戶(hù)修改成 “VERY_HIGH”,經(jīng)測(cè)試問(wèn)題仍然存在。

由于之前發(fā)生過(guò)一個(gè)從低功耗喚醒后死機(jī)的問(wèn)題,是與 Cache 相關(guān)的問(wèn)題,于是要測(cè)試下將 CACHE 關(guān)閉的情況。 這次經(jīng)測(cè)試客戶(hù)反饋問(wèn)題沒(méi)現(xiàn)重現(xiàn) ! 但客戶(hù)同時(shí)也反饋,之前的代碼也存在稍微修改一處代碼,問(wèn)題就不再重現(xiàn)的現(xiàn)象,沒(méi)有找到具體規(guī)律。 這次代碼修改也沒(méi)排除這種可能性。

為了讓關(guān)閉 Cache 的方法更具效力,于是讓客戶(hù)在調(diào)試模式下通過(guò)手動(dòng)關(guān)閉 CACHE的方式,代碼仍然保持為原先可以重現(xiàn)問(wèn)題的代碼。

后記

有些人可能會(huì)問(wèn),NOR FLASH 的最后一個(gè)字節(jié) CPU 真的會(huì)去訪問(wèn)嗎 ? 客戶(hù)的程序占滿(mǎn)了整個(gè) FLASH 空間了嗎 ? 若那個(gè)地址沒(méi)有代碼那還會(huì)不會(huì)有這個(gè)問(wèn)題。

其實(shí)勘誤手冊(cè) 2.4.4 節(jié)也提到了,不管 FSIZE 定義的空間最后的一個(gè)字節(jié)內(nèi)容是什么,均會(huì)有此問(wèn)題。 那么 CPU 為什么會(huì)去訪問(wèn)此地址呢 ? 其實(shí)這是 M7 內(nèi)核的指令預(yù)取和分支預(yù)測(cè)的特性導(dǎo)致的。

資料預(yù)覽

相關(guān)推薦