imx6ull看门狗使用

 

 

一、内部看门狗

1、内部看门狗使用说明

内部看门狗使用WDOG1

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

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

imx6ull看门狗使用_第1张图片

imx6ull看门狗使用_第2张图片

                                                                     【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

imx6ull看门狗使用_第3张图片

4、验证

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

4.2查看设备

 

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

4.3编写应用测试


   
     
     
     
     
  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #define cst_str2(c1, c2) (((unsigned int)0 | \
  10. (char)c2) << 8 | \
  11. (char)c1)
  12. int main(int argc, char *argv[])
  13. {
  14. int fd;
  15. int flags;
  16. int timeout = 10;
  17. int dummy = 0;
  18. fd = open( "/dev/watchdog0", O_WRONLY);
  19. if (fd == -1) {
  20. printf( "Watchdog open fail.\n");
  21. exit( -1);
  22. }
  23. if (argc > 1) {
  24. switch ( cst_str2(argv[ 1][ 0], argv[ 1][ 1]))
  25. {
  26. case cst_str2('-','s'):
  27. if(argc > 2)
  28. timeout = atoi(argv[ 2]);
  29. ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
  30. printf( "set timeout : %d\n", timeout);
  31. break;
  32. case cst_str2('-', 'g'):
  33. ioctl(fd, WDIOC_GETTIMEOUT, &timeout);
  34. printf( "get timeout : %d\n", timeout);
  35. break;
  36. case cst_str2('-', 'e'): //使能看门狗
  37. flags = WDIOS_ENABLECARD;
  38. ioctl(fd, WDIOC_SETOPTIONS, &flags);
  39. printf( "Watchdog card enabled.\n");
  40. break;
  41. case cst_str2('-', 'd'): //禁用看门狗
  42. flags = WDIOS_DISABLECARD;
  43. ioctl(fd, WDIOC_SETOPTIONS, &flags);
  44. printf( "Watchdog card disabled.\n");
  45. close(fd);
  46. return 0;
  47. break;
  48. default:
  49. printf( "\
  50. \t-s set timeout.\n\
  51. \t-g get timeout.\n\
  52. \t-d to disable.\n\
  53. \t-e to enable.\n\
  54. ");
  55. break;
  56. }
  57. }
  58. while ( 1) {
  59. ioctl(fd, WDIOC_KEEPALIVE, &dummy); //喂狗
  60. sleep( 1);
  61. }
  62. }

二、外部看门狗

1、使用说明

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

imx6ull看门狗使用_第4张图片

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

imx6ull看门狗使用_第5张图片

 

4、验证

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

4.2查看设备

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

 

你可能感兴趣的:(i.mx6ul,linux)