辉为科技 ARM主板如何设计外部看门狗电路
Atmel ARM9 系列 CPU 包括at91sam9260、 at91sam9261、 at91sam9263 等芯片都设计了内部看门狗,但由于该看门狗配置寄存器在上电后只能配置一次,而且系统启动时是开启状态。在操作系统引导程序启动时,一般都是将其直接关掉,致使在应用程序中无法使用。在应用上十分不方便。
可以为主板设计外部看门狗电路如下所示:
SP706 具有看门狗、复位功能。 K1 是重启按键, J3 方便引出复位线。74HCT125D 上的1OE、 1A 脚只需接普通的 IO 管脚即可。上电后拉低 1OE 脚电平,看门狗即处于计时状态,这时要不断的变换 1A 脚的电平来喂狗,当 1A 脚的电平保持在低电平或者高电平超过 1.6S, SP706 的 WDO 脚就会输出低电平从而使主板复位。
辉为科技已经为 SP706 设计了驱动支持,以 Linux 操作系统为例:在内核目录下执行
make menuconfig,选择 DeviceDrivers --->
Character devices --->
Watchdog Cards --->
选择 SP706 watchdog,即可将驱动支持编译入内核。
原理图设计中 1OE、 1A 所接 IO 的引脚号,可在 Linux 内核
arch/arm/mach-at91rm9200/board-sam9260k.c (以 HW9260-EK 为例)文件中的以下结
构中指定:
static struct sp706_wdt_platform_datasp706_data = {
.pin_enable = AT91_PIN_PC12,
.pin_wdi = AT91_PIN_PC15,
};
看门狗测试程序如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/ioctl.h>
#include <linux/watchdog.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#include <errno.h>
int main(int argc, void *argv[])
{
int fd;
fd = open("/dev/misc/watchdog",O_RDWR);
if (fd < 0) {
printf("open watchdog error!%d\n", fd);
}
while(1){
ioctl(fd, WDIOC_KEEPALIVE, 0);
sleep(1);
}
close(fd);
return 0;
}
当强制结束此程序后,主板会在 1.6S 内重启,说明看门狗已经发挥了作用。
进来学习一下下了,