imx6ull看门狗使用

 

 

一、内部看门狗

1、内部看门狗使用说明

内部看门狗使用WDOG1

复位输出控制选择WDOG1_B —— MX6UL_PAD_GPIO1_IO08__WDOG1_WDOG_B

注:该引脚正常使用时为高电平,当看门狗超时或系统重启后输出低电平,仅设备重新上电才能够恢复为高电平。

                                                                     【IMX6ULL参考手册(11/2017 )——59.5.6.2 WDOG_B generation (P4087)】

2、设备树配置

2.1配置输出引脚电器属性

&iomuxc {

        pinctrl-names = "default";

        ……

        pinctrl_gpio1_wdg1: gpio1_wdg1_grp {

            fsl,pins = <

            MX6UL_PAD_GPIO1_IO08__WDOG1_WDOG_B 0x30b0

            >;

        };

        ……

};

2.2配置看门狗参数

&wdog1 {

    pinctrl-names = "default";

    pinctrl-0 = <&pinctrl_gpio1_wdg1>;

    fsl,ext-reset-output;

    timeout-sec = <5>;

    status = "okay";                  

};  

fsl,ext-reset-output 开启复位输出

timeout-sec 设置看门狗超时复位时间,上述配置为5S

3、内核配置

 Device Drivers  --->

[*] Watchdog Timer Support  --->

[*]   Update boot-enabled watchdog until userspace takes over

<*>   IMX2+ Watchdog

4、验证

4.1烧写内核与设备树,重启系统

4.2查看设备

 

其中/dev/watchdog0便是内部看门狗WDOG1

4.3编写应用测试

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <fcntl.h>  
#include <sys/ioctl.h>  
#include <linux/types.h>  
#include <linux/watchdog.h>  

#define cst_str2(c1, c2) (((unsigned int)0 | \
                                    (char)c2) << 8 | \
                                    (char)c1)

  
int main(int argc, char *argv[])  
{  
	int fd;
	int flags;  
	int timeout = 10;
	int dummy = 0;

	fd = open("/dev/watchdog0", O_WRONLY);

	if (fd == -1) {
		printf("Watchdog open fail.\n");
		exit(-1);
	}

	if (argc > 1) {
		switch (cst_str2(argv[1][0], argv[1][1])) 
		{
		case cst_str2('-','s'):
			if(argc > 2)
				timeout = atoi(argv[2]);
			ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
			printf("set timeout : %d\n", timeout);
			break;
		case cst_str2('-', 'g'):
			ioctl(fd, WDIOC_GETTIMEOUT, &timeout);
			printf("get timeout : %d\n", timeout);
			break;
		case cst_str2('-', 'e'):	//使能看门狗
			flags = WDIOS_ENABLECARD;
			ioctl(fd, WDIOC_SETOPTIONS, &flags);
			printf("Watchdog card enabled.\n");
			break;
		case cst_str2('-', 'd'):	//禁用看门狗
			flags = WDIOS_DISABLECARD;
			ioctl(fd, WDIOC_SETOPTIONS, &flags);
			printf("Watchdog card disabled.\n");
close(fd);
			return 0;
			break;
		
		default:
			printf("\
\t-s set timeout.\n\
\t-g get timeout.\n\
\t-d to disable.\n\
\t-e to enable.\n\
");
			break;
		}
	}

	while (1) {  
		ioctl(fd, WDIOC_KEEPALIVE, &dummy);		//喂狗
		sleep(1);  
	}  
}

二、外部看门狗

1、使用说明

imx6ull外部看门狗使用GPIO控制,利用GPIO输出高低电平保证看门狗芯片(CAT823TTDI-GT3 )不重启。

2、设备树配置

2.1配置输出引脚电器属性

&iomuxc {

pinctrl-names = "default";

……

pinctrl_gpio_wdog: gpio_wdg_grp {              

    fsl,pins = <

     MX6UL_PAD_GPIO1_IO01__GPIO1_IO01   0x010b0

    >;

};

……

};

2.2配置看门狗参数

/ {

model = "Freescale i.MX6 ULL 14x14 EVK Board";

compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";

……

watchdog {

        compatible = "linux,wdt-gpio";

        pinctrl-names = "default";

        pinctrl-0 = <&pinctrl_gpio_wdog>;

        gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;

        hw_algo = "toggle";

        always-running;

        hw_margin_ms = <1000>;

};

……

};

hw_margin_ms 电平反转周期

3、内核配置

Device Drivers  --->

[*] Watchdog Timer Support  --->

[*]   Update boot-enabled watchdog until userspace takes over

<*>   Watchdog device controlled through GPIO-line

[*]     Register the watchdog as early as possible

 

4、验证

4.1烧写内核与设备树,重启系统

4.2查看设备

其中/dev/watchdog1便是外部看门狗设备,无需控制,GPIO1_IO01引脚每隔1000ms自动进行两次电平反转。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值