chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

T113-I打造高可靠性嵌入式系統(tǒng),1.12秒極限下的看門狗喂狗之法

眺望電子 ? 2025-08-22 08:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


前言:

嵌入式系統(tǒng)使用中,看門狗(Watchdog)是保障系統(tǒng)穩(wěn)定性的重要機(jī)制之一,守護(hù)著系統(tǒng)的穩(wěn)定運(yùn)行。常規(guī)實(shí)現(xiàn)是通過(guò)應(yīng)用層參與喂狗操作,存在不穩(wěn)定因素,也無(wú)法處理系統(tǒng)啟動(dòng)過(guò)程中的異常。本文將分享一種在T113-I平臺(tái)上實(shí)現(xiàn)的uboot至kernel看門狗無(wú)縫銜接技術(shù),且做到系統(tǒng)全自動(dòng)喂狗,真正保障系統(tǒng)的高可靠性。


一、難點(diǎn)分析

實(shí)現(xiàn)從上電開(kāi)始的系統(tǒng)全自動(dòng)喂狗機(jī)制,可以確保系統(tǒng)在任何階段都不會(huì)因看門狗超時(shí)而重啟復(fù)位。然而,高可靠的嵌入式系統(tǒng)往往需要監(jiān)管嚴(yán)苛且及時(shí),能夠在異常的第一時(shí)間產(chǎn)生響應(yīng),因此又需要選用超時(shí)時(shí)間極短的看門狗芯片。

喂狗間隙短,從uboot至kernel的無(wú)縫切換便成了橫亙?cè)诟呖煽啃郧度胧较到y(tǒng)設(shè)計(jì)中的一大難題。

二、環(huán)境說(shuō)明

主控平臺(tái):眺望電子AC113I-92M-SNLI工業(yè)級(jí)核心板,基于全志T113-I處理器;

看門狗芯片:思瑞浦(3PEAK)TPV6823S-TR,其復(fù)位時(shí)間為 1.12 秒;


324d779e-7eef-11f0-9080-92fbcf53809c.png

SDK版本:talowe-T113-I-Tina-sdk.tar.gz,

虛擬機(jī)環(huán)境:ubuntu20.04

硬件原理圖:PE1為喂狗引腳


327040e4-7eef-11f0-9080-92fbcf53809c.png


三、方案設(shè)計(jì)

針對(duì) 1.12 秒的復(fù)位時(shí)間限制,制定了如下分階段的實(shí)現(xiàn)方案,確保從 uboot 到 kernel 的全過(guò)程都能及時(shí)喂狗:

階段 1:uboot 電平翻轉(zhuǎn),驗(yàn)證喂狗引腳的控制能力。

階段 2:uboot 喂狗,確保在 uboot 命令行停留時(shí)不會(huì)超時(shí)重啟。

階段 3:kernel 喂狗,保證系統(tǒng)進(jìn)入內(nèi)核后能持續(xù)喂狗。

階段 4:uboot 到 kernel 的無(wú)縫銜接,確保系統(tǒng)從上電到完全啟動(dòng)的整個(gè)過(guò)程中,看門狗不會(huì)超時(shí)重啟。


四、實(shí)現(xiàn)步驟

4.1uboot 電平翻轉(zhuǎn)測(cè)試驗(yàn)證

喂狗引腳為 PE1,我們需要先驗(yàn)證對(duì)該引腳的電平控制能力。通過(guò)查閱《T113-i_User_Manual_V1.5.pdf》,找到 PE 相關(guān)寄存器的地址。

328d0742-7eef-11f0-9080-92fbcf53809c.png

在brandy/brandy-2.0/u-boot-2018/cmd/ 目錄下新建 gpio_toggle.c 文件,編寫(xiě)碼實(shí)現(xiàn) PE1 引腳的輸出模式設(shè)置和電平翻轉(zhuǎn)功能

brandy/brandy-2.0/u-boot-2018/cmd/gpio_toggle.c

#include#include
#defineT113_I_GPIOE_CFG00x020000C0#defineT113_I_GPIOE_CFG10x020000C4#defineT113_I_GPIOE_DAT0x020000D0#defineT113_I_GPIOE_DRV00x020000D4#defineT113_I_GPIOE_DRV10x020000D8#defineT113_I_GPIOE_PULL00x020000E4
intgpio_toggle(cmd_tbl_t*cmdtp,intflag,intargc,char*constargv[]){ printf("## test gpio Toggle...\n");
// 設(shè)置PE1為輸出模式 unsignedint*PE1_CFG0 = (unsignedint*)(T113_I_GPIOE_CFG0); unsignedintPE1_CFG0_val =readl(PE1_CFG0); PE1_CFG0_val &= ~(0xf< // 電平翻轉(zhuǎn) unsignedint*PE1_DAT = (unsignedint*)(T113_I_GPIOE_DAT); unsignedintPE1_DAT_val =readl(PE1_DAT); PE1_DAT_val ^= (0x1< return0;}
U_BOOT_CMD( gpio_toggle,1,0,gpio_toggle, "talowe test gpio Toggle", "no parameters\n");

修改Makefile 和 Kconfig 文件,添加相關(guān)配置

brandy/brandy-2.0/u-boot-2018/cmd/Makefile

obj-$(CONFIG_CMD_GPIO_TOGGLE) += gpio_toggle.o

brandy/brandy-2.0/u-boot-2018/cmd/Kconfig

configCMD_GPIO_TOGGLEbool"GPIO toggle"help Activatethisoption to test GPIO toggle.

配置 sun8iw20p1_auto_t113_i_defconfig選項(xiàng)

上電后按住鍵盤(pán)的 s 進(jìn)入 uboot 命令行,執(zhí)行 gpio_toggle 指令,用萬(wàn)用表測(cè)試 PE1 引腳的電平,可發(fā)現(xiàn)執(zhí)行一次指令,電平狀態(tài)翻轉(zhuǎn)一次,驗(yàn)證成功。

brandy/brandy-2.0/u-boot-2018/configs/sun8iw20p1_auto_t113_i_defconfig

CONFIG_CMD_GPIO_TOGGLE=y

編譯后燒寫(xiě)uboot固件進(jìn)行測(cè)試

在uboot命令行進(jìn)行測(cè)試,上電一直按住鍵盤(pán)的s進(jìn)入uboot命令行,執(zhí)行以下指令

=> gpio_toggle

會(huì)有以下信息輸出,用萬(wàn)用表測(cè)試PE1引腳的電平,發(fā)現(xiàn)執(zhí)行一次翻轉(zhuǎn)一次電平狀態(tài)

32af7cc8-7eef-11f0-9080-92fbcf53809c.png

至此完成驗(yàn)證寄存器翻轉(zhuǎn)電平方案成功,接下來(lái)進(jìn)入下一步。

4.2uboot PE1引腳自動(dòng)喂狗實(shí)現(xiàn)

實(shí)現(xiàn) uboot 自帶的 hw_watchdog 接口,編寫(xiě)代碼完成 PE1 引腳的初始化(設(shè)置為輸出模式)和喂狗操作(電平翻轉(zhuǎn))。

#include#include#include
#defineT113_I_GPIOE_CFG0 0x020000C0#defineT113_I_GPIOE_CFG1 0x020000C4#defineT113_I_GPIOE_DAT 0x020000D0#defineT113_I_GPIOE_DRV0 0x020000D4#defineT113_I_GPIOE_DRV1 0x020000D8#defineT113_I_GPIOE_PULL0 0x020000E4
voidhw_watchdog_reset(void){ if(get_boot_work_mode()) return;
unsignedint*PE1_DAT = (unsignedint*)(T113_I_GPIOE_DAT); unsignedintPE1_DAT_val =readl(PE1_DAT); PE1_DAT_val ^= (0x1<voidhw_watchdog_init(void){ // 設(shè)置PE1為輸出模式 unsignedint*PE1_CFG0 = (unsignedint*)(T113_I_GPIOE_CFG0); unsignedintPE1_CFG0_val =readl(PE1_CFG0); PE1_CFG0_val &= ~(0xf< // 設(shè)置PE1驅(qū)動(dòng)等級(jí)(默認(rèn)為1,可以不用) // unsigned int *PE1_DRV0 = (unsigned int *)(T113_I_GPIOE_DRV0); // unsigned int PE1_DRV0_val = readl(PE1_DRV0); // PE1_DRV0_val &= ~(0x3 << 4*1);? ? // PE1_DRV0_val |= (0x10 << 4*1);? ? // writel(PE1_DRV0_val, PE1_DRV0);
// 設(shè)置PE1電平,由于硬件電路該引腳為高阻,所以一開(kāi)始先翻轉(zhuǎn)下 // unsigned int *PE1_DAT = (unsigned int *)(T113_I_GPIOE_DAT); // unsigned int PE1_DAT_val = readl(PE1_DAT); // PE1_DAT_val ^= (0x1 << 1);? ? // writel(PE1_DAT_val, PE1_DAT);? ? // PE1_DAT_val ^= (0x1 << 1);? ? // writel(PE1_DAT_val, PE1_DAT);
// // 默認(rèn)為無(wú)上下拉,符合需求不用管
hw_watchdog_reset();}

在以下文件新增

1obj-$(CONFIG_T113_I_WATCHDOG_REG) += t113_I_watchdog_reg.o

config T113_I_WATCHDOG_REGbool"T113_I hw watchdog"depends on ARCH_SUNXIselectHW_WATCHDOGhelp Say Y here toenablethe T113_I hw watchdog driver.

在相關(guān)配置文件中添加該看門狗驅(qū)動(dòng)的配置選項(xiàng),然后修改全志板級(jí)文件 board.c,在板級(jí)初始化過(guò)程中調(diào)用 hw_watchdog_init () 函數(shù),新增PE1的初始化調(diào)用,開(kāi)啟 uboot 階段的喂狗功能。

diff --git a/brandy/brandy-2.0/u-boot-2018/board/sunxi/board.c b/brandy/brandy-2.0/u-boot-2018/board/sunxi/board.cindex 0019f45..4233b22 100644--- a/brandy/brandy-2.0/u-boot-2018/board/sunxi/board.c+++ b/brandy/brandy-2.0/u-boot-2018/board/sunxi/board.c@@ -54,6 +54,9 @@#endif#include #include +#ifdef CONFIG_T113_I_WATCHDOG_REG+#include +#endif

int __attribute__((weak)) sunxi_set_sramc_mode(void)@@ -219,6 +222,9 @@int board_init(void)
sunxi_plat_init();
+#ifdef CONFIG_T113_I_WATCHDOG_REG+hw_watchdog_init();+#endifint work_mode = get_boot_work_mode();
ret = axp_gpio_init();

驗(yàn)證:開(kāi)啟看門狗電路設(shè)計(jì)預(yù)留的硬件撥碼開(kāi)關(guān),上電后進(jìn)入 uboot 命令行,系統(tǒng)不會(huì)因超時(shí)重啟,說(shuō)明 uboot 喂狗實(shí)現(xiàn)成功。

4.3kernel PE1 引腳自動(dòng)喂狗實(shí)現(xiàn)

在內(nèi)核中開(kāi)啟 CONFIG_GPIO_WATCHDOG 選項(xiàng)

CONFIG_GPIO_WATCHDOG=y

設(shè)備樹(shù)中新增看門狗配置

watchdog: watchdog {compatible ="linux,wdt-gpio";gpios = <&pio PE 1 GPIO_ACTIVE_HIGH>;hw_algo ="toggle";hw_margin_ms = <1000>; #always-running ="true"; };

驗(yàn)證:進(jìn)入系統(tǒng)后,開(kāi)啟看門狗電路設(shè)計(jì)預(yù)留的硬件撥碼開(kāi)關(guān),系統(tǒng)不會(huì)重啟,表明 kernel 喂狗功能正常。

4.4uboot 到 kernel 的銜接

關(guān)鍵一步,經(jīng)測(cè)試在kernel啟動(dòng)的0.2秒左右看門狗會(huì)出現(xiàn)超時(shí),為避免 kernel 啟動(dòng)初期因打印信息過(guò)多導(dǎo)致喂狗不及時(shí),需要修改打印等級(jí)。減少啟動(dòng)過(guò)程中的打印輸出,確保kernel能及時(shí)接管喂狗任務(wù),實(shí)現(xiàn)uboot到kernel的無(wú)縫銜接。

在 device/config/chips/t113_i/configs/evb1_auto/buildroot/env.cfg 文件中,將 loglevel 從8修改為5或6。

diff--git a/device/config/chips/t113_i/configs/evb1_auto/buildroot/env.cfg b/device/config/chips/t113_i/configs/evb1_auto/buildroot/env.cfgindex bc1d41d..52d32d2100755---a/device/config/chips/t113_i/configs/evb1_auto/buildroot/env.cfg+++b/device/config/chips/t113_i/configs/evb1_auto/buildroot/env.cfg@@-8,7+8,7@@ mmc_root=/dev/mmcblk0p5mtd_name=sysrootfstype=ubifs,rwinit=/init-loglevel=8+loglevel=5cma=16Mmac=wifi_mac=

五、總結(jié)

通過(guò)以上步驟,我們成功在T113-I平臺(tái)上實(shí)現(xiàn)了從 uboot 到 kernel 的看門狗無(wú)縫銜接,系統(tǒng)能夠全自動(dòng)喂狗,無(wú)需應(yīng)用層干預(yù),極大地提高了系統(tǒng)的穩(wěn)定性和可靠性。相信這一方案對(duì)于需要高穩(wěn)定性的嵌入式項(xiàng)目具有重要的應(yīng)用價(jià)值,十分適用于對(duì)系統(tǒng)穩(wěn)定性要求極高的工業(yè)控制、物聯(lián)網(wǎng)設(shè)備。

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

    關(guān)注

    10

    文章

    607

    瀏覽量

    72551
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3716

    瀏覽量

    133049
  • 核心板
    +關(guān)注

    關(guān)注

    6

    文章

    1340

    瀏覽量

    31736
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    看門狗多任務(wù)系統(tǒng)喂狗方法詳解

    看門狗分硬件看門狗和 軟件看門狗。硬件看門狗是利用一個(gè)定時(shí)器電路,其定時(shí)輸出連接到電路的復(fù)位端,程序在一定時(shí)間范圍內(nèi)對(duì)定時(shí)器清零(俗稱“喂狗
    的頭像 發(fā)表于 07-05 09:21 ?2w次閱讀
    <b class='flag-5'>看門狗</b>多任務(wù)<b class='flag-5'>系統(tǒng)</b>及<b class='flag-5'>喂狗</b>方法詳解

    新手如何開(kāi)發(fā)高可靠性嵌入式系統(tǒng)

    開(kāi)發(fā)高可靠性嵌入式系統(tǒng)需要這七招成為一個(gè)正式的工程師。它是一個(gè)艱辛的過(guò)程,需要開(kāi)發(fā)人員維護(hù)和管理系統(tǒng)的每個(gè)比特和字節(jié)。從規(guī)范完善的開(kāi)發(fā)周期到嚴(yán)格執(zhí)行和
    發(fā)表于 08-02 10:04

    開(kāi)發(fā)高可靠性嵌入式系統(tǒng)的技巧有哪些?

    的感覺(jué),但僅僅因?yàn)檐浖谑芸貤l件的那一刻運(yùn)行正常并不意味著明天或一年后還會(huì)運(yùn)行正常。從規(guī)范完善的開(kāi)發(fā)周期到嚴(yán)格執(zhí)行和系統(tǒng)檢查,開(kāi)發(fā)高可靠性嵌入式
    發(fā)表于 09-29 08:10

    嵌入式系統(tǒng)看門狗計(jì)數(shù)器怎么清零?

    嵌入式系統(tǒng)中,為了使系統(tǒng)在異常情況能自動(dòng)恢復(fù),一般都會(huì)引入看門狗電路。看門狗電路其實(shí)就是一個(gè)
    發(fā)表于 03-09 06:16

    利用看門狗改善系統(tǒng)可靠性―如何正確選擇器件

    本文主要講述的是利用看門狗改善系統(tǒng)可靠性―如何正確選擇器件。
    發(fā)表于 04-23 08:46 ?10次下載

    利用看門狗改善系統(tǒng)可靠性―如何正確選擇器件

    本文主要講述的是利用看門狗改善系統(tǒng)可靠性―如何正確選擇器件。
    發(fā)表于 04-26 16:27 ?12次下載

    利用看門狗改善系統(tǒng)可靠性

    利用看門狗改善系統(tǒng)可靠性
    發(fā)表于 04-27 10:34 ?22次下載
    利用<b class='flag-5'>看門狗</b>改善<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>可靠性</b>

    什么是stm32看門狗?獨(dú)立看門狗和窗口看門狗工作原理解析

    stm32有兩個(gè)看門狗,獨(dú)立看門狗和窗口看門狗,其實(shí)兩者的功能是類似的,只是喂狗的限制時(shí)間不同。 獨(dú)立看門狗
    的頭像 發(fā)表于 11-06 11:48 ?2.8w次閱讀
    什么是stm32<b class='flag-5'>看門狗</b>?獨(dú)立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>工作原理解析

    uC/OS-II 系統(tǒng)的多任務(wù)看門狗設(shè)計(jì)

    嵌入式系統(tǒng)中為提高微型機(jī)系統(tǒng)可靠性和安全, 常用的方法就是使用看門狗
    發(fā)表于 11-30 06:39 ?899次閱讀

    基于嵌入式系統(tǒng)看門狗的原理與使用

    在產(chǎn)品化的嵌入式系統(tǒng)中,為了使系統(tǒng)在異常情況能自動(dòng)復(fù)位,一般都需要引入看門狗。
    的頭像 發(fā)表于 02-08 18:27 ?8285次閱讀
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>中<b class='flag-5'>看門狗</b>的原理與使用

    對(duì)于MCU看門狗IIWDG WWDG喂狗時(shí)間的配置參考

    對(duì)于MCU看門狗IIWDG WWDG喂狗時(shí)間的配置參考可以參考MCU的datasheet;在每個(gè)MCU的datasheet中都有這樣的表格:6.3.25 Timer
    發(fā)表于 10-28 12:06 ?13次下載
    對(duì)于MCU<b class='flag-5'>看門狗</b>IIWDG WWDG<b class='flag-5'>喂狗</b>時(shí)間的配置參考

    嵌入式系統(tǒng)】獨(dú)立看門狗原理+看門狗實(shí)驗(yàn)分析

    嵌入式系統(tǒng)】獨(dú)立看門狗原理+看門狗實(shí)驗(yàn)分析1、看門狗模塊概述在由單片機(jī)構(gòu)成的微機(jī)系統(tǒng)中,由于單
    發(fā)表于 11-25 09:51 ?1次下載
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>】獨(dú)立<b class='flag-5'>看門狗</b>原理+<b class='flag-5'>看門狗</b>實(shí)驗(yàn)分析

    STM32中的獨(dú)立看門狗和窗口看門狗

    和窗口看門狗。 獨(dú)立看門狗:使用的是外部時(shí)鐘,即使主頻不工作了,看門狗也能正常工作。只要在到達(dá)喂狗時(shí)間的上限前喂狗即表示程序是正常的,這點(diǎn)和
    的頭像 發(fā)表于 12-22 16:58 ?2856次閱讀

    飛凌嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法

    對(duì)于飛凌嵌入式T113-i開(kāi)發(fā)板的調(diào)屏問(wèn)題,需要按照以下步驟進(jìn)行操作
    的頭像 發(fā)表于 01-29 16:25 ?1955次閱讀

    喂狗”的藝術(shù):看門狗不叫,才是系統(tǒng)

    程序的。現(xiàn)實(shí)里的會(huì)追飛盤(pán),PLC里的看門狗追的是跑飛的程序。 本質(zhì)上是一個(gè)計(jì)時(shí)器,用于監(jiān)控程序的運(yùn)行狀態(tài)。主程序在正常運(yùn)行時(shí),需要定期“喂狗”(即重置計(jì)時(shí)器)。一旦程序跑飛或陷入死循環(huán),導(dǎo)致無(wú)法及時(shí)
    的頭像 發(fā)表于 11-25 10:50 ?56次閱讀
    “<b class='flag-5'>喂狗</b>”的藝術(shù):<b class='flag-5'>看門狗</b>不叫,才是<b class='flag-5'>系統(tǒng)</b>好