| 1 | unit Processors;
|
|---|
| 2 |
|
|---|
| 3 | {$MODE Delphi}
|
|---|
| 4 |
|
|---|
| 5 | interface
|
|---|
| 6 |
|
|---|
| 7 | {$INCLUDE Options.inc}
|
|---|
| 8 |
|
|---|
| 9 | uses Globals;
|
|---|
| 10 |
|
|---|
| 11 | type
|
|---|
| 12 | TLockBits = array[0..7] of string[5];
|
|---|
| 13 | TSignature = record
|
|---|
| 14 | b0, b1, b2:byte; {Signature bytes}
|
|---|
| 15 | name:string[16];
|
|---|
| 16 | proctype:byte; {Processor type: PROC_TYPE_xxx}
|
|---|
| 17 | fsize:integer; {Flash size in bytes}
|
|---|
| 18 | esize:integer; {EEPROM size in bytes}
|
|---|
| 19 | usigsize:integer; {User Signature size in bytes}
|
|---|
| 20 | fpage:byte; {Flash page bits}
|
|---|
| 21 | fpagesize:integer; {Flash page size in bytes, usually 2^fpage}
|
|---|
| 22 | epage:byte; {EEPROM page bits}
|
|---|
| 23 | epagesize:integer; {EEPROM page size in bytes, usually 2^epage}
|
|---|
| 24 | osccal:byte; {Number of oscillator calibration bytes}
|
|---|
| 25 | algo:byte; {Programming algorithm}
|
|---|
| 26 | algo_erase:byte; {Erasing algorithm}
|
|---|
| 27 | algo_lb:byte; {Lock bits and fuses reading/programming algorithm}
|
|---|
| 28 | algo_busy:byte; {Busy check algorithm}
|
|---|
| 29 | prog_time:integer; {Time in ms to wait after programming}
|
|---|
| 30 | lockbits:array[0..7] of string[5]; {LSB to MSB}
|
|---|
| 31 | fusebitslo:array[0..7] of string[16]; {LSB to MSB}
|
|---|
| 32 | fusebitshi:array[0..7] of string[16]; {LSB to MSB}
|
|---|
| 33 | fusebitsext:array[0..7] of string[16]; {LSB to MSB}
|
|---|
| 34 | end;
|
|---|
| 35 |
|
|---|
| 36 | const
|
|---|
| 37 | ALGO_STD = 1;
|
|---|
| 38 | ALGO_MEGA = 2;
|
|---|
| 39 | ALGO_DATAFLASH = 3;
|
|---|
| 40 | ALGO_SERIALFLASH = 4;
|
|---|
| 41 | {$IFDEF I2C_SUPPORT}
|
|---|
| 42 | ALGO_AT24_EEPROM = 5;
|
|---|
| 43 | {$ENDIF}
|
|---|
| 44 |
|
|---|
| 45 | ALGO_ERASE_STD = 0;
|
|---|
| 46 | ALGO_ERASE_TWICE = 1;
|
|---|
| 47 |
|
|---|
| 48 | ALGO_LB_NONE = 0;
|
|---|
| 49 | ALGO_LB_STD = 1;
|
|---|
| 50 | ALGO_LB_TINY = 2;
|
|---|
| 51 | ALGO_LB_2323 = 3;
|
|---|
| 52 | ALGO_LB_2333 = 4;
|
|---|
| 53 | ALGO_LB_MEGA = 5;
|
|---|
| 54 | ALGO_LB_89x = 6;
|
|---|
| 55 | ALGO_LB_89S51 = 7;
|
|---|
| 56 | ALGO_LB_89S8253 = 8;
|
|---|
| 57 | ALGO_LB_89S2051 = 9;
|
|---|
| 58 |
|
|---|
| 59 | ALGO_BUSY_WAIT = 1;
|
|---|
| 60 | ALGO_BUSY_POLL_00FF = 2;
|
|---|
| 61 | ALGO_BUSY_POLL_FF = 3;
|
|---|
| 62 | ALGO_BUSY_POLL_NMSB = 4;
|
|---|
| 63 | ALGO_BUSY_POLL_RDYBSY = 5;
|
|---|
| 64 | ALGO_BUSY_DATAFLASH = 6;
|
|---|
| 65 | ALGO_BUSY_SERIALFLASH = 7;
|
|---|
| 66 | {$IFDEF I2C_SUPPORT}
|
|---|
| 67 | ALGO_BUSY_AT24_EEPROM = 8;
|
|---|
| 68 | {$ENDIF}
|
|---|
| 69 |
|
|---|
| 70 | MAX_FLASH_SIZE = 17301504; // AT45CS1282 (16.5MB)
|
|---|
| 71 | MAX_EEPROM_SIZE = 4096;
|
|---|
| 72 | MAX_USERSIG_SIZE = 32;
|
|---|
| 73 |
|
|---|
| 74 | SIGNCOUNT = 2
|
|---|
| 75 | + 7 {AT89}
|
|---|
| 76 | + 18 {AT90}
|
|---|
| 77 | + 16 {ATtiny}
|
|---|
| 78 | + 38 {ATmega}
|
|---|
| 79 | + 21 {AT45}
|
|---|
| 80 | + 7 {AT25}
|
|---|
| 81 | + 4 {AT25F}
|
|---|
| 82 | + 1 {AT26}
|
|---|
| 83 | {$IFDEF I2C_SUPPORT}
|
|---|
| 84 | + 11 {AT24}
|
|---|
| 85 | {$ENDIF}
|
|---|
| 86 | ;
|
|---|
| 87 |
|
|---|
| 88 | Signatures:array [1..SIGNCOUNT] of TSignature =
|
|---|
| 89 | (
|
|---|
| 90 | (b0:$00; b1:$00; b2:$00;
|
|---|
| 91 | name:'AT89S53/8252';
|
|---|
| 92 | proctype:PROC_TYPE_OLD51;
|
|---|
| 93 | fsize:12288; esize:2048; usigsize:0; fpage:0; fpagesize:0; epage:0; epagesize:0;
|
|---|
| 94 | osccal:0;
|
|---|
| 95 | algo:ALGO_STD;
|
|---|
| 96 | algo_erase:ALGO_ERASE_STD;
|
|---|
| 97 | algo_lb:ALGO_LB_89x;
|
|---|
| 98 | algo_busy:ALGO_BUSY_POLL_NMSB;
|
|---|
| 99 | prog_time:16;
|
|---|
| 100 | lockbits:('','','','','','LB3','LB2','LB1');
|
|---|
| 101 | fusebitslo:('','','','','','','','');
|
|---|
| 102 | fusebitshi:('','','','','','','','');
|
|---|
| 103 | fusebitsext:('','','','','','','',''))
|
|---|
| 104 | ,
|
|---|
| 105 | (b0:$00; b1:$01; b2:$02;
|
|---|
| 106 | name:'CHIP LOCKED';
|
|---|
| 107 | proctype:0;
|
|---|
| 108 | fsize:0; esize:0; usigsize:0; fpage:0; fpagesize:0; epage:0; epagesize:0;
|
|---|
| 109 | osccal:0;
|
|---|
| 110 | algo:0;
|
|---|
| 111 | algo_erase:0;
|
|---|
| 112 | algo_lb:0;
|
|---|
| 113 | algo_busy:0;
|
|---|
| 114 | prog_time:0;
|
|---|
| 115 | lockbits:('','','','','','','','');
|
|---|
| 116 | fusebitslo:('','','','','','','','');
|
|---|
| 117 | fusebitshi:('','','','','','','','');
|
|---|
| 118 | fusebitsext:('','','','','','','',''))
|
|---|
| 119 | ,
|
|---|
| 120 | {$I Devices_AT89.inc}
|
|---|
| 121 | ,
|
|---|
| 122 | {$I Devices_AT90.inc}
|
|---|
| 123 | ,
|
|---|
| 124 | {$I Devices_ATtiny.inc}
|
|---|
| 125 | ,
|
|---|
| 126 | {$I Devices_ATmega.inc}
|
|---|
| 127 | ,
|
|---|
| 128 | {$I Devices_AT45.inc}
|
|---|
| 129 | ,
|
|---|
| 130 | {$I Devices_AT25.inc}
|
|---|
| 131 | ,
|
|---|
| 132 | {$I Devices_AT25F.inc}
|
|---|
| 133 | ,
|
|---|
| 134 | {$I Devices_AT26.inc}
|
|---|
| 135 |
|
|---|
| 136 | {$IFDEF I2C_SUPPORT}
|
|---|
| 137 | ,
|
|---|
| 138 | {$I Devices_AT24.inc}
|
|---|
| 139 | {$ENDIF}
|
|---|
| 140 |
|
|---|
| 141 | );
|
|---|
| 142 |
|
|---|
| 143 | DEVICE_UNKNOWN = 0;
|
|---|
| 144 | DEVICE_AT89Sxx = 1; // AT89S53/8252
|
|---|
| 145 | DEVICE_LOCKED = 2;
|
|---|
| 146 |
|
|---|
| 147 | function FindSignature (s0:byte; s1:byte; s2:byte):integer;
|
|---|
| 148 | function FindName (name:string):integer;
|
|---|
| 149 |
|
|---|
| 150 | implementation
|
|---|
| 151 |
|
|---|
| 152 | function FindSignature (s0:byte; s1:byte; s2:byte):integer;
|
|---|
| 153 | var
|
|---|
| 154 | n:integer;
|
|---|
| 155 | begin
|
|---|
| 156 | for n:=2 to SIGNCOUNT do
|
|---|
| 157 | with Signatures[n] do
|
|---|
| 158 | if (b0=s0) and (b1=s1) and (b2=s2) then
|
|---|
| 159 | begin
|
|---|
| 160 | Result:=n;
|
|---|
| 161 | Exit;
|
|---|
| 162 | end;
|
|---|
| 163 | Result:=-1;
|
|---|
| 164 | end;
|
|---|
| 165 |
|
|---|
| 166 | function FindName (name:string):integer;
|
|---|
| 167 | var
|
|---|
| 168 | n:integer;
|
|---|
| 169 | begin
|
|---|
| 170 | for n:=1 to SIGNCOUNT do
|
|---|
| 171 | if (n <> DEVICE_LOCKED) and (Signatures[n].name = name) then
|
|---|
| 172 | begin
|
|---|
| 173 | Result:=n;
|
|---|
| 174 | Exit;
|
|---|
| 175 | end;
|
|---|
| 176 | Result:=-1;
|
|---|
| 177 | end;
|
|---|
| 178 |
|
|---|
| 179 | end.
|
|---|