Project

General

Profile

Attiny-wdt » History » Revision 6

Revision 5 (laforge, 08/23/2022 02:26 PM) → Revision 6/8 (laforge, 08/23/2022 02:28 PM)

{{>toc}} 

 h1. attiny-wdt 

 @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. 

 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. 

 h2. Operating Principle 

 The general idea is to use the Timer/Counter block of the ATTiny9 in the following way: 
 * Clear the output @OC0B@ on BOTTOM (counter == 0) 
 ** this generates a rising edge on the @!RESET@ signal of the CPU we're guarding 
 * Set the output @OC0B@ when counter reaches @OCR0B@ 
 ** this generates a falling edge on the @!RESET@ signal of the CPU we're guarding 
 * Wrap the counter once it reaches @OCR0A@ 
 ** this determines the amount of time until a reset 
 * Configure any falling edge on the INT0 pin to re-set the counter to zero 
 ** this is what the software on the CPU we're guarding nees to do to avoid the watchdog from expiring 

 h2. Pinout 

 The board contains two connectors: 

 h3. JP3 

 This header is used in two cases: 
 # *programming phase:* the firmware into the ATtiny9 (using the TPI protocol) 
 # *normal use:* To supply VCC to the watchdog and to connect its output with    @!RESET/GLOBAL_EN@ of the target 

 |_.Number|_.Name|_.Description|_.Programming Function| 
 |1|GLOBAL_EN|open collector watchdog output; xpected to be connected to the !RESET of the CPU we're guarding (or GLOBAL_EN in case of Raspi)|-| 
 |2|VCC|3.3V supply voltage powering the watchdog|VCC| 
 |3|TPICLK|-|TPICLK| 
 |4|PB0|-|TPIDATA| 
 |5|!RESET|-|!RESET| 
 |6|GND|Ground|GND| 


 h3. JP2 

 |_.Number|_.Name|_.Description| 
 |1|GND|Ground| 
 |2|PB2|Input; any falling edge re-sets the counter to zero. Connected to GPIO26 on Raspi| 
 |3|PB0/GPIO19|No function; RFU| 

 


 h2. Pictures 

 The pictures below show one of the first hand-soldered prototypes: 

 {{thumbnail(attiny_wdt_v2_top.jpg)}} {{thumbnail(attiny_wdt_v2_bot.jpg)}} 

 {{thumbnail(attiny-wdt1.jpg)}} {{thumbnail(attiny-wdt2.jpg)}} {{thumbnail(attiny-wdt3.jpg)}} 


 h2. Flashing 

 You need 
 * an attiny-wdt 
 * a TPI-capable programmer for ATtiny9, such as the "guloprog":https://guloshop.de/shop/Mikrocontroller-Programmierung/guloprog-der-Programmer-von-guloshop-de::70.html 
 * a 2x3 to 1x5pin adapter cable (custo made) to connect the guloprog TPI Connector to attiny JP3 
 * a Linux machine with "avrdude":https://www.nongnu.org/avrdude/ (e.g. installed via @apt install avrdude@ on Debian/Ubuntu). Tested with avrdude 6.3 

 h3. Physical connection 

 h4. full setup with usb cable, guloprog, 2x3-1x5 cable and attiny-wdt: 

 {{thumbnail(attiny_wdt_with_gulprog_cable.jpg)}} 

 h4. detailed view of 2x3 cable in guloprog 

 {{thumbnail(guloprog_with_cable.jpg)}} 

 h4. detailed view of 1x5 cable in attiny-wdt 

 {{thumbnail(attiny_with_cable.jpg)}} 

 h3. avrdude command for flashing 

 Assuming your firmware file is called @attiny-wdt.hex@, you can use the fa command like: 
 <pre> 
 avrdude -p attiny9 -P usb -c usbasp -U flash:w:attiny-wdt.hex 
 </pre> 

 The successful output looks like this: 

 <pre> 
 avrdude: AVR device initialized and ready to accept instructions 

 Reading | ################################################## | 100% 0.00s 

 avrdude: Device signature = 0x1e9008 (probably t9) 
 avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed 
          To disable this feature, specify the -D option. 
 avrdude: erasing chip 
 avrdude: reading input file "attiny-wdt.hex" 
 avrdude: input file attiny-wdt.hex auto detected as Intel Hex 
 avrdude: writing flash (116 bytes): 

 Writing | ################################################## | 100% 0.41s 

 avrdude: 116 bytes of flash written 
 avrdude: verifying flash memory against attiny-wdt.hex: 
 avrdude: load data flash data from input file attiny-wdt.hex: 
 avrdude: input file attiny-wdt.hex auto detected as Intel Hex 
 avrdude: input file attiny-wdt.hex contains 116 bytes 
 avrdude: reading on-chip flash data: 

 Reading | ################################################## | 100% 0.04s 

 avrdude: verifying ... 
 avrdude: 116 bytes of flash verified 

 avrdude done.    Thank you. 
 </pre>
Add picture from clipboard (Maximum size: 48.8 MB)