forked from td0g/ArduinoHVP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_fuses.ino
76 lines (71 loc) · 2.27 KB
/
_fuses.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//Function to set fuses
//See datasheet and http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
void burnFuses(){
byte hfuse = 0b01011111; //0xDF; //Default, ATTINY85 Datasheet pp. 148
byte lfuse = 0b01100010; //0x62; //Default
Serial.println(F("Please select fuse settings"));
Serial.println(F("0 - Default\n1 - Disable Reset\n2 - 8MHz Clock\n3 - Disable Reset, 8MHz Clock"));
Serial.println(F("4 - EEPROM Preserve\n5 - EEPROM Preserve,Disable Reset\n6 - EEPROM Preserve,8MHz Clock\n7 - EEPROM Preserve,Disable Reset, 8MHz Clock"));
Serial.println(F("9 - Read Only"));
while (Serial.available()) Serial.read();
while (!Serial.available()){};
byte thisChar = Serial.read();
Serial.println(F("Entering Programming Mode"));
if (!pmode) start_pmode();
readFusesHV();
if (thisChar != '9'){
if (thisChar & 0b00000001) hfuse &= 0b01111111;
if (thisChar & 0b00000010) lfuse |= 0b10000000;
if (thisChar & 0b00000100) hfuse &= 0b11110111;
writeFusesHV(lfuse, hfuse);
readFusesHV();
}
else {
here = 0;
for (byte i = 0; i < 32; i++){
Serial.print("0x");
writeHV(0b00000010, 0b01001100); //Load "Read Flash" Command
pmode = 3;
Serial.println(flash_read(here), HEX);
here++;
}
}
Serial.println("Exiting Programming Mode");
end_pmode();
Serial.println("FINISHED");
}
void writeFusesHV(byte _l, byte _h){
Serial.print("Writing hfuse = ");
Serial.println(_h, BIN);
writeHV(0x40, 0x4C);
writeHV(_h, 0x2C);
writeHV(0x00, 0x74);
writeHV(0x00, 0x7C);
//Write lfuse
Serial.print("Writing lfuse = ");
Serial.println(_l, BIN);
writeHV(0x40, 0x4C);
writeHV(_l, 0x2C);
writeHV(0x00, 0x64);
writeHV(0x00, 0x6C);
Serial.println();
}
void readFusesHV(){
writeHV(0x04, 0x4C);
writeHV(0x00, 0x7A);
byte inData = writeHV(0x00, 0x7E);
Serial.print(F("hfuse = "));
Serial.println(inData, BIN);
writeHV(0x04, 0x4C);
writeHV(0x00, 0x68);
inData = writeHV(0x00, 0x6C);
Serial.print(F("lfuse = "));
Serial.println(inData, BIN);
//Read efuse
writeHV(0x04, 0x4C);
writeHV(0x00, 0x6A);
inData = writeHV(0x00, 0x6E);
Serial.print(F("efuse = "));
Serial.println(inData, BIN);
Serial.println();
}