0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

T113-I打造高可靠性嵌入式系统,1.12秒极限下的看门狗喂狗之法

眺望电子 ? 2025-08-22 08:30 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


前言:

嵌入式系统使用中,看门狗(Watchdog)是保障系统稳定性的重要机制之一,守护着系统的稳定运行。常规实现是通过应用层参与喂狗操作,存在不稳定因素,也无法处理系统启动过程中的异常。本文将分享一种在T113-I平台上实现的uboot至kernel看门狗无缝衔接技术,且做到系统全自动喂狗,真正保障系统的高可靠性。


一、难点分析

实现从上电开始的系统全自动喂狗机制,可以确保系统在任何阶段都不会因看门狗超时而重启复位。然而,高可靠的嵌入式系统往往需要监管严苛且及时,能够在异常的第一时间产生响应,因此又需要选用超时时间极短的看门狗芯片。

喂狗间隙短,从uboot至kernel的无缝切换便成了横亘在高可靠性嵌入式系统设计中的一大难题。

二、环境说明

主控平台:眺望电子AC113I-92M-SNLI工业级核心板,基于全志T113-I处理器

看门狗芯片:思瑞浦(3PEAK)TPV6823S-TR,其复位时间为 1.12 秒;


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

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

虚拟机环境:ubuntu20.04

硬件原理图:PE1为喂狗引脚


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


三、方案设计

针对 1.12 秒的复位时间限制,制定了如下分阶段的实现方案,确保从 uboot 到 kernel 的全过程都能及时喂狗:

阶段 1:uboot 电平翻转,验证喂狗引脚的控制能力。

阶段 2:uboot 喂狗,确保在 uboot 命令行停留时不会超时重启。

阶段 3:kernel 喂狗,保证系统进入内核后能持续喂狗。

阶段 4:uboot 到 kernel 的无缝衔接,确保系统从上电到完全启动的整个过程中,看门狗不会超时重启。


四、实现步骤

4.1uboot 电平翻转测试验证

喂狗引脚为 PE1,我们需要先验证对该引脚的电平控制能力。通过查阅《T113-i_User_Manual_V1.5.pdf》,找到 PE 相关寄存器的地址。

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

在brandy/brandy-2.0/u-boot-2018/cmd/ 目录下新建 gpio_toggle.c 文件,编写码实现 PE1 引脚的输出模式设置和电平翻转功能

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");
// 设置PE1为输出模式 unsignedint*PE1_CFG0 = (unsignedint*)(T113_I_GPIOE_CFG0); unsignedintPE1_CFG0_val =readl(PE1_CFG0); PE1_CFG0_val &= ~(0xf< // 电平翻转 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 文件,添加相关配置

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选项

上电后按住键盘的 s 进入 uboot 命令行,执行 gpio_toggle 指令,用万用表测试 PE1 引脚的电平,可发现执行一次指令,电平状态翻转一次,验证成功。

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

CONFIG_CMD_GPIO_TOGGLE=y

编译后烧写uboot固件进行测试

在uboot命令行进行测试,上电一直按住键盘的s进入uboot命令行,执行以下指令

=> gpio_toggle

会有以下信息输出,用万用表测试PE1引脚的电平,发现执行一次翻转一次电平状态

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

至此完成验证寄存器翻转电平方案成功,接下来进入下一步。

4.2uboot PE1引脚自动喂狗实现

实现 uboot 自带的 hw_watchdog 接口,编写代码完成 PE1 引脚的初始化(设置为输出模式)和喂狗操作(电平翻转)。

#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){ // 设置PE1为输出模式 unsignedint*PE1_CFG0 = (unsignedint*)(T113_I_GPIOE_CFG0); unsignedintPE1_CFG0_val =readl(PE1_CFG0); PE1_CFG0_val &= ~(0xf< // 设置PE1驱动等级(默认为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);
// 设置PE1电平,由于硬件电路该引脚为高阻,所以一开始先翻转下 // 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);
// // 默认为无上下拉,符合需求不用管
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.

在相关配置文件中添加该看门狗驱动的配置选项,然后修改全志板级文件 board.c,在板级初始化过程中调用 hw_watchdog_init () 函数,新增PE1的初始化调用,开启 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();

验证:开启看门狗电路设计预留的硬件拨码开关,上电后进入 uboot 命令行,系统不会因超时重启,说明 uboot 喂狗实现成功。

4.3kernel PE1 引脚自动喂狗实现

在内核中开启 CONFIG_GPIO_WATCHDOG 选项

CONFIG_GPIO_WATCHDOG=y

设备树中新增看门狗配置

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

验证:进入系统后,开启看门狗电路设计预留的硬件拨码开关,系统不会重启,表明 kernel 喂狗功能正常。

4.4uboot 到 kernel 的衔接

关键一步,经测试在kernel启动的0.2秒左右看门狗会出现超时,为避免 kernel 启动初期因打印信息过多导致喂狗不及时,需要修改打印等级。减少启动过程中的打印输出,确保kernel能及时接管喂狗任务,实现uboot到kernel的无缝衔接。

在 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=

五、总结

通过以上步骤,我们成功在T113-I平台上实现了从 uboot 到 kernel 的看门狗无缝衔接,系统能够全自动喂狗,无需应用层干预,极大地提高了系统的稳定性和可靠性。相信这一方案对于需要高稳定性的嵌入式项目具有重要的应用价值,十分适用于对系统稳定性要求极高的工业控制物联网设备。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 看门狗
    +关注

    关注

    10

    文章

    593

    浏览量

    72039
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3694

    浏览量

    131851
  • 核心板
    +关注

    关注

    5

    文章

    1218

    浏览量

    31137
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    看门狗多任务系统喂狗方法详解

    看门狗分硬件看门狗和 软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗
    的头像 发表于 07-05 09:21 ?1.9w次阅读
    <b class='flag-5'>看门狗</b>多任务<b class='flag-5'>系统</b>及<b class='flag-5'>喂狗</b>方法详解

    新手如何开发高可靠性嵌入式系统

    开发高可靠性嵌入式系统需要这七招成为一个正式的工程师。它是一个艰辛的过程,需要开发人员维护和管理系统的每个比特和字节。从规范完善的开发周期到严格执行和
    发表于 08-02 10:04

    开发高可靠性嵌入式系统的技巧有哪些?

    的感觉,但仅仅因为软件在受控条件的那一刻运行正常并不意味着明天或一年后还会运行正常。从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式
    发表于 09-29 08:10

    嵌入式系统看门狗计数器怎么清零?

    嵌入式系统中,为了使系统在异常情况能自动恢复,一般都会引入看门狗电路。看门狗电路其实就是一个
    发表于 03-09 06:16

    利用看门狗改善系统可靠性―如何正确选择器件

    本文主要讲述的是利用看门狗改善系统可靠性―如何正确选择器件。
    发表于 04-23 08:46 ?10次下载

    利用看门狗改善系统可靠性―如何正确选择器件

    本文主要讲述的是利用看门狗改善系统可靠性―如何正确选择器件。
    发表于 04-26 16:27 ?12次下载

    利用看门狗改善系统可靠性

    利用看门狗改善系统可靠性
    发表于 04-27 10:34 ?22次下载
    利用<b class='flag-5'>看门狗</b>改善<b class='flag-5'>系统</b><b class='flag-5'>可靠性</b>

    什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析

    stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗
    的头像 发表于 11-06 11:48 ?2.8w次阅读
    什么是stm32<b class='flag-5'>看门狗</b>?独立<b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>工作原理解析

    uC/OS-II 系统的多任务看门狗设计

    嵌入式系统中为提高微型机系统可靠性和安全, 常用的方法就是使用看门狗
    发表于 11-30 06:39 ?831次阅读

    基于嵌入式系统看门狗的原理与使用

    在产品化的嵌入式系统中,为了使系统在异常情况能自动复位,一般都需要引入看门狗
    的头像 发表于 02-08 18:27 ?8173次阅读
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>中<b class='flag-5'>看门狗</b>的原理与使用

    对于MCU看门狗IIWDG WWDG喂狗时间的配置参考

    对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;在每个MCU的datasheet中都有这样的表格:6.3.25 Timer
    发表于 10-28 12:06 ?13次下载
    对于MCU<b class='flag-5'>看门狗</b>IIWDG WWDG<b class='flag-5'>喂狗</b>时间的配置参考

    嵌入式系统】独立看门狗原理+看门狗实验分析

    嵌入式系统】独立看门狗原理+看门狗实验分析1、看门狗模块概述在由单片机构成的微机系统中,由于单
    发表于 11-25 09:51 ?1次下载
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>】独立<b class='flag-5'>看门狗</b>原理+<b class='flag-5'>看门狗</b>实验分析

    STM32中的独立看门狗和窗口看门狗

    和窗口看门狗。 独立看门狗:使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示程序是正常的,这点和
    的头像 发表于 12-22 16:58 ?2640次阅读

    飞凌嵌入式T113-i开发板的调屏方法

    对于飞凌嵌入式T113-i开发板的调屏问题,需要按照以下步骤进行操作
    的头像 发表于 01-29 16:25 ?1682次阅读

    基于全志T113-i多核异构处理器的全国产嵌入式核心板简介

    一、嵌入式核心板产品介绍 基于全志公司的T113-i处理器精心设计的多核异构处理器、工业级ECK30-T13IA系列嵌入式核心板,采用邮票孔连接的低成本、低功耗、高性价比、
    的头像 发表于 10-25 13:40 ?1251次阅读