在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

STM32單片機(jī) ? 來源:未知 ? 2023-01-07 12:55 ? 次閱讀

關(guān)鍵詞:死機(jī), 外擴(kuò) FLASH

目錄預(yù)覽

1. 問題現(xiàn)象

2. 問題分析及測試

3. 后記

1.問題現(xiàn)象

客戶使用 STM32H750VBT6,通過 QSPI 外擴(kuò)了一個(gè) 4M 的 NOR FLASH,采用memory map 模式。當(dāng)程序跳轉(zhuǎn)運(yùn)行到外設(shè) FLASH 后,大約兩個(gè)小時(shí)后程序死機(jī)。

客戶使用的 IDE 是 KEIL,此問題可以固定重現(xiàn)。在 KEIL 調(diào)試模式下重現(xiàn)問題時(shí),通過多次觀察發(fā)現(xiàn),程序死的位置總體上會停在兩個(gè)位置,并不是同一個(gè)位置。一個(gè)是 TIM15函數(shù)的入口;另一個(gè)是進(jìn)入中斷函數(shù)后的一個(gè)賦值語句。

2.問題分析及測試

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

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

上面是一些硬件相關(guān)的懷疑點(diǎn),從測試結(jié)果來看,與此問題無關(guān)。看來主要可能還是軟件方面的問題。在軟件上確定客戶已經(jīng)打開了 IO 補(bǔ)償功能, IO 速度設(shè)置的是 HIGH,即使讓客戶修改成 “VERY_HIGH”,經(jīng)測試問題仍然存在。

由于之前發(fā)生過一個(gè)從低功耗喚醒后死機(jī)的問題,是與 Cache 相關(guān)的問題,于是測試將 CACHE 關(guān)閉的情況。這次經(jīng)測試客戶反饋問題沒再重現(xiàn) !

但客戶同時(shí)也反饋,之前的代碼也存在稍微修改一處代碼,問題就不再重現(xiàn)的現(xiàn)象,沒有找到具體規(guī)律。

這次代碼修改也沒排除這種可能性。為了讓關(guān)閉 Cache 的方法更具說服力,于是讓客戶在調(diào)試模式下通過手動關(guān)閉 CACHE的方式,代碼仍然保持為原先可以重現(xiàn)問題的代碼。如下圖所示 :

4445814e-8e47-11ed-bfe3-dac502259ad0.png

如上圖所示,在代碼運(yùn)行到使用 CACHE 后一行設(shè)置斷點(diǎn),當(dāng)程序停下來后,打開 Sys Ctrl/Cfg 窗口(菜單 view->system viewer->Core peripherals->system control and configuration),將對應(yīng)的位去掉。最終客戶反饋,關(guān)閉 DC,或者 IC 任何一個(gè)或者兩個(gè)都關(guān)閉,問題現(xiàn)象消失。至此可以確定地是,此問題與 CACHE 相關(guān) !

于是查看客戶的 MPU 相關(guān)配置,并將 Cube 包里的 H750 示例工程中的 MPU 配置發(fā)給客戶測試下,但問題仍然存在。

接下來查看勘誤手冊,發(fā)現(xiàn) 2.4.4 節(jié)有 QSPI 相關(guān)的內(nèi)容:

44ad7592-8e47-11ed-bfe3-dac502259ad0.png

這里有提到在 QSPI 外設(shè) FLASH 并工作在 memory-mapped 模式的時(shí)候,當(dāng)讀取由FSIZE 定義的最后一個(gè)字節(jié)的時(shí)候,不管內(nèi)容如何,有可能會導(dǎo)致 AXIs 總線 STALL 掉。

并同時(shí)給出了三種規(guī)避措施。其中第一種是將 FSIZE 定義得比實(shí)際大,以留有足夠的裕量。于是讓客戶修改代碼:在 QSPI 初始化時(shí)將 size 設(shè)置成大一倍:

面紅色部分表示的 nor flash 設(shè)置成實(shí)際的兩倍大小。

同時(shí)考慮到此處定義了實(shí)際兩倍大小的 FLASH,多出來的另外一半實(shí)際是不存在的,為了避免 CPU 意外訪問這個(gè)實(shí)際不存在的區(qū)域,使用 MPU“告訴”CPU 這多出來的一半?yún)^(qū)間是不可訪問的。

于是 MPU 按如下來配置:

使用串口終端工具,分別連接 USART1,USART3,發(fā)送對應(yīng)的 UART Bootloader 命令,得到下圖 3 的命令交互。

圖3.MPU 配置

4525955e-8e47-11ed-bfe3-dac502259ad0.png

客戶再次測試,問題不再重現(xiàn)。為了進(jìn)一步驗(yàn)證問題,客戶嘗試按原先的代碼直接讀取 NOR FLASH 的最后一個(gè)字節(jié),問題還會重現(xiàn),再次驗(yàn)證此方法的有效性,至此問題解決。

3.后記

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

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

在 M7 編程手冊中可以找到如下內(nèi)容:

45d8a81a-8e47-11ed-bfe3-dac502259ad0.png

正是上述特性才導(dǎo)致 CPU 會提前訪問 NOR FLASH 上的地址,即使當(dāng)前 PC 指針還未指到那里。我們可以通過合適的MPU配置防止因試探性訪問外存而導(dǎo)致問題。

參考文獻(xiàn):

1. PM0235:STM32F7 Series and STM32H7 Series Cortex-M7 processor programming manua.

2. ES0396:STM32H750xB and STM32H753xI device limitations.

3. AN4838:Managing memory protection unit in STM32 MCUs.

4. AN4893:Level 1 cache on STM32F7 Series and STM32H7 Series.

45e849be-8e47-11ed-bfe3-dac502259ad0.png

長按掃碼關(guān)注公眾號

更多資訊,盡在STM32

點(diǎn)擊“閱讀原文”,可下載原文檔


原文標(biāo)題:工程師筆記|程序運(yùn)行在 STM32H750 的外擴(kuò) FLASH 上兩小時(shí)后死機(jī)

文章出處:【微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6040

    文章

    44604

    瀏覽量

    637068
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10918

    瀏覽量

    356832

原文標(biāo)題:工程師筆記|程序運(yùn)行在 STM32H750 的外擴(kuò) FLASH 上兩小時(shí)后死機(jī)

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32H750在-40℃環(huán)境下程序在串口初始化階段跑飛了怎么處理?

    STM32H750,主頻設(shè)置為400MHz,常溫下可以正常工作,低溫-40℃時(shí),程序在初始化階段跑飛,用仿真器連接進(jìn)行調(diào)試,單步運(yùn)行在串口初始化函數(shù)處報(bào)錯(cuò): Target
    發(fā)表于 07-04 06:35

    STM32H750DMA+SPi內(nèi)存數(shù)據(jù)不一致的原因?

    發(fā)現(xiàn)用stm32H750 dma+spi讀寫數(shù)據(jù)時(shí)發(fā)現(xiàn)當(dāng)spi速度大于8M時(shí)出現(xiàn)內(nèi)存不一致的問題,我再讀之前已經(jīng)用SCB_CleanInvalidateDCache_by_Addr這個(gè)函數(shù)無效化內(nèi)存了,速度小于8M時(shí)沒有這個(gè)問題,我這個(gè)程序
    發(fā)表于 05-24 07:53

    如何提快STM32H750的DMA中斷響應(yīng)時(shí)間?

    STM32H750程序在外部FLash運(yùn)行,中斷程序是在RAM中。測試中斷響應(yīng)時(shí)間有1us多,怎樣能縮短這個(gè)時(shí)間。 上面的響應(yīng)時(shí)間指的是觸發(fā)
    發(fā)表于 05-20 08:19

    STM32H750可以仿真但運(yùn)行又進(jìn)不了main是為什么?

    STM32H750遇到可以仿真,但運(yùn)行又進(jìn)不了main的情況 仿真可以正常運(yùn)行,但直接運(yùn)行時(shí)就進(jìn)不了main(),請問有兄弟遇到相同情況嗎
    發(fā)表于 04-16 06:10

    測試LWIP UDP(STM32H750)接收接收5913及以上,5秒左右就進(jìn)入HardFault_Handler死機(jī)狀態(tài)的原因?

    請問測試原子的例子 lwip_udp_iperf(STM32H750/STM32H743)接收接收5913及以上,5秒左右就進(jìn)入HardFault_Handler死機(jī)狀態(tài),有誰碰到過類似問題嗎?
    發(fā)表于 04-15 07:12

    STM32H750不能使用IAR進(jìn)行仿真是為什么?

    大家好,我現(xiàn)在正在使用STM32H750,使用的IDE 是IAR 現(xiàn)在在進(jìn)行Debug的時(shí)候遇到一個(gè)問題,由于使用了QSPI-flash,現(xiàn)在程序可以下載,但是不能仿真,是參照CebuMX的例程寫的,想請教下有沒有前輩遇到過這個(gè)
    發(fā)表于 04-09 08:14

    STM32H750如何使用IAR調(diào)試運(yùn)行在外部SDRAM的程序?

    正在使用STM32H750開發(fā)應(yīng)用。 我的用戶程序,儲存在QSPI Flash中,運(yùn)行在SDRAM中,采用了Bootloader來復(fù)制程序
    發(fā)表于 04-01 07:40

    求助,如何使用openOCD下載程序stm32h750外部flash

    我有一塊stm32h750的核心板,并使用openOCD為它下載程序。我想將程序下載到外部的8MB Falsh中,但我沒有思路該如何做。有沒有朋友能分享下思路? openOCD文檔中有針對st
    發(fā)表于 03-27 06:20

    STM32H750 HAL_MspInit(void)接口中不調(diào)用__HAL_RCC_SYSCFG_CLK_ENABLE(),高溫死機(jī)的原因?

    STM32H750,HAL_MspInit(void)接口中不調(diào)用__HAL_RCC_SYSCFG_CLK_ENABLE(),高溫死機(jī),調(diào)用后高溫不死機(jī),求原因
    發(fā)表于 03-26 06:02

    STM32H750 QSPI flash重映射模式下有方法能實(shí)現(xiàn)讀寫操作嗎?

    STM32H750 QSPI flash重映射模式下有方法能實(shí)現(xiàn)讀寫操作嗎
    發(fā)表于 03-25 08:06

    STM32H750 BootLoader如何重刷?

    STM32H750 BootLoader如何重刷,在哪里可以找到文檔
    發(fā)表于 03-20 06:44

    STM32H750可以使用Cube.AI嗎?

    STM32H750,可以使用Cube.AI嗎
    發(fā)表于 03-19 06:14

    stm32H750使用FreeRTOS有時(shí)死機(jī)的原因?

    stm32H750使用FreeRTOS,偶爾會出現(xiàn)所有線程停止運(yùn)行的狀況(流水指示燈不閃,程序不跑),此時(shí)點(diǎn)擊觸摸屏觸發(fā)一下串口中斷,所有的線程又會恢復(fù)運(yùn)行,從堆棧調(diào)用情況看,有點(diǎn)像是
    發(fā)表于 03-18 07:54

    STM32H750通過spi向stm32發(fā)送同步幀,無法收到從機(jī)應(yīng)答是怎么回事?

    翻閱應(yīng)用筆記AN4286與AN2606,得知STM32H750自帶的Bootloader支持spi燒錄。可在實(shí)際嘗試中,通過spi向stm32發(fā)送同步幀,無法收到從機(jī)應(yīng)答。 H750
    發(fā)表于 03-07 06:45

    stm32h750如何使用個(gè)usb口?

    我現(xiàn)在在使用stm32h750芯片,想要使用個(gè)usb口,一個(gè)作為device連接電腦,一個(gè)作為host連接u盤。spi之類的都有需要spi1 spi2這種,但是并不明白我這個(gè)usb怎么做,好像
    發(fā)表于 02-26 06:51
    主站蜘蛛池模板: 乱妇伦小说| 成人亚洲欧美综合| 福利视频自拍| dvd碟片色爱| 日日噜噜爽爽狠狠视频| 五月婷婷深爱五月| 亚洲天堂二区| 国产福利2021最新在线观看| 91学院派女神| 992tv国产精品福利在线| 国产精品久久久亚洲456| se综合| 4438x成人免费| 激情婷婷综合久久久久| 午夜免费福利片观看| 日韩中文视频| 狠狠干伊人网| 精品欧美一区二区三区在线观看| 国模视频在线| 天天干夜夜噜| 手机看片福利盒子久久| 午夜视频1000| 午夜影院欧美| 精品久草| 成人午夜大片免费视频77777| 激情在线网站| 男啪女视频免费观看网站| 美女露出扒开尿口让男人桶| 五月婷婷狠狠| 免费观看a毛片一区二区不卡| 成人亚洲视频| 黄a视频| 男女视频在线看| 日韩免费在线视频| 国产精品免费拍拍拍| 成人毛片在线播放| 色图插插插| 在线观看免费av网| 亚洲成a人片在线网站| 天天噜噜噜| 天天看片天天操|