Attiny-wdt » History » Version 4
laforge, 08/10/2022 10:38 AM
1 | 4 | laforge | {{>toc}} |
---|---|---|---|
2 | |||
3 | h1. attiny-wdt |
||
4 | 1 | laforge | |
5 | @attiny-wdt@ is an OSHW + open source firmware project of turning an Attiny{4,5,9,10} microcontroller into a hardware watchdog that can be used to reset another CPU/SoC when it gets stuck. |
||
6 | |||
7 | The primary use case was to use it with Raspberry Pi devices. Those do have a built-in hardware watchdog themselves, but unfortuantelly it is not documented at the register-level and there is no option to enable it straight from the boot loader, so it is not really providing the kind of guarantees one would expect from a watchdog. |
||
8 | |||
9 | 3 | laforge | h2. Operating Principle |
10 | |||
11 | The general idea is to use the Timer/Counter block of the ATTiny9 in the following way: |
||
12 | * Clear the output @OC0B@ on BOTTOM (counter == 0) |
||
13 | ** this generates a rising edge on the @!RESET@ signal of the CPU we're guarding |
||
14 | * Set the output @OC0B@ when counter reaches @OCR0B@ |
||
15 | ** this generates a falling edge on the @!RESET@ signal of the CPU we're guarding |
||
16 | * Wrap the counter once it reaches @OCR0A@ |
||
17 | ** this determines the amount of time until a reset |
||
18 | * Configure any falling edge on the INT0 pin to re-set the counter to zero |
||
19 | ** this is what the software on the CPU we're guarding nees to do to avoid the watchdog from expiring |
||
20 | |||
21 | h2. Pinout |
||
22 | |||
23 | The board contains two connectors: |
||
24 | |||
25 | h3. JP1 |
||
26 | |||
27 | This header is used in two cases: |
||
28 | # *programming phase:* the firmware into the ATtiny9 (using the TPI protocol) |
||
29 | # *normal use:* To supply VCC to the watchdog and to connect its output with @!RESET/GLOBAL_EN@ of the target |
||
30 | |||
31 | |_.Number|_.Name|_.Description|_.Programming Function| |
||
32 | |1|VCC|3.3V supply voltage powering the watchdog|VCC| |
||
33 | |2|GLOBAL_EN|watchdog output; expected to be connected to the !RESET of the CPU we're guarding (or GLOBAL_EN in case of Raspi)|TPICLK| |
||
34 | |3|PB0|-|TPIDATA| |
||
35 | |4|!RESET|-|!RESET| |
||
36 | |5|GND|Ground|GND| |
||
37 | |||
38 | |||
39 | h3. JP2 |
||
40 | |||
41 | |_.Number|_.Name|_.Description| |
||
42 | |1|GND|Ground| |
||
43 | |2|PB2|Input; any falling edge re-sets the counter to zero. Connected to GPIO26 on Raspi| |
||
44 | |3|PB0/GPIO19|No function; RFU| |
||
45 | |||
46 | |||
47 | 1 | laforge | h2. Pictures |
48 | |||
49 | 2 | laforge | The pictures below show one of the first hand-soldered prototypes: |
50 | 1 | laforge | |
51 | 2 | laforge | {{thumbnail(attiny-wdt1.jpg)}} {{thumbnail(attiny-wdt2.jpg)}} {{thumbnail(attiny-wdt3.jpg)}} |