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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

S32K146的hard fault問題解決方案

CHANBAEK ? 來源:Auto FAE進階之路 ? 作者: Yingming ? 2023-11-22 11:35 ? 次閱讀

1案例背景

最近有個客戶使用S32K146的產品在量產之后出現了三個售后件,ABBA測試之后的結果表明失效現象跟著S32K146走;同時客戶反饋說試著將其中一個售后件重新燒錄程序,S32K146又正常工作了。結合這兩種情況,S32K146應該是沒有損壞的,那就需要從軟件程序方面排查了。

然后和客戶的軟件工程師交流了一下,使用Attaching to Running Target的方式發現程序卡死在HardFault。因為是量產產品出問題,客戶強烈要求去現場處理問題,特地記錄下這次處理S32K146的hard fault問題的過程,希望對讀者有幫助。

2方案準備

在這之前,筆者還沒有處理過S32K1系列發生HardFault的問題,所以需要先對S32K1系列發生HardFault的原因進行了解。推薦如下這篇文章,講得非常細致。

結合上面這篇文章以及ARM官方的M4內核文檔Cortex -M4 Devices Generic User Guide ^[1]^ ,筆者簡要整理了下S32K1發生HardFault的可能原因以及排查方式,如下文所述。

2.1 HardFault(硬件錯誤異常)

  • HardFault的可能原因
    1. 停止調試關閉時發生了調試事件;
    2. UsageFault、BusFault、MemManage Fault未使能(Coretex-M4F內核默認狀態)時發生了相應的錯誤導致錯誤升級到HardFault;
    3. 異常處理過程中取內核中斷向量表讀操作錯誤。
  • HardFault的原因排查 造成HardFault的原因,可通過SCB模塊的硬件錯誤狀態寄存器(HFSR)進行排查,如下所示:
    • 原因1引起的,DEBUGEVT bit置1;
    • 原因2引起的,FORCED bit置1;
    • 原因3引起的,VECTTBL bit置1。

圖片
HFSR寄存器

2.2 UsageFault(用法錯誤異常)

  • UsageFault的可能原因
    1. 執行未定義指令,即非法指令;
    2. 指令執行狀態錯誤;
    3. 異常返回錯誤;
    4. 嘗試訪問關閉或者不可用的協處理器
    5. 非對齊地址訪問(需要先通過SCB模塊的CCR寄存器進行使能);
    6. 除零操作(需要先通過SCB模塊的CCR寄存器進行使能)。
  • UsageFault的原因排查 造成UsageFault的原因,可通過SCB模塊的用法錯誤狀態寄存器(UFSR)進行排查,如下所示:
    • 原因1引起的,UNDEFINSTR bit置1;
    • 原因2引起的,INVSTATE bit置1;
    • 原因3引起的,INVPC bit置1;
    • 原因4引起的,NOCP bit置1;
    • 原因5引起的,UNALIGNED bit置1;
    • 原因6引起的,DIVBYZERO bit置1。

圖片
UFSR寄存器

2.3 BusFault(總線錯誤異常)

  • BusFault的可能原因

    • a. 異常/中斷入口壓棧;
    • b. 異常/中斷返回出棧;
    • c. 預取指;
    • d. FPU lazy state現場保護;
    1. Crossbar總線矩陣slave端口返回錯誤響應,當:
    2. 精確總線錯誤;
    3. 不精確總線錯誤。
  • BusFault的原因排查 造成BusFault的原因,可通過SCB模塊的總線錯誤狀態寄存器(BFSR)進行排查,如下所示:

    • 原因1.a引起的,STKERR bit置1;
    • 原因1.b引起的,UNSTKERR bit置1;
    • 原因1.c引起的,IBUSERR bit置1;
    • 原因1.d引起的,LSPERR bit置1;
    • 原因2引起的,PRECISERR bit置1;
    • 原因3引起的,IMPRECISERR bit置1。

圖片
BFSR寄存器

2.4 MemManage Fault(存儲器管理錯誤異常)

  • MemManage Fault的可能原因
    1. 嘗試加載和儲存內核MPU保護的地址;
    2. 從內核MPU保護的地址取指;
    3. 由MPU違規引起的壓棧和出棧(函數調用或者中斷/異常處理)錯誤;
    4. 硬件FPU lazy state保護觸發的MPU存儲器保護違規。
  • MemManage Fault的原因排查 造成MemManage Fault的原因,可通過SCB模塊的存儲器管理錯誤狀態寄存器(MMFSR)進行排查,如下所示:
    • 原因1引起的,DACCVIOL bit置1;
    • 原因2引起的,IACCVIOL bit置1;
    • 原因3引起的,MSTKERR或MUNSTKERR bit置1;
    • 原因4引起的,MLSPERR bit置1;

圖片
MMFSR寄存器

UFSR、BFSR、MMFSR寄存器都是SCB模塊中CFSR寄存器的子寄存器,包含關系如下,實際調試時查看CFSR寄存器即可。

圖片
CFSR寄存器

如果要訪問UFSR、BFSR、MMFSR這些子寄存器,可以按照如下的地址進行訪問:

圖片
CFSR子寄存器地址

3現場支持

了解了引起HardFault的可能原因以及排查方式之后,就是按照該方法協助客戶進行原因排查。

3.1 現場環境

客戶的現場環境如下:

  • 開發環境:IAR 8.30.1
  • 調試器:Jlink V9
  • MCU:S32K146
  • SDK:EAR0.8.6

3.2 排查過程

  1. 打開和異常件對應的軟件工程,使用Attach方式連接上第一個異常件的主控S32K146,如下圖所示:圖片
  2. 進入仿真界面后,暫停之后發現程序卡死在hard fault。
  3. 查看S32的SCB模塊,HFSR寄存器的FORCED bit置1,說明是其它錯誤上升到hard fault,需要查看CFSR寄存器了解更多信息。圖片
  4. CFSR寄存器的BFARVALID bit 和PRECISERR bit都置1,說明是精確總線錯誤造成bus fault并且捕捉保存了精確總線錯誤發生時的數據訪問地址;再去查看BFAR寄存器,發生錯誤時數據訪問的地址是0x100010E8。圖片
  5. 使用同樣的方法排查第二個異常件的主控MCU,也是精確總線錯誤造成的bus fault,發生錯誤時數據訪問的地址是0x10001128。圖片
  6. 接著通過IAR查看下S32K146的memory,從地址0x10001128起始的8個字節長度的flash區域數據無法查看。圖片
  7. 翻閱S32K1的memory相關的應用筆記AN11983: Using the S32K1xx EEPROM Functionality – Application Note ^[2]^ ,發生錯誤的地址屬于D-Flash,如下圖所示:

圖片
S32K1xx Memory Map

  1. 查閱軟件代碼中讀寫DFlash中這塊地址的函數,發現在寫DFLASH之前雖然進行了擦寫操作,但是并沒有設置擦寫成功之后才能寫DFlash的條件,有概率出現擦寫不完全的情況下寫D-Flash。同時,客戶查看了其他組未出問題的產品的軟件代碼,在寫D-Flash之前添加了比較多的條件判斷,包含對擦寫狀態的判斷。至此,該問題初步得到解決,剩下的就是優化代碼并跟進后續產品的表現了。

4異常模擬

客戶的問題雖然解決了,但是筆者還是不確定連續兩次對同一塊區域的Flash寫不同的值,中間沒有擦除動作,是否會讓MCU卡在HardFault,所以使用手上的S32K144開發板進行了該情況的模擬。

4.1 測試環境

  • 開發環境:S32 Design Studio for ARM 2.2
  • SDK:RTM 3.0.0
  • 開發板:S32K144EVB-Q100

4.2 測試過程

  1. 打開S32DS 2.2,選擇自帶的例程 flash_partitioning_s32k144圖片
  2. 將初始化模擬EEPROM的部分注釋掉,避免D-Flash被用作模擬EEPROM的備份區從而無法進行讀寫測試。圖片
  3. 定義一套新數組并儲存新的數據用于測試。圖片
  4. 在正常的D-Flash寫之后增加寫入不同數據的操作。圖片
  5. 編譯之后進行debug,單步調試發現如果只進行寫不同數據進入D-Flash,S32K144不會進入HardFault,需要再執行讀D-Flash的操作,才會進入HardFault。圖片

如果想要了解讀取Flash地址的數據才會發生HardFault的原因。

  1. S32DS之所以能在控制臺顯示比較多的MCU異常信息,是因為在調試器界面使能了異常捕捉功能,這部分功能依賴的是DEMCR寄存器,如下圖所示。

圖片
異常捕捉配置

圖片
DEMCR寄存器

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9259

    瀏覽量

    372939
  • 寄存器
    +關注

    關注

    31

    文章

    5396

    瀏覽量

    122529
  • 內核
    +關注

    關注

    3

    文章

    1402

    瀏覽量

    40882
  • 軟件
    +關注

    關注

    69

    文章

    5082

    瀏覽量

    88708
  • 燒錄程序
    +關注

    關注

    0

    文章

    20

    瀏覽量

    9428
收藏 人收藏

    評論

    相關推薦

    如何在S32K146中實現以下功能?

    原來有一個項目芯片是MPC5606B(CodeWarrior編譯器),現在換成S32K146S32DS ARM),其中有段代碼移植遇到了些問題,請問如何在S32K146中實現以下功能,請幫忙
    發表于 04-04 08:00

    s32k146如何初始化RAM?

    我在當前項目中使用 s32k146。因為我需要初始化 RAM,除了上電復位之外的每次復位的特定部分。(On Power On Reset 應初始化所有數據)。有什么辦法可以做到這一點嗎?
    發表于 03-31 07:36

    S32K146 UART DMA使用問題求解

    項目簡介:1.采用S32K146單片機;2. 使用了很多MCU外設,比如UART(BR: 230000bps), CAN, I2C, GPIO, LPIT, LPTMR, FTM(2 modules
    發表于 04-04 06:29

    S32K146微控制器的啟動時鐘配置在哪個文件中?

    S32K146 微控制器的啟動時鐘配置在哪個文件中?如果可能,請提供配置代碼示例。
    發表于 04-10 06:53

    使用S32K146時想添加SCST內核自檢代碼進行內核檢測,要怎么實現?

    使用S32K146時想添加SCST內核自檢代碼進行內核檢測,現在使用IDE S32DS,使用API??調用測試函數時發現測試中m4_scst_exception_hard_fault1出現異常導致
    發表于 04-14 07:42

    請問S32K146使用的SDK可以集成FreeRTOS10.5.1嗎?

    我們使用的芯片是S32K146,我們使用的SDK是RTM4.0.3版本。集成的 FreeRTOS 版本為 10.2.1。在Free RTOS官網上,Free RTOS Kernel的最新版
    發表于 04-14 07:16

    將處理器類型從S32K144更改為S32K146,無法更改SDK是為什么?

    在我的項目中,我將處理器類型從 S32K144 更改為 S32K146。 這一切都有效,直到我無法更改 SDK。在工程樹中的SDK路徑中就是右邊的S32K146 MCU。我還更改了預處理器的定義符號
    發表于 04-19 11:39

    S32K146評估板上是否有可用的外部振蕩器?

    S32K146評估板上是否有可用的外部振蕩器。
    發表于 04-20 07:44

    s32k146如何識別硬故障源?

    我已經添加了以下鏈接中提到的調試例程: 我正在使用 s32k146 ARM 的 S32 設計工作室 版本:2018.R1 內部版本號:180815 我得到固定值 r1
    發表于 04-25 06:48

    如何使用S32K146定期對單個ADC通道進行采樣?

    我正在使用 S32K146 微控制器,并希望設置單個 ADC 通道的定期采樣。有沒有一種方法可以在此微控制器上實現定期采樣,也許使用 PDB?我回顧了使用PDB觸發ADC轉換的ADC硬件觸發方法
    發表于 05-30 12:30

    S32K146如何用中斷喚醒VLPS模式?

    S32K146的模式設置為VLPS后,觸發外部中斷后CLOCK_SYS_GetFreq獲取的頻率沒有變化,如何使用中斷將電源模式從VLPS恢復為RUN?
    發表于 06-01 08:13

    記錄一次hard fault on handler的解決過程

    最近在做一個OTA的功能時,遇到一個hard fault on handler的問題,前前后后排查了將近2天,才將此問題解決,因此做一個記錄,方便其它工程師,遇到此類問題的時候有個參考。
    的頭像 發表于 10-12 16:45 ?3916次閱讀
    記錄一次<b class='flag-5'>hard</b> <b class='flag-5'>fault</b> on handler的解決過程

    MLCC斷裂問題解決方案

    MLCC斷裂問題解決方案
    的頭像 發表于 10-16 09:43 ?951次閱讀

    S32K146 RT-thread】之 SPI驅動適配

    概述RT-Thread對SPI總線的驅動,抽象出了spibus的設備驅動,我們基于S32K146的硬件學習spibus設備驅動。
    的頭像 發表于 11-01 08:11 ?987次閱讀
    【<b class='flag-5'>S32K146</b> RT-thread】之 SPI驅動適配

    S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發表于 11-21 01:05 ?847次閱讀
    【<b class='flag-5'>S32K146</b> RT-Thread】之 使用SFUD組件驅動spi flash
    主站蜘蛛池模板: 一级特黄aaa大片在线观看 | 自拍偷拍福利视频 | 婷婷开心六月久久综合丁香 | 草逼网址 | 日本69sex护士hd | 亚洲一区中文字幕在线观看 | 欧美视频a| 久久久免费观看 | 欧美宗合网 | 男女爱爱爽爽福利免费视频 | 五月天婷婷网站 | 国内真实下药迷j在线观看 国内自拍 亚洲系列 欧美系列 | 中文字幕一区二区三区视频在线 | 老色批软件 | 国产成人永久免费视频 | 亚洲人成电影在线 | 国产综合精品久久亚洲 | 丁香六月五月婷婷 | 欧美xxxxx性视频 | 欧美精品一区二区三区在线播放 | 222网站高清免费观看 | 国产视频每日更新 | 五月婷婷丁香久久 | 唐人呦一呦xxxx视频 | 精品毛片视频 | chinese国产videoxx实拍 | 性过程很黄的小说男男 | 成年人黄色片视频 | 日韩加勒比在线 | 四虎.com| 色综合天天综合网看在线影院 | 香港日本三级在线播放 | 国产在线精品观看一区 | 日本一区二区三区视频在线观看 | 在线观看亚洲专3333 | www.亚洲日本 | 成片免费的禁v影片 | 久久精品人人爽人人爽快 | 国产精品露脸脏话对白 | 黄色大片视频网站 | 亚洲第一成人影院 |