今天我會把4G模組的看門狗技術探索分享給大家,希望有所收穫。
一、看門狗電路介紹
看門狗(Watch Dog Timer,WDT)是一種監控電路,主要應用於嵌入式系統,目的是為了提高系統的可靠性和穩定性。在看門狗電路的幫助下,當系統出現異常,如程式跑飛或死迴圈時,能夠自動復位並重新啟動系統。
1.1 看門狗的工作原理
看門狗電路通常包括一個定時器、一個餵狗訊號和一個復位(Reset)輸出。在正常的系統執行過程中,主控制器(MCU)會定期向餵狗訊號傳送一個脈衝,以“喂”看門狗,防止其計時到達預設值。如果 MCU 由於某種原因未能在規定時間內餵狗,看門狗定時器將會計滿並輸出一個復位訊號,將 MCU 復位。
1.2 看門狗的應用架構
在實際應用中,看門狗晶片通常連線到 MCU 的一個 GPIO 埠。MCU 在其正常執行期間會定期向該埠寫入一個高電平或低電平訊號,以此告訴看門狗它仍然正常工作。如果 MCU 未能按時發出訊號,看門狗將觸發復位操作。
1.3 看門狗晶片的功能和硬體
某些看門狗晶片如 TPV6823 具有多個引腳,包括供電引腳(VCC)、餵狗訊號引腳(WDI)、復位輸出引腳(RESETn)和手動復位輸入引腳(MRn)。這些引腳提供了多種復位方式和時間設定,以適應不同的應用需求。
1.4 看門狗的定時時間
看門狗的定時時間通常需要保持在一個相對較長的週期,例如 200 毫秒左右。這樣的設定是為了確保在正常執行中,即使 MCU 由於干擾而未能及時餵狗,看門狗也不會立即復位系統,從而給 MCU 足夠的時間來響應和處理問題。
1.5 看門狗的型別
看門狗可以分為獨立看門狗和視窗看門狗。獨立看門狗的時間精度要求較低,而視窗看門狗則用於時間精度要求較高的場合。
1.6 軟硬體看門狗的區別
硬體看門狗利用獨立的定時器電路來實現監控功能,具有較高的可靠性。軟體看門狗則使用處理器內部的定時器或其他機制來實現,雖然在一定程度上可以簡化硬體設計,但在可靠性方面通常不如硬體看門狗。
總結而言,看門狗是一種重要的系統保護機制,透過定期“餵狗”來確保系統的正常執行。當系統出現異常時,看門狗能夠及時復位系統,防止死迴圈和程式跑飛等情況的發生,從而提高系統的可靠性和穩定性。在實際應用中,開發者需要根據具體需求選擇合適的看門狗解決方案,並設定適當的時間引數,以實現最佳的保護效果。
二、演示功能概述
本文演示主要透過 Air780E 核心板和 LuatOS 系統,介紹如何使用看門狗定時器(WDT)庫來防止嵌入式裝置當機。看門狗電路是一種監控電路,主要應用於嵌入式系統,目的是為了提高系統的可靠性和穩定性。在看門狗電路的幫助下,當系統出現異常時,如程式跑飛或死迴圈,能夠自動復位並重新啟動系統。
演示分為兩個部分:正常執行情況和故障場景模擬。
在正常執行情況下,示例程式碼會初始化看門狗庫,並設定超時時間和餵狗週期。然後,建立一個任務,該任務會定期餵狗,以防止看門狗定時器超時。如果看門狗定時器超時,系統將自動重啟。
在故障場景模擬部分,我們新增了一個新的任務 fault_task,該任務進入一個死迴圈,不進行餵狗操作。這樣,當看門狗定時器超時後,系統將自動重啟,模擬了裝置在故障場景下的自動恢復能力。
透過這個演示,我們可以看到看門狗定時器在嵌入式系統中的重要作用,它能夠有效防止系統當機,提高系統的穩定性和可靠性。
三、演示硬體環境
3.1 開發板
本文以Air780E核心板為例,
此核心板的詳細使用說明參考:
https://docs.openluat.com/air780e/product/
Air780E 產品手冊 中的 《開發板Core_Air780E使用說明VX.X.X.pdf》,寫這篇文章時最新版本的使用說明為:《開發板Core_Air780E使用說明V1.0.5.pdf》 ;若在使用過程中遇到任何問題,可以直接參考這份使用說明 PDF 文件。
3.2 SIM 卡
在中國大陸環境下,使用移動,電信,聯通的物聯網路卡或者手機卡都可以。
3.3 PC 電腦
WIN7以及以上版本的WINDOWS系統。
3.4 資料通訊線
- USB 轉 Type-C 資料線
它的一端是 USB 介面,另一端是 Type-C 介面。
四、演示軟體環境
4.1 Luatools 下載除錯工具
Luatools 工具支援最新韌體獲取、韌體打包、trace 列印及單機燒錄等功能。
工具使用說明參考:
Luatools 下載和詳細使用:
https://docs.openluat.com/Luatools/
4.2 原始碼及韌體
1)底層 core 下載地址:LuatOS 韌體版本下載地址:https://docs.openluat.com/air780e/luatos/firmware/
本 demo 使用的韌體是 core_V1112 壓縮包 內的 LuatOS-SoC_V1112_EC618_FULL.soc
2) demo 位置
本 demo 主要用於演示如何在 LuatOS 系統中使用看門狗定時器(wdt)庫來防止裝置當機。
demo位置:https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/wdt
3)原始碼及韌體已打包壓縮,如下所示
壓縮包中 core 資料夾存放的是韌體,code 資料夾存放的是指令碼程式碼。
五、軟硬體資料
5.1 watchdog 操作庫介紹
5.1.1 watchdog 庫介紹
該庫提供了一系列用於管理和操作看門狗定時器的 API 函式,使得開發者可以方便地在 LuatOS 系統中管理看門狗定時器,從而提高裝置的穩定性。
5.1.2 API 介面介紹
本教程所使用API介面參考:
https://wiki.luatos.com/api/wdt.html?highlight=watchdog
5.2 Air780E 核心板燒錄說明
5.2.1 選擇韌體和指令碼
1)開啟 Luatools 工具
2)點選 專案管理測試
3)根據圖示操作
注意,大家只需要跟著做到第四步即可,第五步跟著後面的操作再做。
5.2.2 燒錄
1)將 Air780E 核心板透過 USB 資料線連線至電腦,如下圖所示:
2)根據下方操作進行燒錄
此時就需要大家先點選 Luatools 工具上的 下載底層與指令碼/下載指令碼,再執行下方操作了。
開發板處於未開機狀態:此時先按住下載模式按鍵(BOOT 鍵)不放,再長按開機鍵(POW 鍵)開機,若不出意外開發板將會進入下載模式,Luatools 工具下載進度條會開始跑,這時便可以鬆開 BOOT 鍵和 POW 鍵,等到工具提示下載完成即可。
開發板已經處於開機狀態:此時可以先按住 BOOT 鍵不放,再短按復位鍵(RST 鍵)後開發板會重啟並進入下載模式。
5.2.3 不同模式下的埠顯示
1) 正常開機模式
2)下載模式
六、功能驗證
6.1 程式正常執行
6.1.1 示例程式碼介紹
1)專案資訊:
在開頭定義了專案名稱(PROJECT)和版本(VERSION),並透過日誌輸出這些資訊。
2)引入系統庫:
透過 require("sys") 引入了 sys 庫,這是 LuatOS 中常用的系統庫。
3) 任務初始化:
使用 sys.taskInit 函式建立一個新的任務。在任務中檢查 wdt 庫是否可用,如果不可用,則進入一個無限迴圈,每秒鐘輸出一次提示資訊。
4)wdt 配置:
初始化 wdt 庫,設定超時時間為 9 秒。
設定一個定時器每 3 秒喂一次看門狗,確保裝置在正常執行的情況下不會重啟。
說明了若發生軟體崩潰或硬體故障,最多 18 秒後將自動重啟裝置。
5)執行系統:
最後透過 sys.run() 啟動系統,後面不應新增任何其他語句。
6.1.2 完整程式碼展示
6.1.3 執行結果展示
透過 Luatools 工具檢視日誌
6.2 新增死迴圈模擬故障場景
6.2.1 示例程式碼介紹
我們在原有示例程式碼中建立了一個新的任務,命名為 fault_task,它將進入一個死迴圈。由於這個新任務不會喂看門狗,裝置將在超時後自動重啟。這樣,我們就可以有效地模擬看門狗的超時情況。
6.2.2 完整程式碼展示
6.2.3 執行結果展示
七、總結
本次演示透過 Air780E 核心板和 LuatOS 系統,詳細介紹瞭如何使用看門狗定時器(WDT)庫來防止嵌入式裝置當機。看門狗電路作為一種重要的系統保護機制,能夠在系統異常時自動復位並重新啟動系統,從而提高系統的可靠性和穩定性。
在演示中,我們首先介紹了看門狗的工作原理、應用架構、定時時間設定以及軟硬體看門狗的區別。接著,我們透過實際操作,展示瞭如何在一個簡單的 LuatOS 專案中整合看門狗定時器,並設定了適當的引數來確保系統在正常執行和故障場景下都能自動恢復。
透過本次演示,我們深入理解了看門狗定時器在嵌入式系統中的工作原理和應用價值,以及在實際專案中如何有效地利用看門狗庫來提高系統的穩定性和可靠性。這對於嵌入式系統開發者來說,是一個具有重要意義的技能。
八、擴充套件
8.1 看門狗定時器的應用場景
看門狗定時器廣泛應用於各種嵌入式系統和物聯網裝置中,特別是在需要高可靠性的應用場景中。一些典型的應用場景包括:
1)工業控制系統:在工業生產過程中,控制系統需要高度穩定和可靠,看門狗定時器可以確保系統在受到干擾或異常情況時能夠迅速恢復。
2)車載電子系統:車載電子系統面臨著複雜的電磁環境和振動,看門狗定時器可以幫助系統在上電覆位後保持穩定執行,防止因軟體或硬體故障導致的系統當機。
3)醫療裝置:醫療裝置對穩定性和可靠性有很高的要求,看門狗定時器可以確保裝置在長時間執行過程中不會因為故障而停止工作,從而保障患者的安全和裝置的連續性。
4)通訊裝置:在通訊系統中,看門狗定時器可以用於監控和保護網路裝置,確保資料傳輸的穩定性和可靠性。
8.2 看門狗定時器的設計考慮因素
在設計和實現看門狗定時器時,需要考慮以下幾個關鍵因素:
1)超時時間:超時時間是指看門狗定時器從開始計時到觸發復位訊號的時間間隔。這個時間需要根據具體應用的需求來設定,通常需要平衡系統的穩定性和響應速度。
2)餵狗週期:餵狗週期是指主控制器向看門狗晶片傳送脈衝的時間間隔。餵狗週期應該設定得足夠短,以防止看門狗定時器在正常執行中誤觸發復位。
3)看門狗復位輸出:看門狗定時器通常具有一個復位輸出引腳,用於向主控制器提供復位訊號。在設計時,需要確保復位輸出引腳的電平和主控制器的復位輸入引腳相容。
4)功耗:在設計看門狗定時器時,需要考慮其功耗,特別是在低功耗應用中。選擇低功耗的看門狗晶片和合理的電源設計對於系統的整體功耗至關重要。
5)相容性和可擴充套件性:在設計看門狗定時器時,需要考慮其與其他系統的相容性和可擴充套件性。確保看門狗定時器能夠與其他硬體和軟體元件無縫整合,並在未來需要時能夠輕鬆擴充套件或升級。
透過綜合考慮這些因素,開發者可以設計和實現一個穩定、可靠且高效的看門狗定時器解決方案,以確保嵌入式系統的正常執行和資料傳輸的穩定性。
九、常見問題
9.1 看門狗定時器是如何工作的?
看門狗定時器透過主控制器定期向其傳送脈衝訊號來保持計時。如果主控制器在規定時間內未能傳送脈衝,看門狗定時器將觸發復位訊號,將主控制器復位。
9.2 如何配置看門狗定時器的超時時間和餵狗週期?
在LuatOS等嵌入式作業系統中,看門狗定時器的超時時間和餵狗週期通常透過API函式進行配置。可以根據具體應用的需求來設定合適的時間間隔。
若使用本文中所提到的watchdog操作庫,可按照以下步驟進行配置:
1)初始化看門狗:
使用 wdt.init(timeout) 函式來初始化看門狗定時器,timeout 引數是超時時長,單位為毫秒。例如,如果你希望看門狗的超時時間為9000毫秒,可以這樣呼叫:
2)設定看門狗超時時間(可選):
如果裝置支援,可以呼叫 wdt.setTimeout(timeout) 來重新設定看門狗的超時時長,單位同樣為毫秒。例如:
3)定期餵狗:
使用 wdt.feed() 函式來餵狗,以重置超時計時。建議使用定時器定期呼叫這個函式。例如,使用系統定時器每3000毫秒喂一次狗,可以這樣設定:
透過以上步驟,你可以成功配置看門狗定時器的超時時間和餵狗週期,確保裝置不會因為未餵狗而重啟。
分享完畢。