1 | #!/bin/sh
|
2 | prg="adude"
|
3 | #
|
4 | help()
|
5 | {
|
6 | echo "prg_fusebit_uc -- read and write fuse bits of the atmega8"
|
7 | echo ""
|
8 | echo "Usage: prg_fusebit_uc [-hu] -r|-w Freq"
|
9 | echo ""
|
10 | echo "OPTIONS: -h this help"
|
11 | echo " -r read fuse bytes"
|
12 | echo " -u use uisp instead of avrdude"
|
13 | echo " avrdude can automatically detect dapa or avrusb500."
|
14 | echo " uisp can only be used with the parallel port dapa."
|
15 | echo " -w write fuse bytes such that a given Freq is used"
|
16 | echo " a frequency of 0 means external crystal. Possible"
|
17 | echo " values are 0,1,2,4,8"
|
18 | echo ""
|
19 | echo "EXAMPLE: program the fuses to 4MHz internal"
|
20 | echo " prg_fusebit_uc -w 4"
|
21 | echo ""
|
22 | echo "Warning: you can not undo the setting \"external crystal\" unless"
|
23 | echo " you have a crystal that works."
|
24 | echo "This script can be easily adapted to different programmer types"
|
25 | exit 0
|
26 | }
|
27 | while [ -n "$1" ]; do
|
28 | case $1 in
|
29 | -h) help;shift 1;;
|
30 | -u) prg="uisp";shift 1;;
|
31 | -r) opt_r="1";shift 1;;
|
32 | -w) opt_w="1";freq="$2";shift 2;;
|
33 | -*) echo "error: no such option $1. -h for help";exit 1;;
|
34 | *) break;;
|
35 | esac
|
36 | done
|
37 |
|
38 | if [ -z "$opt_r" -a -z "$opt_w" ];then
|
39 | # one of those options is mandatory
|
40 | help
|
41 | fi
|
42 |
|
43 | hf=0xd9
|
44 | if [ "$opt_w" = "1" ]; then
|
45 | case $freq in
|
46 | 0) lf=0xee;echo "Make sure you have a crystal otherwise you can not change this!";sleep 2;;
|
47 | 1) lf=0xe1;;
|
48 | 2) lf=0xe2;;
|
49 | 4) lf=0xe3;;
|
50 | 8) lf=0xe4;;
|
51 | *) echo "error: no such frequency, -h for help";exit 1;;
|
52 | esac
|
53 | fi
|
54 |
|
55 |
|
56 | if [ "$prg" = "uisp" ]; then
|
57 | if [ "$opt_r" = "1" ];then
|
58 | set -x
|
59 | uisp -dlpt=/dev/parport0 -dprog=dapa --rd_fuses
|
60 | set +x
|
61 | echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
|
62 | echo " 0xe4 (8MHz intern)"
|
63 | echo " Fuse High Byte should be 0xd9"
|
64 | exit 0
|
65 | fi
|
66 | if [ "$opt_w" = "1" ]; then
|
67 | set -x
|
68 | uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_l=$lf
|
69 | uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_h=$hf
|
70 | set +x
|
71 | exit 0
|
72 | fi
|
73 |
|
74 | fi
|
75 | if [ "$prg" = "adude" ]; then
|
76 | if grep "Vendor=0403 ProdID=6001" /proc/bus/usb/devices > /dev/null ; then
|
77 | prg="avrusb500"
|
78 | else
|
79 | prg="dapa"
|
80 | fi
|
81 | if [ "$opt_r" = "1" ];then
|
82 | set -x
|
83 | avrdude -p m162 -c $prg -v -q
|
84 | set +x
|
85 | echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
|
86 | echo " 0xe4 (8MHz intern)"
|
87 | echo " Fuse High Byte should be 0xd9"
|
88 | exit 0
|
89 | fi
|
90 | if [ "$opt_w" = "1" ]; then
|
91 | set -x
|
92 | avrdude -p m162 -c $prg -u -v -U lfuse:w:$lf:m
|
93 | avrdude -p m162 -c $prg -u -v -U hfuse:w:$hf:m
|
94 | set +x
|
95 | exit 0
|
96 | fi
|
97 | fi
|