From 925d0670c45e1100e412070fa0ce2405604f219a Mon Sep 17 00:00:00 2001 From: Attila Veghelyi Date: Thu, 29 Jun 2023 16:24:54 +0200 Subject: Init repo --- deviceRW.c | 1248 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1248 insertions(+) create mode 100644 deviceRW.c (limited to 'deviceRW.c') diff --git a/deviceRW.c b/deviceRW.c new file mode 100644 index 0000000..127a7b6 --- /dev/null +++ b/deviceRW.c @@ -0,0 +1,1248 @@ +/* + * deviceRW.c - Read-write calls for various devices + * Copyright (C) 2010-2022 Alberto Maccioni + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA + * or see + */ + +//configure for GUI or command-line +#include "common.h" +#include "progP12.h" +#include "progP16.h" +#include "progP18.h" +#include "progP24.h" +#include "progEEPROM.h" +#include "progAVR.h" +//#include "progP32.h" + +#ifdef __GTK_H__ +#define _GTKGUI +#endif + +#include "deviceRW.h" + +char* devices[]={ +"10F200","10F202","10F204","10F206","10F220","10F222", +"10F320","10F322", +"12C508","12C508A","12C509","12C509A","12F508","12F509","12F510","12F519", +"12F609","12F615","12F617","12F629","12F635","12C671","12C672","12CE673","12CE674","12F675","12F683", +"12F752", +"12F529T39","12F529T48", +"12F1501","12F1571","12F1572","12F1612","12F1822","12F1840", +"16F505","16F506","16F526","16F527","16F54","16F57","16F570","16F59", +"16F610","16F616","16F627","16F627A","16F628","16F628A","16F630","16F631", +"16F636","16F639","16F648A","16F676","16F677","16F684","16F685","16F687", +"16F688","16F689","16F690", +"16F707","16F716","16F72","16F720","16F721","16F722","16F722A","16F723","16F723A", +"16F724","16F726","16F727","16F73","16F737","16F74","16F747","16F753","16F76", +"16F767","16F77","16F777","16F785", +"16F818","16F819","16C83","16F83","16F83A","16C84","16F84","16F84A","16F87","16F870","16F871","16F872", +"16F873","16F873A","16F874","16F874A","16F876","16F876A","16F877","16F877A", +"16F88","16F882","16F883","16F884","16F886","16F887", +"16F913","16F914","16F916","16F917","16F946", +"16F1454","16F1455","16F1459", +"16F1503","16F1507","16F1508","16F1509","16F1512","16F1513","16F1516","16F1517","16F1518","16F1519", +"16F1526","16F1527","16LF1554","16LF1559","16F1574","16F1575","16F1578","16F1579", +"16F1613","16F1614","16F1615","16F1618","16F1619", +"16F1703","16F1704","16F1705","16F1707","16F1708","16F1709","16F1713","16F1716","16F1717","16F1718","16F1719", +"16F1764","16F1765","16F1768","16F1769","16F1773","16F1776","16F1777","16F17784","16F1779", +"16F1782","16F1783","16F1784","16F1786","16F1787","16F1788","16F1789", +"16F1823","16F1824","16F1825","16F1826","16F1827","16F1828","16F1829","16F1847", +"16LF1902","16LF1903","16LF1904","16LF1906","16LF1907", +"16F1933","16F1934","16F1936","16F1937","16F1938","16F1939","16F1946","16F1947", +"16F15213","16F15214","16F15223""16F15224","16F15225","16F15243","16F15244","16F15245", +"16F15254","16F15255","16F15256","16F15274","16F15275","16F15276", +"16F15313","16F15323","16F15324","16F15325","16F15344","16F15345","16F15354","16F15355","16F15356", +"16F15375","16F15376","16F15385","16F15386", +"16F17114","16F17115","16F17124","16F17125","16F17126","16F17144","16F17145","16F17146", +"16F17154","16F17155","16F17156","16F17174","16F17175","16F17176", +"16F18013","16F18014","16F18015","16F18023","16F18024","16F18025","16F18026","16F18044","16F18045","16F18046", +"16F18054","16F18055","16F18056","16F18074","16F18075","16F18076", +"16F18114","16F18115","16F18124","16F18125","16F18126","16F18144","16F18145","16F18146", +"16F18154","16F18155","16F18156","16F18174","16F18175","16F18176", +"16F18313","16F18323","16F18324","16F18325","16F18326","16F18344","16F18345","16F18346", +"16F18424","16F18425","16F18426","16F18444","16F18445","16F18446","16F18455","16F18456", +"16F18854","16F18855","16F18856","16F18857","16F18875","16F18876","16F18877", +"16F19155","16F19156","16F19175","16F19176","16F19185","16F19186","16F19195","16F19196","16F19197", +"18F04Q40","18F04Q41","18F05Q40","18F05Q41","18F06Q40","18F06Q41","18F14Q40","18F14Q41","18F15Q40","18F15Q41","18F16Q40","18F16Q41", +"18F242","18F248","18F252","18F258","18F442","18F448","18F452","18F458", +"18F1220","18F1230","18F1320","18F1330","18F13K22","18F13K50","18F14K22","18F14K50", +"18F2220","18F2221","18F2320","18F23K20","18F23K22","18F2321","18F2331","18F2410", +"18F24J10","18F24J11","18F2420","18F24K20","18F24K22","18F2423","18F2431","18F2439", +"18F2450","18F24J50","18F24K50","18F2455","18F2458","18F24Q71","18F2480", +"18F2510","18F25J10","18F25J11","18F2515","18F2520","18F25K20","18F25K22","18F2523", +"18F2525","18F2539","18F25K42","18F25Q43","18F2550","18F25J50","18F25K50","18F2553","18F25Q71","18F2580","18F25K80","18F25K83","18F2585", +"18F2610","18F26J11","18F26J13","18F2620","18F26K20","18F26K22","18F26K42","18F26Q43","18F26J50","18F26K50", +"18F26J53","18F26Q71","18F2680","18F26K80","18F2682","18F26K83","18F26Q83","18F26Q84","18F2685", +"18F27J13","18F27K42","18F27Q43","18F27J53","18F27Q83","18F27Q84", +"18F4220","18F4221","18F4320","18F43K20","18F43K22","18F4321","18F4331", +"18F4410","18F44J10","18F44J11","18F4420","18F44K20","18F44K22","18F4423","18F4431", +"18F4439","18F4450","18F44J50","18F4455","18F4458","18F44Q71","18F4480", +"18F4510","18F45J10","18F45J11","18F4515","18F4520","18F45K20","18F45K22","18F4523", +"18F4525","18F4539","18F45K42","18F45Q43","18F4550","18F45J50","18F45K50","18F4553","18F45Q71","18F4580","18F45K80","18F4585", +"18F4610","18F46J11","18F46J13","18F4620","18F46K20","18F46K22","18F46K42","18F46Q43","18F46J50","18F46K50", +"18F46J53","18F46Q71","18F4680","18F46K80","18F4682","18F46Q83","18F46Q84","18F4685", +"18F47J13","18F47K42","18F47Q43","18F47J53","18F47Q83","18F47Q84", +"18F54Q71","18F55K42","18F55Q43","18F55Q71","18F56K42","18F56Q43","18F56Q71","18F56Q83","18F56Q84","18F57K42","18F57Q43","18F57Q83","18F57Q84", +"18F63J11","18F63J90","18F64J11","18F64J90", +"18F65J10","18F65J11","18F65J15","18F65J50","18F65J90","18F65K80", +"18F66J10","18F66J11","18F66J15","18F66J16","18F66J50","18F66J55","18F66J60","18F66J65","18F66J90","18F66J93", +"18F67J10","18F67J11","18F67J50","18F67J60","18F66K80","18F67J90","18F67J93", +"18F83J11","18F83J90","18F84J11","18F84J90","18F85J10","18F85J11","18F85J15","18F85J50","18F85J90", +"18F8520","18F86J10","18F86J11","18F86J15","18F86J16","18F86J50","18F86J55","18F86J60","18F86J65", +"18F86J72","18F86J90","18F86J93", +"18F8722","18F87J10","18F87J11","18F87J50","18F87J60","18F87J72","18F87J90","18F87J93", +"18F96J60","18F96J65","18F97J60", +"24F04KA200","24F04KA201", +"24F08KA101","24F08KA102", +"24F16KA101","24F16KA102", +"24FJ16GA002","24FJ16GA004", +"24FJ32GA002","24FJ32GA004","24FJ32GA102","24FJ32GA104", +"24FJ32GB002","24FJ32GB004", +"24FJ48GA002","24FJ48GA004", +"24FJ64GA002","24FJ64GA004","24FJ64GA006","24FJ64GA008","24FJ64GA010", +"24FJ64GA102","24FJ64GA104","24FJ64GA306","24FJ64GA308","24FJ64GA310", +"24FJ64GB002","24FJ64GB004","24FJ64GB106","24FJ64GB108","24FJ64GB110", +"24FJ64GC006","24FJ64GC008","24FJ64GC010", +"24FJ96GA006","24FJ96GA008","24FJ96GA010", +"24FJ128GA006","24FJ128GA008","24FJ128GA010","24FJ128GA106","24FJ128GA108","24FJ128GA110", +"24FJ128GA306","24FJ128GA308","24FJ128GA310", +"24FJ128GB106","24FJ128GB108","24FJ128GB110","24FJ128GB206","24FJ128GB210", +"24FJ128GC006","24FJ128GC008","24FJ128GC010", +"24FJ128DA106","24FJ128DA110","24FJ128DA206","24FJ128DA210", +"24FJ192GA106","24FJ192GA108","24FJ192GA110", +"24FJ192GB106","24FJ192GB108","24FJ192GB110", +"24FJ256GA106","24FJ256GA108","24FJ256GA110", +"24FJ256GB106","24FJ256GB108","24FJ256GB110", +"24FJ256GB206","24FJ256GB210", +"24FJ256DA106","24FJ256DA110","24FJ256DA206","24FJ256DA210", +"24EP32GP202","24EP32GP203","24EP32GP204", +"24EP32MC202","24EP32MC203","24EP32MC204", +"24EP64GP202","24EP64GP203","24EP64GP204","24EP64GP206", +"24EP64MC202","24EP64MC203","24EP64MC204","24EP64MC206", +"24EP128GP202","24EP128GP204","24EP128GP206", +"24EP128MC202","24EP128MC204","24EP128MC206", +"24EP256GP202","24EP256GP204","24EP256GP206", +"24EP256MC202","24EP256MC204","24EP256MC206", +"24EP512GP202","24EP512GP204","24EP512GP206", +"24EP512MC202","24EP512MC204","24EP512MC206", +"24HJ12GP201","24HJ12GP202", +"24HJ16GP304", +"24HJ32GP202","24HJ32GP204","24HJ32GP302","24HJ32GP304", +"24HJ64GP202","24HJ64GP204","24HJ64GP206","24HJ64GP210","24HJ64GP502", +"24HJ64GP504","24HJ64GP506","24HJ64GP510", +"24HJ128GP202","24HJ128GP204","24HJ128GP206","24HJ128GP210", +"24HJ128GP306","24HJ128GP310","24HJ128GP502","24HJ128GP504","24HJ128GP506","24HJ128GP510", +"24HJ256GP206","24HJ256GP210","24HJ256GP610", +"30F1010","30F2010","30F2011","30F2012","30F2020","30F2023", +"30F3010","30F3011","30F3012","30F3013","30F3014", +"30F4011","30F4012","30F4013", +"30F5011","30F5013","30F5015","30F5016", +"30F6010","30F6011","30F6012","30F6013","30F6014","30F6015", +//"32MX270F256", +"33FJ06GS101","33FJ06GS102","33FJ06GS202", +"33FJ12GP201","33FJ12GP202","33FJ12MC201","33FJ12MC202", +"33FJ16GP304","33FJ16GS402","33FJ16GS404","33FJ16GS502","33FJ16GS504","33FJ16MC304", +"33FJ32GP202","33FJ32GP204","33FJ32GP302","33FJ32GP304", +"33FJ32GS406","33FJ32GS606","33FJ32GS608","33FJ32GS610", +"33FJ32MC202","33FJ32MC204","33FJ32MC302","33FJ32MC304", +"33FJ64GP202","33FJ64GP204","33FJ64GP206","33FJ64GP306","33FJ64GP310", +"33FJ64GP706","33FJ64GP708","33FJ64GP710","33FJ64GP802","33FJ64GP804", +"33FJ64GS406","33FJ64GS606","33FJ64GS608","33FJ64GS610", +"33FJ64MC202","33FJ64MC204","33FJ64MC506","33FJ64MC508","33FJ64MC510", +"33FJ64MC706","33FJ64MC710","33FJ64MC802","33FJ64MC804", +"33FJ128GP202","33FJ128GP204","33FJ128GP206","33FJ128GP306","33FJ128GP310","33FJ128GP706", +"33FJ128GP708","33FJ128GP710","33FJ128GP802","33FJ128GP804", +"33FJ128MC202","33FJ128MC204","33FJ128MC506","33FJ128MC510","33FJ128MC706","33FJ128MC708", +"33FJ128MC710","33FJ128MC802","33FJ128MC804", +"33FJ256GP506","33FJ256GP510","33FJ256GP710", +"33FJ256MC510","33FJ256MC710", +"33EP32GP502","33EP32GP503","33EP32GP504", +"33EP32MC202","33EP32MC203","33EP32MC204","33EP32MC502","33EP32MC503","33EP32MC504", +"33EP64GP502","33EP64GP503","33EP64GP504","33EP64GP506", +"33EP64MC202","33EP64MC203","33EP64MC204","33EP64MC206","33EP64MC502","33EP64MC503","33EP64MC504","33EP64MC506", +"33EP128GP502","33EP128GP504","33EP128GP506", +"33EP128MC202","33EP128MC204","33EP128MC206","33EP128MC502","33EP128MC504","33EP128MC506", +"33EP256GP502","33EP256GP504","33EP256GP506", +"33EP256MC202","33EP256MC204","33EP256MC206","33EP256MC502","33EP256MC504","33EP256MC506", +"33EP512GP502","33EP512GP504","33EP512GP506", +"33EP512MC202","33EP512MC204","33EP512MC206","33EP512MC502","33EP512MC504","33EP512MC506", +"AT90S1200","AT90S2313", +"AT90S8515","AT90S8535","ATmega48","ATmega8","ATmega88","ATmega8515", +"ATmega8535","ATmega16","ATmega164","ATmega168","ATmega32","ATmega324", +"ATmega328","ATmega64","ATmega644","ATmega1284", +"ATtiny11","ATtiny12","ATtiny13", +"ATtiny2313","ATtiny24","ATtiny25","ATtiny26","ATtiny261","ATtiny4313","ATtiny44","ATtiny45", +"ATtiny461","ATtiny48","ATtiny84","ATtiny85","ATtiny88","ATtiny861", +"2400","2401","2402","2404","2408","2416","2432","2464","24128","24256","24512","241024","241025", +"25010","25020","25040","25080","25160","25320","25640","25128","25256","25512","251024", +"95010","95020","95040","95080","95160","95320","95640","95128","95256","95512","95M01","95M02", +"251005","252005","254005","258005","251605", +"25X05","25X10","25X20","25X40","25X80","25X16","25X32","25X64","25X128","25Q40", +"93S46","93x46","93x46A","93S56","93x56","93x56A","93S66","93x66", "93x66A","93x76","93x76A","93x86","93x86A", +"DS2430","DS2431","DS2433","DS28EC20","DS1820", +"11010","11020","11040","11080","11160" +}; + +int Ndevices=sizeof(devices)/sizeof(char*); + +struct DEVICES DEVLIST[]={ +//-------------PIC10-16--------------------------------------------------------- + {"10F200,10F204,10F220", + PIC12,13.0,0,Read12F5xx,{0x100,5},0x40,Write12F5xx,{0x100,0xFF},0}, //256 + {"10F320", + PIC16,9.0,1,Read16Fxxx,{0x100,0,10,0},0x80,Write12F6xx,{0x100,0,-10},0}, //256, vpp, 3.3V + {"12C508,12C508A", + PIC12,13.0,0,Read12F5xx,{0x200,4},0x40,Write12C5xx,{0x200,0},0}, //512 + {"12F508,10F202,10F206,10F222", + PIC12,13.0,0,Read12F5xx,{0x200,5},0x40,Write12F5xx,{0x200,0x1FF},0}, //512 + {"16F54", + PIC12,13.0,0,Read12F5xx,{0x200,4},0x40,Write12F5xx,{0x200,-1},0}, //512, no osccal + {"10F322", + PIC16,9.0,1,Read16Fxxx,{0x200,0,10,0},0x80,Write12F6xx,{0x200,0,-10},0}, //512, vpp, 3.3V + {"12C509,12C509A", + PIC12,13.0,0,Read12F5xx,{0x400,4},0x40,Write12C5xx,{0x400,0},0}, //1K + {"12F509,12F510,16F505,16F506", + PIC12,13.0,0,Read12F5xx,{0x400,5},0x40,Write12F5xx,{0x400,0x3FF},0}, //1K + {"12F519,16F526,16F527", + PIC12,13.0,0,Read12F5xx,{0x440,8},0x60,Write12F5xx,{0x440,0x3FF},0}, //1K + 64 + {"12F529T39,12F529T48", + PIC12,13.0,0,Read12F5xx,{0x640,8},0x78,Write12F5xx,{0x640,0x5FF},0}, //1.5K + 64 + {"16F57,16F59", + PIC12,13.0,0,Read12F5xx,{0x800,4},0x40,Write12F5xx,{0x800,-1},0}, //2K + {"16F570", + PIC12,13.0,0,Read12F5xx,{0x840,8},0x70,Write12F5xx,{0x840,0x7FF},0}, //2K + 64 + {"16C83,16F83,16F83A", + PIC16,13.0,0,Read16Fxxx,{0x200,0x40,8,1},0x10,Write16F8x,{0x200,0x40,-10},0}, //512, 64, vdd + {"12C671,12CE673", + PIC16,13.0,0,Read16Fxxx,{0x400,0,0,0},0x100,0,{},0}, //1K, vpp + {"12F1501", + PIC16,8.5,1,Read16F1xxx,{0x400,0,11,0},0x100,Write16F1xxx,{0x400,0,0},0}, //1K, vpp, 3.3V + {"12F1571", + PIC16,8.5,1,Read16F1xxx,{0x400,0,12,0},0x200,Write16F1xxx,{0x400,0,0},0}, //1K, vpp, 3.3V + {"12F609,12F615,16F610", + PIC16,13.0,0,Read16Fxxx,{0x400,0,9,0},0x40,Write12F61x,{0x400,0,0},0}, //1K, vpp, cal1 + {"12F752", + PIC16,13.0,0,Read16Fxxx,{0x400,0,10,0},0x80,Write12F61x,{0x400,0,0},0}, //1K, vpp, cal1 + {"16C84,16F84,16F84A", + PIC16,13.0,0,Read16Fxxx,{0x400,0x40,8,1},0x10,Write16F8x,{0x400,0x40,-10},0}, //1K, 64, vdd + {"12F635", + PIC16,13.0,0,Read16Fxxx,{0x400,0x80,10,0},0x80,Write12F6xx,{0x400,0x80,-10},0}, //1K, 128, vpp, cal1 + cal2 + {"16F631", + PIC16,13.0,0,Read16Fxxx,{0x400,0x80,9,0},0x80,Write12F6xx,{0x400,0x80,-10},0}, //1K, 128, vpp, cal1 + {"12F629,12F675,16F630,16F676", + PIC16,13.0,0,Read16Fxxx,{0x400,0x80,8,0},0x20,Write12F62x,{0x400,0x80,-10},0}, //1K, 128, vpp + {"16F627", + PIC16,13.0,0,Read16Fxxx,{0x400,-0x80,8,0},0x10,Write16F62x,{0x400,0x80,-10},0}, //1K, 128, vpp, ee@0x2200 + {"16F627A", + PIC16,13.0,0,Read16Fxxx,{0x400,0x80,8,0},0x10,Write12F6xx,{0x400,0x80,-10},0}, //1K, 128, vpp + {"16F818", + PIC16,13.0,0,Read16Fxxx,{0x400,0x80,8,2},0x10,Write16F81x,{0x400,0x80,-10},0}, //1K, 128, vdd short delay + {"16F72", + PIC16,8.5,1,Read16Fxxx,{0x800,0,8,1},0x20,Write16F7x,{0x800,0,-10},0}, //2K, vdd, 3.3V + {"16F720,16F722,16F722A", + PIC16,13.0,0,Read16Fxxx,{0x800,0,11,0},0x100,Write16F72x,{0x800,0,0},0}, //2K, vpp, config1-2 + cal1-2, 3.3V + {"12C672,12CE674", + PIC16,13.0,0,Read16Fxxx,{0x800,0,0,0},0x100,0,{},0}, //2K, vpp + {"16F716", + PIC16,13.0,0,Read16Fxxx,{0x800,0,8,2},8,Write16F71x,{0x800,1,-10},0}, //2K, vdd + {"16F616,12F617", + PIC16,13.0,0,Read16Fxxx,{0x800,0,9,0},0x40,Write12F61x,{0x800,0,0},0}, //2K, vpp, cal1 + {"16F753", + PIC16,12.5,0,Read16Fxxx,{0x800,0,10,0},0x80,Write12F61x,{0x800,0,0},0}, //2K, vpp, cal1 + {"16LF1902,16F1503,16F1507,16F1512", + PIC16,8.5,1,Read16F1xxx,{0x800,0,11,0},0x200,Write16F1xxx,{0x800,0,0},0}, //2K, vpp, 3.3V + {"12F1572", + PIC16,8.5,1,Read16F1xxx,{0x800,0,12,0},0x200,Write16F1xxx,{0x800,0,0},0}, //2K, vpp, 3.3V + {"16F1703,16F1707", + PIC16,8.5,1,Read16F1xxx,{0x800,0,13,0},0x200,Write16F1xxx,{0x800,0,0},0}, //2K, vpp, 3.3V + {"12F1612,16F1613", + PIC16,8.5,1,Read16F1xxx,{0x800,0,13,4},0x200,Write16F1xxx,{0x800,0,4},0}, //2K, vpp, 3.3V + {"16F15213,16F15223,16F15243,16F15313,16F15323", + PIC16,8.5,1,Read16F18xxx,{0x800,0,0,0},0,Write16F18xxx,{0x800,0,0},0}, //2K, vpp, 3.3V, 8b commands + {"16F870,16F871,16F872", + PIC16,13.0,0,Read16Fxxx,{0x800,0x40,8,1},0x100,Write16F87x,{0x800,0x40,-10},0}, //2K, 64, vdd + {"16F628", + PIC16,13.0,0,Read16Fxxx,{0x800,-0x80,8,0},0x10,Write16F62x,{0x800,0x80,-10},0}, //2K, 128, vpp, ee@0x2200 + {"16F628A", + PIC16,13.0,0,Read16Fxxx,{0x800,0x80,8,0},0x10,Write12F6xx,{0x800,0x80,-10},0}, //2K, 128, vpp + {"16F882", + PIC16,13.0,0,Read16Fxxx,{0x800,0x80,10,0},0x80,Write16F88x,{0x800,0x80,-10},0}, //2K, 128, vpp, config2 + cal1 + {"16F819", + PIC16,13.0,0,Read16Fxxx,{0x800,0x100,8,2},0x10,Write16F81x,{0x800,0x100,-10},0}, //2K, 256, vdd short delay + {"12F683,16F684", + PIC16,13.0,0,Read16Fxxx,{0x800,0x100,9,0},0x40,Write12F6xx,{0x800,0x100,-10},0}, //2K, 256, vpp, cal1 + {"16F636,16F639,16F785", + PIC16,13.0,0,Read16Fxxx,{0x800,0x100,10,0},0x40,Write12F6xx,{0x800,0x100,-10},0}, //2K, 256, vpp, cal1 + cal2 + {"16F677,16F687", + PIC16,13.0,0,Read16Fxxx,{0x800,0x100,9,0},0x80,Write12F6xx,{0x800,0x100,-10},0}, //2K, 256, vpp, cal1 + {"12F1822,16F1823,16F1826", + PIC16,8.5,1,Read16F1xxx,{0x800,0x100,11,0},0x200,Write16F1xxx,{0x800,0x100,0},0}, //2K, 256, vpp, 3.3V + {"16F1782", + PIC16,8.5,1,Read16F1xxx,{0x800,0x100,19,0},0x200,Write16F1xxx,{0x800,0x100,0},0}, //2K, 256, vpp, 3.3V + {"16F18313,16F18323", + PIC16,8.5,1,Read16F1xxx,{0x800,0x100,11,0x1C},0x20,Write16F1xxx,{0x800,0x100,0x1C},0}, //2K, 256, vpp, 3.3V, new cmd + {"16F18013,16F18023", + PIC16,8.5,1,Read16F18xxx,{0x800,1,0,0},0,Write16F18xxx,{0x800,0x100,0},0}, //2K, 256, vpp, 3.3V, 8b commands + {"16F73,16F74", + PIC16,13.0,0,Read16Fxxx,{0x1000,0,8,1},0x20,Write16F7x,{0x1000,0,-10},0}, //4K, vdd + {"16F737,16F747", + PIC16,13.0,0,Read16Fxxx,{0x1000,0,9,2},9,Write16F7x,{0x1000,1,-10},0}, //4K, vdd short/no delay + {"16F721,16F723,16F723A,16F724", + PIC16,13.0,0,Read16Fxxx,{0x1000,0,11,0},0x100,Write16F72x,{0x1000,0,0},0}, //4K, vpp, config1-2 + cal1-2, 3.3V + {"16LF1903,16LF1904,16F1508,16F1513,16LF1554", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,11,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1574,16F1578", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,12,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1704,16F1708", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,13,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1614,16F1618", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,13,4},0x200,Write16F1xxx,{0x1000,0,4},0}, //4K, vpp, 3.3V + {"16F1713", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,17,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1783,16F1784", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,19,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1764,16F1768", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,20,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F1773", + PIC16,8.5,1,Read16F1xxx,{0x1000,0,24,0},0x200,Write16F1xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V + {"16F15214,16F15224,16F15244,16F15254,16F15274,16F15324,16F15344,16F15354", + PIC16,8.5,1,Read16F18xxx,{0x1000,0,0,0},0,Write16F18xxx,{0x1000,0,0},0}, //4K, vpp, 3.3V, 8b commands + {"16F873A,16F874A", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x80,8,1},0x100,Write16F87xA,{0x1000,0x80,1},0}, //4K, 128, vdd + {"16F873,16F874", + PIC16,13.0,0,Read16Fxxx,{0x1000,-0x80,8,1},0x100,Write16F87x,{0x1000,-0x80,-10},0}, //4K, 128, vdd, ee@0x2200 + {"16F685,16F689,16F690", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,9,0},0x80,Write12F6xx,{0x1000,0x100,-10},0}, //4K, 256, vpp, cal1 + {"16F688", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,9,0},0x40,Write12F6xx,{0x1000,0x100,-10},0}, //4K, 256, vpp, cal1 + {"16F883,16F884", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,10,0},0x80,Write16F88x,{0x1000,0x100,-10},0}, //4K, 256, vpp, config2 + cal1 + {"16F648A", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,8,0},0x10,Write12F6xx,{0x1000,0x100,-10},0}, //4K, 256, vpp + {"16F87,16F88", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,9,2},0x10,Write16F81x,{0x1000,0x100,-10},0}, //4K, 256, vdd short delay + {"16F913,16F914", + PIC16,13.0,0,Read16Fxxx,{0x1000,0x100,10,0},0x40,Write12F6xx,{0x1000,0x100,-10},0}, //4K, 256, vpp, cal1 + cal2 + {"16F1933,16F1934,16F1824,16F1827,16F1828,12F1840", + PIC16,8.5,1,Read16F1xxx,{0x1000,0x100,11,0},0x200,Write16F1xxx,{0x1000,0x100,0},0}, //4K, 256, vpp, 3.3V + {"16F18324,16F18344", + PIC16,8.5,1,Read16F1xxx,{0x1000,0x100,11,0x1C},0x20,Write16F1xxx,{0x1000,0x100,0x1C},0}, //4K, 256, vpp, 3.3V, new cmd + {"16F17114,16F17124,16F17144,16F17154,16F17174,16F18014,16F18024,16F18044,16F18054,16F18074,16F18114,16F18124,16F18144,\ + 16F18154,16F18174,16F18424,16F18444", + PIC16,8.5,1,Read16F18xxx,{0x1000,1,0,0},0,Write16F18xxx,{0x1000,0x100,0},0}, //4K, 256, vpp, 3.3V, 8b commands + {"16F18854", + PIC16,8.5,1,Read16F18xxx,{0x1000,0x100,0,0x10},0,Write16F18xxx,{0x1000,0x100,0x10},0}, //4K, 256, vpp, 3.3V, 8b commands no DIA + {"16F76,16F77", + PIC16,13.0,0,Read16Fxxx,{0x2000,0,8,1},0x20,Write16F7x,{0x2000,0,-10},0}, //8K, vdd + {"16F767,16F777", + PIC16,13.0,0,Read16Fxxx,{0x2000,0,9,2},0x40,Write16F7x,{0x2000,1,-10},0}, //8K, vdd short delay + {"16F726,16F727,16F707", + PIC16,8.5,1,Read16Fxxx,{0x2000,0,11,0},0x100,Write16F72x,{0x2000,0,0},0}, //8K, vpp, config1-2 + cal1-2, 3.3V + {"16LF1906,16LF1907,16F1509,16F1454,16F1455,16F1459,16F1516,16F1517,16F1526,16LF1559", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,11,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F1575,16F1579", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,12,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F1705,16F1709", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,13,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F1615,16F1619", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,13,4},0x200,Write16F1xxx,{0x2000,0,4},0}, //8K, vpp, 3.3V + {"16F1716,16F1717", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,17,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F1765,16F1769", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,20,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F1776,16F1777", + PIC16,8.5,1,Read16F1xxx,{0x2000,0,24,0},0x200,Write16F1xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V + {"16F15225,16F15245,16F15255,16F15275,16F15325,16F15345,16F15355,16F15375,16F15385", + PIC16,8.5,1,Read16F18xxx,{0x2000,0,0,0},0,Write16F18xxx,{0x2000,0,0},0}, //8K, vpp, 3.3V, 8b commands + {"16F876A,16F877A", + PIC16,13.0,0,Read16Fxxx,{0x2000,0x100,8,1},0x100,Write16F87xA,{0x2000,0x100,1},0}, //8K, 256, vdd + {"16F876,16F877", + PIC16,13.0,0,Read16Fxxx,{0x2000,-0x100,8,1},0x100,Write16F87x,{0x2000,-0x100,-10},0}, //8K, 256, vdd, ee@0x2200 + {"16F886,16F887", + PIC16,11.0,0,Read16Fxxx,{0x2000,0x100,10,0},0x80,Write16F88x,{0x2000,0x100,-10},0}, //8K, 256, vpp, config2 + cal1 + {"16F916,16F917,16F946", + PIC16,13.0,0,Read16Fxxx,{0x2000,0x100,10,0},0x40,Write12F6xx,{0x2000,0x100,-10},0}, //8K, 256, vpp, cal1 + cal2 + {"16F1936,16F1937,16F1946,16F1825,16F1829,16F1847", + PIC16,8.5,1,Read16F1xxx,{0x2000,0x100,11,0},0x200,Write16F1xxx,{0x2000,0x100,0},0}, //8K, 256, vpp, 3.3V + {"16F1786,16F1787", + PIC16,8.5,1,Read16F1xxx,{0x2000,0x100,19,0},0x200,Write16F1xxx,{0x2000,0x100,0},0}, //8K, 256, vpp, 3.3V + {"16F18325,16F18345", + PIC16,8.5,1,Read16F1xxx,{0x2000,0x100,11,0x1C},0x20,Write16F1xxx,{0x2000,0x100,0x1C},0}, //8K, 256, vpp, 3.3V, new cmd + {"16F17115,16F17125,16F17145,16F17155,16F17175,16F18015,16F18025,16F18045,16F18055,16F18075,16F18115,16F18125,16F18145,16F18155,16F18175,\ + 16F18425,16F18445,16F18455,16F19155,16F19175,16F19185,16F19195", + PIC16,8.5,1,Read16F18xxx,{0x2000,1,0,0},0,Write16F18xxx,{0x2000,0x100,0},0}, //8K, 256, vpp, 3.3V, 8b commands + {"16F18855,16F18875", + PIC16,8.5,1,Read16F18xxx,{0x2000,0x100,0,0x10},0,Write16F18xxx,{0x2000,0x100,0x10},0}, //8K, 256, vpp, 3.3V, 8b commands no DIA + {"16F1518,16F1519,16F1527", + PIC16,8.5,1,Read16F1xxx,{0x4000,0,11,0},0x200,Write16F1xxx,{0x4000,0,0},0}, //16K, vpp, 3.3V + {"16F1718,16F1719", + PIC16,8.5,1,Read16F1xxx,{0x4000,0,17,0},0x200,Write16F1xxx,{0x4000,0,0},0}, //16K, vpp, 3.3V + {"16F1778,16F1779", + PIC16,8.5,1,Read16F1xxx,{0x4000,0,24,0},0x200,Write16F1xxx,{0x4000,0,0},0}, //16K, vpp, 3.3V + {"16F15256,16F15276,16F15356,16F15376,16F15386", + PIC16,8.5,1,Read16F18xxx,{0x4000,0,0,0},0,Write16F18xxx,{0x4000,0,0},0}, //16K, vpp, 3.3V, 8b commands + {"16F1938,16F1939,16F1947", + PIC16,8.5,1,Read16F1xxx,{0x4000,0x100,11,0},0x200,Write16F1xxx,{0x4000,0x100,0},0}, //16K, 256, vpp, 3.3V + {"16F1788,16F1789", + PIC16,8.5,1,Read16F1xxx,{0x4000,0x100,19,0},0x200,Write16F1xxx,{0x4000,0x100,0},0}, //16K, 256, vpp, 3.3V + {"16F18326,16F18346", + PIC16,8.5,1,Read16F1xxx,{0x4000,0x100,11,0x1C},0x20,Write16F1xxx,{0x4000,0x100,0x1C},0}, //16K, 256, vpp, 3.3V, new cmd + {"16F17126,16F17146,16F17156,16F17176,16F18026,16F18046,16F18056,16F18076,16F18126,16F18146,16F18156,16F18176,\ + 16F18426,16F18446,16F18456,16F19156,16F19176,16F19186,16F19196", + PIC16,8.5,1,Read16F18xxx,{0x4000,1,0,0},0,Write16F18xxx,{0x4000,0x100,0},0}, //16K, 256, vpp, 3.3V, 8b commands + {"16F18856,16F18876", + PIC16,8.5,1,Read16F18xxx,{0x4000,0x100,0,0x10},0,Write16F18xxx,{0x4000,0x100,0x10},0}, //16K, 256, vpp, 3.3V, 8b commands no DIA + {"16F19197", + PIC16,8.5,1,Read16F18xxx,{0x8000,1,0,0},0,Write16F18xxx,{0x8000,0x100,0},0}, //32K, 256, vpp, 3.3V, 8b commands + {"16F18857,16F18877", + PIC16,8.5,1,Read16F18xxx,{0x8000,0x100,0,0x10},0,Write16F18xxx,{0x8000,0x100,0x10},0}, //32K, 256, vpp, 3.3V, 8b commands no DIA +//-------------PIC18--------------------------------------------------------- +// Read18Fx options: +// bit [3:0] +// 0 = vdd before vpp (12V) +// 1 = vdd before vpp (9V) +// 2 = low voltage entry with 32 bit key +// bit [7:4] +// 0 = normal control registers address +// 1 = new control registers address (18FxxK80) +// +// Write18Fx options: +// bit [3:0] +// 0 = vdd before vpp (12V) +// 1 = vdd before vpp (9V) +// 2 = low voltage entry with 32 bit key +// bit [7:4] +// 0 = normal eeprom write algoritm +// 1 = with unlock sequence 55 AA +// bit [11:8] +// 0 = 15ms erase delay, 1ms code write time, 5ms EE write, 5ms config write +// 1 = 550ms erase delay, 1.2ms code write time, no config or EEPROM +// 2 = 550ms erase delay, 3.4ms code write time, no config or EEPROM +// 3 = separate block erase with 5ms delay, 1ms code write, 5ms EE write, 5ms config write +// + new control registers address (18FxxK80) + {"18F1230", + PIC18,12,0,Read18Fx,{0x1000,0x80,0},0,Write18Fx,{0x1000,0x80,8,0x0F0F,0x8787,0},0}, //4K, 128, 8 + {"18F2221,18F4221", + PIC18,12,0,Read18Fx,{0x1000,0x100,0},0,Write18Fx,{0x1000,0x100,8,0x3F3F,0x8F8F,0},0}, //4K, 256, 8 + {"18F1220,18F2220,18F4220", + PIC18,12,0,Read18Fx,{0x1000,0x100,0},0,Write18Fx,{0x1000,0x100,8,0x10000,0x80,0x10},0}, //4K, 256, 8, EE with unlock + {"18F63J11,18F63J90,18F83J11,18F83J90", + PIC18,-1,1,Read18Fx,{0x2000,0,2},0,Write18Fx,{0x2000,0,64,0x0101,0x8080,0x202},0}, //8K, 0, 64, LV + {"18F1330", + PIC18,12,0,Read18Fx,{0x2000,0x80,0},0,Write18Fx,{0x2000,0x80,8,0x0F0F,0x8787,0},0}, //8K, 128, 8 + {"18F2321,18F4321", + PIC18,12,0,Read18Fx,{0x2000,0x100,0},0,Write18Fx,{0x2000,0x100,8,0x3F3F,0x8F8F,0},0}, //8K, 256, 8 + {"18F1320,18F2320,18F4320,18F2331,18F4331", + PIC18,12,0,Read18Fx,{0x2000,0x100,0},0,Write18Fx,{0x2000,0x100,8,0x10000,0x80,0x10},0}, //8K, 256, 8, EE with unlock + {"18F13K50,18F13K22", + PIC18,8.5,1,Read18Fx,{0x2000,0x100,1},0,Write18Fx,{0x2000,0x100,8,0x0F0F,0x8F8F,1},0}, //8K, 256, 8, 9V + {"18F23K20,18F43K20", + PIC18,8.5,1,Read18Fx,{0x2000,0x100,1},0,Write18Fx,{0x2000,0x100,16,0x0F0F,0x8F8F,1},0}, //8K, 256, 16, 9V + {"18F23K22,18F43K22", + PIC18,8.5,1,Read18Fx,{0x2000,0x100,1},0,Write18Fx,{0x2000,0x100,64,0x0F0F,0x8F8F,1},0}, //8K, 256, 64, 9V + {"18F2439,18F4439", + PIC18,12,0,Read18Fx,{0x3000,0x100,0},0,Write18Fx,{0x3000,0x100,8,0x10000,0x80,0x10},0}, //12K, 256, 8, EE with unlock + {"18F2410,18F4410", + PIC18,12,0,Read18Fx,{0x4000,0,0},0,Write18Fx,{0x4000,0,32,0x3F3F,0x8F8F,0},0}, //16K, 0, 32 + {"18F24J10,18F44J10,18F64J11,18F64J90,18F84J11,18F84J90", + PIC18,-1,1,Read18Fx,{0x4000,0,2},0,Write18Fx,{0x4000,0,64,0x0101,0x8080,0x202},0}, //16K, 0, 64, LV + {"18F24J11,18F24J50,18F44J11,18F44J50", + PIC18,-1,1,Read18Fx,{0x4000,0,2},0,Write18Fx,{0x4000,0,64,0x0101,0x8080,0x102},0}, //16K, 0, 64, LV + {"18F2420,18F2423,18F4420,18F4423,18F2480,18F4480", + PIC18,12,0,Read18Fx,{0x4000,0x100,0},0,Write18Fx,{0x4000,0x100,32,0x3F3F,0x8F8F,0},0}, //16K, 256, 32 + {"18F2431,18F4431,18F242,18F248,18F442,18F448", + PIC18,12,0,Read18Fx,{0x4000,0x100,0},0,Write18Fx,{0x4000,0x100,8,0x10000,0x80,0x10},0}, //16K, 256, 8, EE with unlock + {"18F2450,18F4450", + PIC18,12,0,Read18Fx,{0x4000,0,0},0,Write18Fx,{0x4000,0,16,0x3F3F,0x8F8F,0},0}, //16K, 0, 16 + {"18F14K50,18F14K22", + PIC18,8.5,1,Read18Fx,{0x4000,0x100,1},0,Write18Fx,{0x4000,0x100,16,0x0F0F,0x8F8F,1},0}, //16K, 256, 16, 9V + {"18F24K20,18F44K20", + PIC18,8.5,1,Read18Fx,{0x4000,0x100,1},0,Write18Fx,{0x4000,0x100,32,0x0F0F,0x8F8F,1},0}, //16K, 256, 32, 9V + {"18F24K22,18F44K22,18F24K50", + PIC18,8.5,1,Read18Fx,{0x4000,0x100,1},0,Write18Fx,{0x4000,0x100,64,0x0F0F,0x8F8F,1},0}, //16K, 256, 64, 9V + {"18F04Q40,18F14Q40,18F04Q41,18F14Q41,18F24Q71,18F44Q71,18F54Q71", + PIC18,8.5,1,Read18FKx,{0x4000,1,0x10},0,Write18FKx,{0x4000,0x200,0x10,0,0,0},0}, //16K, 256, --, LV + {"18F2455,18F2458,18F4455,18F4458", + PIC18,12,0,Read18Fx,{0x6000,0x100,0},0,Write18Fx,{0x6000,0x100,32,0x3F3F,0x8F8F,0},0}, //24K, 256, 32 + {"18F2539,18F4539", + PIC18,12,0,Read18Fx,{0x6000,0x100,0},0,Write18Fx,{0x6000,0x100,8,0x10000,0x80,0x10},0}, //24K, 256, 8, EE with unlock + {"18F2510,18F4510", + PIC18,12,0,Read18Fx,{0x8000,0,0},0,Write18Fx,{0x8000,0,32,0x3F3F,0x8F8F,0},0}, //32K, 0, 32 + {"18F25J10,18F45J10,18F65J10,18F65J11,18F65J50,18F65J90,18F85J10,18F85J11,18F85J50,18F85J90", + PIC18,-1,1,Read18Fx,{0x8000,0,2},0,Write18Fx,{0x8000,0,64,0x0101,0x8080,0x202},0}, //32K, 0, 64, LV + {"18F25J11,18F25J50,18F45J11,18F45J50", + PIC18,-1,1,Read18Fx,{0x8000,0,2},0,Write18Fx,{0x8000,0,64,0x0101,0x8080,0x102},0}, //32K, 0, 64, LV + {"18F252,18F258,18F452,18F458", + PIC18,12,0,Read18Fx,{0x8000,0x100,0},0,Write18Fx,{0x8000,0x100,8,0x10000,0x80,0x10},0}, //32K, 256, 8, EE with unlock + {"18F2550,18F2553,18F4550,18F4553,18F2520,18F2523,18F4520,18F4523,18F2580,18F4580", + PIC18,12,0,Read18Fx,{0x8000,0x100,0},0,Write18Fx,{0x8000,0x100,32,0x3F3F,0x8F8F,0},0}, //32K, 256, 32 + {"18F25K20,18F45K20", + PIC18,8.5,1,Read18Fx,{0x8000,0x100,1},0,Write18Fx,{0x8000,0x100,32,0x0F0F,0x8F8F,1},0}, //32K, 256, 32, 9V + {"18F25K22,18F45K22,18F25K50,18F45K50", + PIC18,8.5,1,Read18Fx,{0x8000,0x100,1},0,Write18Fx,{0x8000,0x100,64,0x0F0F,0x8F8F,1},0}, //32K, 256, 64, 9V + {"18F25K42,18F45K42,18F55K42", + PIC18,8.5,1,Read18FKx,{0x8000,1,0},0,Write18FKx,{0x8000,0x100,0,0,0,0},0}, //32K, 256, --, LV + {"18F05Q40,18F15Q40,18F05Q41,18F15Q41,18F25Q71,18F45Q71,18F55Q71", + PIC18,8.5,1,Read18FKx,{0x8000,1,0x10},0,Write18FKx,{0x8000,0x200,0x10,0,0,0},0}, //32K, 256, --, LV + {"18F25K80,18F45K80,18F65K80", + PIC18,8.5,1,Read18Fx,{0x8000,0x400,0x13},0,Write18Fx,{0x8000,0x400,64,0,0,0x303},0}, //32K, 1K, 64, 9V, xxK80 + {"18F8520", + PIC18,12,0,Read18Fx,{0x8000,0x400,0},0,Write18Fx,{0x8000,0x400,8,0x10000,0x0080,0x10},0},//32K, 1K, 8, EE with unlock + {"18F25Q43,18F45Q43,18F55Q43", + PIC18,8.5,1,Read18FKx,{0x8000,1,0x10},0,Write18FKx,{0x8000,0x400,0x10,0,0,0},0}, //32K, 1k, --, LV + {"18F25K83", + PIC18,8.5,1,Read18FKx,{0x8000,1,0},0,Write18FKx,{0x8000,0x400,0,0,0,0},0}, //32K, 1k, --, LV + {"18F2515,18F4515", + PIC18,12,0,Read18Fx,{0xC000,0,0},0,Write18Fx,{0xC000,0,64,0x3F3F,0x8F8F,0},0}, //48K, 0, 64 + {"18F65J15,18F85J15", + PIC18,-1,1,Read18Fx,{0xC000,0,2},0,Write18Fx,{0xC000,0,64,0x0101,0x8080,0x202},0}, //48K, 0, 64, LV + {"18F2525,18F2585,18F4525,18F4585", + PIC18,12,0,Read18Fx,{0xC000,0x400,0},0,Write18Fx,{0xC000,0x400,64,0x3F3F,0x8F8F,0},0}, //48K, 1K, 64 + {"18F2610,18F4610", + PIC18,12,0,Read18Fx,{0x10000,0,0},0,Write18Fx,{0x10000,0,64,0x3F3F,0x8F8F,0},0}, //64K, 0, 64 + {"18F26J11,18F26J13,18F26J50,18F26J53,18F46J11,18F46J13,18F46J50,18F46J53", + PIC18,-1,1,Read18Fx,{0x10000,0,2},0,Write18Fx,{0x10000,0,64,0x0101,0x8080,0x102},0}, //64K, 0, 64, LV + {"18F66J60,18F86J60,18F96J60,18F66J10,18F66J11,18F66J50,18F66J90,18F66J93,18F86J10,18F86J11,18F86J50,18F86J72,18F86J90,18F86J93", + PIC18,-1,1,Read18Fx,{0x10000,0,2},0,Write18Fx,{0x10000,0,64,0x0101,0x8080,0x202},0}, //64K, 0, 64, LV + {"18F2620,18F2680,18F4620,18F4680", + PIC18,12,0,Read18Fx,{0x10000,0x400,0},0,Write18Fx,{0x10000,0x400,64,0x3F3F,0x8F8F,0},0},//64K, 1K, 64 + {"18F26K20,18F46K20,18F26K22,18F46K22,18F26K50,18F46K50", + PIC18,12,0,Read18Fx,{0x10000,0x100,1},0,Write18Fx,{0x10000,0x100,64,0x0F0F,0x8F8F,1},0},//64K, 256, 64, 9V + {"18F06Q40,18F16Q40,18F06Q41,18F16Q41,18F26Q71,18F46Q71,18F56Q71", + PIC18,8.5,1,Read18FKx,{0x10000,1,0x10},0,Write18FKx,{0x10000,0x200,0x10,0,0,0},0}, //64K, 256, --, LV + {"18F26K80,18F46K80,18F66K80", + PIC18,8.5,1,Read18Fx,{0x10000,0x400,0x13},0,Write18Fx,{0x10000,0x400,64,0,0,0x303},0}, //64K, 1K, 64, 9V, xxK80 + {"18F26Q43,18F46Q43,18F56Q43", + PIC18,8.5,1,Read18FKx,{0x10000,1,0x10},0,Write18FKx,{0x10000,0x400,0x10,0,0,0},0}, //64K, 1k, --, LV + {"18F26K42,18F46K42,18F56K42,18F26K83", + PIC18,8.5,1,Read18FKx,{0x10000,1,0},0,Write18FKx,{0x10000,0x400,0,0,0,0},0}, //64K, 1k, --, LV + {"18F26Q83,18F26Q84,18F46Q83,18F46Q84,18F56Q83,18F56Q84", + PIC18,8.5,1,Read18FKx,{0x10000,1,0x20},0,Write18FKx,{0x10000,0x400,0x20,0,0,0},0}, //64K, 1k, --, LV + {"18F2682,18F4682", + PIC18,12,0,Read18Fx,{0x14000,0x400,0},0,Write18Fx,{0x14000,0x400,64,0x3F3F,0x8F8F,0},0},//80K, 1K, 64 + {"18F66J65,18F86J65,18F96J65,18F66J15,18F66J16,18F66J55,18F86J15,18F86J16,18F86J55", + PIC18,-1,1,Read18Fx,{0x18000,0,2},0,Write18Fx,{0x18000,0,64,0x0101,0x8080,0x202},0}, //96K, 0, 64, LV + {"18F2685,18F4685", + PIC18,12,0,Read18Fx,{0x18000,0x400,0},0,Write18Fx,{0x18000,0x400,64,0x3F3F,0x8F8F,0},0},//96K, 1K, 64 + {"18F27J13,18F27J53,18F47J13,18F47J53,18F67J10,18F87J10", + PIC18,-1,1,Read18Fx,{0x20000,0,2},0,Write18Fx,{0x20000,0,64,0x0101,0x8080,0x102},0}, //128K, 0, 64, LV + {"18F67J60,18F87J60,18F97J60,18F67J11,18F67J50,18F67J90,18F67J93,18F87J11,18F87J50,18F87J72,18F87J90,18F87J93", + PIC18,-1,1,Read18Fx,{0x20000,0,2},0,Write18Fx,{0x20000,0,64,0x0101,0x8080,0x202},0}, //128K, 0, 64, LV + {"18F8722", + PIC18,12,0,Read18Fx,{0x20000,0x400,0},0,Write18Fx,{0x20000,0x400,64,0xFFFF,0x8787,0},0},//128K, 1K, 64 + {"18F27Q43,18F47Q43,18F57Q43", + PIC18,8.5,1,Read18FKx,{0x20000,1,0x10},0,Write18FKx,{0x20000,0x400,0x10,0,0,0},0}, //128K, 1k, --, LV + {"18F27K42,18F47K42,18F57K42", + PIC18,8.5,1,Read18FKx,{0x20000,1,0},0,Write18FKx,{0x20000,0x400,0,0,0,0},0}, //128K, 1k, --, LV + {"18F27Q83,18F27Q84,18F47Q83,18F47Q84,18F57Q83,18F57Q84", + PIC18,8.5,1,Read18FKx,{0x20000,1,0x20},0,Write18FKx,{0x20000,0x400,0x20,0,0,0},0}, //128K, 1k, --, LV +//-------------PIC24--------------------------------------------------------- +// options: +// bit [3:0] +// 0 = low voltage ICSP entry +// 1 = High voltage ICSP entry (6V) +// 2 = High voltage ICSP entry (12V) + PIC30F sequence (additional NOPs) +// 3 = low voltage ICSP entry (5V power supply) +// bit [7:4] +// 0 = config area in the last 2 program words +// 1 = config area in the last 3 program words +// 2 = config area in the last 4 program words +// 3 = 0xF80000 to 0xF80010 except 02 (24F) +// 4 = 0xF80000 to 0xF80016 (24H-33F) +// 5 = 0xF80000 to 0xF8000C (x16 bit, 30F) +// 6 = 0xF80000 to 0xF8000E (30FSMPS) +// bit [11:8] +// 0 = code erase word is 0x4064, row write is 0x4004 +// 1 = code erase word is 0x404F, row write is 0x4001 +// 2 = code erase word is 0x407F, row write is 0x4001, 55AA unlock and external timing (2 ms) +// 3 = code erase word is 0x407F, row write is 0x4001, 55AA unlock and external timing (200 ms) +// bit [15:12] +// 0 = eeprom erase word is 0x4050, write word is 0x4004 +// 1 = eeprom erased with bulk erase, write word is 0x4004 +// 2 = eeprom erased with special sequence, write word is 0x4004 +// bit [19:16] +// 0 = config write is 0x4000 +// 1 = config write is 0x4003 +// 2 = config write is 0x4004 +// 3 = config write is 0x4008 + {"24F04KA200,24F04KA201", + PIC24,6,1,Read24Fx,{0xB00,0,0x31,0x05BE},0x800,Write24Fx,{0xB00,0,0x20031,0x05BE,32},2.0}, //1.375KW, HV + {"24F08KA101,24F08KA102", + PIC24,6,1,Read24Fx,{0x1600,0x200,0x31,0x05BE},0x800,Write24Fx,{0x1600,0x200,0x20031,0x05BE,32},2.0}, //2.75KW, HV, 512 + {"24F16KA101,24F16KA102", + PIC24,6,1,Read24Fx,{0x2C00,0x200,0x31,0x05BE},0x800,Write24Fx,{0x2C00,0x200,0x20031,0x05BE,32},2.0}, //5.5KW, HV, 512 + {"24FJ16GA002,24FJ16GA004", + PIC24,-1,1,Read24Fx,{0x2C00,0,0,0x05BE},0x800,Write24Fx,{0x2C00,0,0x10100,0x05BE,64},2.0}, //5.5KW + {"24FJ32GA002,24FJ32GA004", + PIC24,-1,1,Read24Fx,{0x5800,0,0,0x05BE},0x800,Write24Fx,{0x5800,0,0x10100,0x05BE,64},2.0}, //11KW + {"24FJ32GA102,24FJ32GA104,24FJ32GB002,24FJ32GB004", + PIC24,-1,1,Read24Fx,{0x5800,0,0x20,0x07F0},0x800,Write24Fx,{0x5800,0,0x10120,0x07F0,64},2.0}, //11KW 4 Config Word + {"24FJ48GA002,24FJ48GA004", + PIC24,-1,1,Read24Fx,{0x8400,0,0,0x05BE},0x800,Write24Fx,{0x8400,0,0x10100,0x05BE,64},2.0}, //16.5KW + {"24FJ64GA002,24FJ64GA004,24FJ64GA006,24FJ64GA008,24FJ64GA010", + PIC24,-1,1,Read24Fx,{0xAC00,0,0,0x05BE},0x800,Write24Fx,{0xAC00,0,0x10100,0x05BE,64},2.0}, //22KW + {"24FJ64GA102,24FJ64GA104,24FJ64GB002,24FJ64GB004", + PIC24,-1,1,Read24Fx,{0xAC00,0,0x20,0x07F0},0x800,Write24Fx,{0xAC00,0,0x10120,0x07F0,64},2.0}, //22KW 4 Config Word + {"24FJ64GA306,24FJ64GA308,24FJ64GA310,24FJ64GC006,24FJ64GC008,24FJ64GC010", + PIC24,-1,1,Read24Fx,{0xAC00,0,0x120,0x07F0},0x800,Write24Fx,{0xAC00,0,0x110120,0x07F0,64},2.0}, //22KW 4 Config Word new TABLPAG + {"24FJ64GB106,24FJ64GB108,24FJ64GB110", + PIC24,-1,1,Read24Fx,{0xAC00,0,0x10,0x07F0},0x800,Write24Fx,{0xAC00,0,0x10110,0x07F0,64},2.0}, //22KW 3 Config Word + {"24FJ96GA006,24FJ96GA008,24FJ96GA010", + PIC24,-1,1,Read24Fx,{0x10000,0,0,0x05BE},0x800,Write24Fx,{0x10000,0,0x10100,0x05BE,64},2.0}, //32KW + {"24FJ128GA006,24FJ128GA008,24FJ128GA010", + PIC24,-1,1,Read24Fx,{0x15800,0,0,0x05BE},0x800,Write24Fx,{0x15800,0,0x10100,0x05BE,64},2.0}, //44KW + {"24FJ128GA106,24FJ128GA108,24FJ128GA110,24FJ128GB106,24FJ128GB108,24FJ128GB110", + PIC24,-1,1,Read24Fx,{0x15800,0,0x10,0x07F0},0x800,Write24Fx,{0x15800,0,0x10110,0x07F0,64},2.0}, //44KW 3 Config Word + {"24FJ128GA306,24FJ128GA308,24FJ128GA310,24FJ128GB206,24FJ128GB210,24FJ128GC006,24FJ128GC008,\ +24FJ128GC010,24FJ128DA106,24FJ128DA110,24FJ128DA206,24FJ128DA210", + PIC24,-1,1,Read24Fx,{0x15800,0,0x120,0x07F0},0x800,Write24Fx,{0x15800,0,0x110120,0x07F0,64},2.0}, //44KW 4 Config Word new TABLPAG + {"24FJ192GA106,24FJ192GA108,24FJ192GA110,24FJ192GB106,24FJ192GB108,24FJ192GB110", + PIC24,-1,1,Read24Fx,{0x20C00,0,0x10,0x07F0},0x800,Write24Fx,{0x20C00,0,0x10110,0x07F0,64},2.0}, //68KW 3 Config Word + {"24FJ256GA106,24FJ256GA108,24FJ256GA110,24FJ256GB106,24FJ256GB108,24FJ256GB110", + PIC24,-1,1,Read24Fx,{0x2AC00,0,0x10,0x07F0},0x800,Write24Fx,{0x2AC00,0,0x10110,0x07F0,64},2.0}, //88KW 3 Config Word + {"24FJ256DA106,24FJ256DA110,24FJ256DA206,24FJ256DA210,24FJ256GB206,24FJ256GB210", + PIC24,-1,1,Read24Fx,{0x2AC00,0,0x120,0x07F0},0x800,Write24Fx,{0x2AC00,0,0x110120,0x07F0,64},2.0}, //88KW 4 Config Word new TABLPAG + {"33FJ06GS101,33FJ06GS102,33FJ06GS202", + PIC24,-1,1,Read24Fx,{0x1000,0,0x40,0x07F0},0x800,Write24Fx,{0x1000,0,0x00140,0x07F0,64},2.0}, //2KW + {"24HJ12GP201,24HJ12GP202,33FJ12GP201,33FJ12GP202,33FJ12MC201,33FJ12MC202", + PIC24,-1,1,Read24Fx,{0x2000,0,0x40,0x07F0},0x800,Write24Fx,{0x2000,0,0x00140,0x07F0,64},2.0}, //4KW + {"24HJ16GP304,33FJ16GP304,33FJ16GS402,33FJ16GS404,33FJ16GS502,33FJ16GS504,33FJ16MC304", + PIC24,-1,1,Read24Fx,{0x2C00,0,0x40,0x07F0},0x800,Write24Fx,{0x2C00,0,0x00140,0x07F0,64},2.0}, //5.5KW + {"24HJ32GP202,24HJ32GP204,24HJ32GP302,24HJ32GP304,33FJ32GP202,33FJ32GP204,33FJ32GP302,\ +33FJ32GP304,33FJ32GS406,33FJ32GS606,33FJ32GS608,33FJ32GS610,33FJ32MC202,33FJ32MC204,33FJ32MC302,33FJ32MC304", + PIC24,-1,1,Read24Fx,{0x5800,0,0x40,0x07F0},0x1000,Write24Fx,{0x5800,0,0x00140,0x07F0,64},2.0}, //11KW + {"24HJ64GP202,24HJ64GP204,24HJ64GP206,24HJ64GP210,24HJ64GP502,24HJ64GP504,24HJ64GP506,24HJ64GP510,\ +33FJ64GP202,33FJ64GP204,33FJ64GP206,33FJ64GP306,33FJ64GP310,33FJ64GP706,33FJ64GP708,33FJ64GP710,33FJ64GP802,\ +33FJ64GP804,33FJ64GS406,33FJ64GS606,33FJ64GS608,33FJ64GS610,33FJ64MC202,33FJ64MC204,33FJ64MC506,33FJ64MC508,33FJ64MC510,\ +33FJ64MC706,33FJ64MC710,33FJ64MC802,33FJ64MC804", + PIC24,-1,1,Read24Fx,{0xAC00,0,0x40,0x07F0},0x1000,Write24Fx,{0xAC00,0,0x00140,0x07F0,64},2.0}, //22KW + {"24HJ128GP202,24HJ128GP204,24HJ128GP206,24HJ128GP210,24HJ128GP306,24HJ128GP310,24HJ128GP502,\ +24HJ128GP504,24HJ128GP506,24HJ128GP510,\ +33FJ128GP202,33FJ128GP204,33FJ128GP206,33FJ128GP306,33FJ128GP310,33FJ128GP706,33FJ128GP708,33FJ128GP710,\ +33FJ128GP802,33FJ128GP804,33FJ128MC202,33FJ128MC204,33FJ128MC506,33FJ128MC510,33FJ128MC706,33FJ128MC708,\ +33FJ128MC710,33FJ128MC802,33FJ128MC804", + PIC24,-1,1,Read24Fx,{0x15800,0,0x40,0x07F0},0x1000,Write24Fx,{0x15800,0,0x00140,0x07F0,64},2.0}, //44KW + {"24HJ256GP206,24HJ256GP210,24HJ256GP610,\ +33FJ256GP506,33FJ256GP510,33FJ256GP710,33FJ256MC510,33FJ256MC710", + PIC24,-1,1,Read24Fx,{0x2AC00,0,0x40,0x07F0},0x1000,Write24Fx,{0x2AC00,0,0x00140,0x07F0,64},2.0}, //88KW + {"24EP32GP202,24EP32GP203,24EP32GP204,33EP32GP502,33EP32GP503,33EP32GP504,\ +24EP32MC202,24EP32MC203,24EP32MC204,33EP32MC202,33EP32MC203,33EP32MC204,33EP32MC502,33EP32MC503,33EP32MC504", + PIC24,-1,1,Read24Ex,{0x5800,0,0,0x0FF0},0x1000,Write24Ex,{0x5800,0,0,0,0,0},2.0}, //11KW 10 Config Word + {"24EP64GP202,24EP64GP203,24EP64GP204,24EP64GP206,33EP64GP502,33EP64GP503,33EP64GP504,33EP64GP506,\ +24EP64MC202,24EP64MC203,24EP64MC204,24EP64MC206,33EP64MC202,33EP64MC203,33EP64MC204,33EP64MC206,\ +33EP64MC502,33EP64MC503,33EP64MC504,33EP64MC506", + PIC24,-1,1,Read24Ex,{0xB000,0,0,0x0FF0},0x1000,Write24Ex,{0xB000,0,0,0,0,0},2.0}, //22.5KW 10 Config Word + {"24EP128GP202,24EP128GP204,24EP128GP206,33EP128GP502,33EP128GP504,33EP128GP506,\ +24EP128MC202,24EP128MC204,24EP128MC206,33EP128MC202,33EP128MC204,33EP128MC206,\ +33EP128MC502,33EP128MC504,33EP128MC506", + PIC24,-1,1,Read24Ex,{0x15800,0,0,0x0FF0},0x1000,Write24Ex,{0x15800,0,0,0,0,0},2.0}, //44KW 10 Config Word + {"24EP256GP202,24EP256GP204,24EP256GP206,33EP256GP502,33EP256GP504,33EP256GP506,\ +24EP256MC202,24EP256MC204,24EP256MC206,33EP256MC202,33EP256MC204,33EP256MC206,\ +33EP256MC502,33EP256MC504,33EP256MC506", + PIC24,-1,1,Read24Ex,{0x2B000,0,0,0x0FF0},0x1000,Write24Ex,{0x2B000,0,0,0,0,0},2.0}, //88KW 10 Config Word + {"24EP512GP202,24EP512GP204,24EP512GP206,33EP512GP502,33EP512GP504,33EP512GP506,\ +24EP512MC202,24EP512MC204,24EP512MC206,33EP512MC202,33EP512MC204,33EP512MC206,\ +33EP512MC502,33EP512MC504,33EP512MC506", + PIC24,-1,1,Read24Ex,{0x56000,0,0,0x0FF0},0x1000,Write24Ex,{0x56000,0,0,0,0,0},2.0}, //175KW 10 Config Word + {"30F1010", + PIC24,-1,0,Read24Fx,{0x1000,0,0x63,0x05BE},0x600,Write24Fx,{0x1000,0,0x30263,0x05BE,32},2.0}, //1KW, LV5V + {"30F2020,30F2023", + PIC24,-1,0,Read24Fx,{0x2000,0,0x63,0x05BE},0x600,Write24Fx,{0x2000,0,0x30263,0x05BE,32},2.0}, //2KW, LV5V + {"30F2010", + PIC24,12,0,Read24Fx,{0x2000,0x400,0x52,0x05BE},0x600,Write24Fx,{0x2000,0x400,0x31252,0x05BE,32},2.0}, //4KW, 1K, HV12 + {"30F2011,30F2012", + PIC24,12,0,Read24Fx,{0x2000,0,0x52,0x05BE},0x600,Write24Fx,{0x2000,0,0x31252,0x05BE,32},2.0}, //4KW, HV12 + {"30F3010,30F3011,30F3012,30F3013,30F3014", + PIC24,12,0,Read24Fx,{0x4000,0x400,0x52,0x05BE},0x600,Write24Fx,{0x4000,0x400,0x31252,0x05BE,32},2.0}, //8KW, 1K, HV12 + {"30F4011,30F4012,30F4013", + PIC24,12,0,Read24Fx,{0x8000,0x400,0x52,0x05BE},0x600,Write24Fx,{0x8000,0x400,0x31252,0x05BE,32},2.0}, //16KW, 1K, HV12 + {"30F5011,30F5013,30F5015,30F5016", + PIC24,12,0,Read24Fx,{0xB000,0x400,0x52,0x05BE},0x600,Write24Fx,{0xB000,0x400,0x31252,0x05BE,32},2.0}, //22KW, 1K, HV12 + {"30F6011,30F6013", + PIC24,12,0,Read24Fx,{0x16000,0x800,0x52,0x05BE},0x600,Write24Fx,{0x16000,0x800,0x31252,0x05BE,32},2.0}, //44KW, 2K, HV12 + {"30F6010,30F6012,30F6014,30F6015", + PIC24,12,0,Read24Fx,{0x18000,0x1000,0x52,0x05BE},0x600,Write24Fx,{0x18000,0x1000,0x31252,0x05BE,32},2.0}, //49KW, 4K, HV12 +//-------------PIC32--------------------------------------------------------- +// options: +// {"32MX270F256", +// PIC32,-1,1,Read32x,{0x40000,0},0x800,0,{0,0,0,0,0},0.0}, //256K +//-------------ATMEL--------------------------------------------------------- + {"AT90S1200", + AVR,-1,0,ReadAT,{0x400,0x40,0},0,WriteAT,{0x400,0x40,0,0},0}, //1K, 64 + {"ATtiny11", + AVR,12,0,ReadAT_HV,{0x400,0,LOCK+FUSE+CAL},0,WriteAT_HV,{0x400,0,0,0},0}, //1K, HV + {"ATtiny12", + AVR,12,0,ReadAT_HV,{0x400,0x40,LOCK+FUSE+CAL},0,WriteAT_HV,{0x400,0x40,0,0},0}, //1K, 64, HV + {"ATtiny13", + AVR,12,0,ReadAT_HV,{0x400,0x40,LOCK+FUSE+FUSE_H+CAL},0,WriteAT_HV,{0x400,0x40,16,0},0}, //1K, 64, HV + {"AT90S2313", + AVR,-1,0,ReadAT,{0x800,0x80,0},0,WriteAT,{0x800,0x80,0,0},0}, //2K, 128 + {"ATtiny2313", + AVR,-1,0,ReadAT,{0x800,0x80,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x800,0x80,16,0},0},//2K, 128 + {"ATtiny24,ATtiny25", + AVR,12,0,ReadAT_HV,{0x800,0x80,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteAT_HV,{0x800,0x80,16,0},0}, //2K, 128, HV + {"ATtiny26", + AVR,-1,0,ReadAT,{0x800,0x80,LOCK+FUSE+FUSE_H+CAL},0,WriteATmega,{0x800,0x80,16,0},0}, //2K, 128 + {"ATtiny261", + AVR,-1,0,ReadAT,{0x800,0x80,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x800,0x80,16,0},0}, //2K, 128 + {"ATtiny44,ATtiny45", + AVR,12,0,ReadAT_HV,{0x1000,0x100,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteAT_HV,{0x1000,0x100,32,0},0}, //4K, 256, HV + {"ATtiny461,ATtiny4313,ATmega48", + AVR,-1,0,ReadAT,{0x1000,0x100,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x1000,0x100,32,0},0}, //4K, 256 + {"ATtiny48", + AVR,-1,0,ReadAT,{0x1000,0x40,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x1000,0x40,32,0},0}, //4K, 64 + {"ATtiny88", + AVR,-1,0,ReadAT,{0x2000,0x40,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x2000,0x40,32,0},0}, //8K, 64 + {"AT90S8515,AT90S8535", + AVR,-1,0,ReadAT,{0x2000,0x100,0},0,WriteAT,{0x2000,0x100,0,0},0}, //8K, 256 + {"ATmega8,ATmega8515,ATmega8535", + AVR,-1,0,ReadAT,{0x2000,0x200,LOCK+FUSE+FUSE_H+CAL},0,WriteATmega,{0x2000,0x200,32,0},0}, //8K, 512 + {"ATmega88,ATtiny861", + AVR,-1,0,ReadAT,{0x2000,0x200,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x2000,0x200,32,0},0}, //8K, 512 + {"ATtiny84,ATtiny85", + AVR,12,0,ReadAT_HV,{0x2000,0x200,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteAT_HV,{0x2000,0x200,32,0},0}, //8K, 512, HV + {"ATmega16", + AVR,-1,0,ReadAT,{0x4000,0x200,LOCK+FUSE+FUSE_H+CAL},0,WriteATmega,{0x4000,0x200,64,0},0}, //16K, 512 + {"ATmega164,ATmega168", + AVR,-1,0,ReadAT,{0x4000,0x200,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x4000,0x200,64,0},0}, //16K, 512 + {"ATmega32", + AVR,-1,0,ReadAT,{0x8000,0x400,LOCK+FUSE+FUSE_H+CAL},0,WriteATmega,{0x8000,0x400,64,0},0}, //32K, 1K + {"ATmega324,ATmega328", + AVR,-1,0,ReadAT,{0x8000,0x400,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x8000,0x400,64,0},0}, //32K, 1K + {"ATmega64,ATmega644", + AVR,-1,0,ReadAT,{0x10000,0x800,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x10000,0x800,128,0},0}, //64K, 2K + {"ATmega1284", + AVR,-1,0,ReadAT,{0x20000,0x1000,LOCK+FUSE+FUSE_H+FUSE_X+CAL},0,WriteATmega,{0x20000,0x1000,128,0},0},//128K, 4K +//-------------I2C--------------------------------------------------------- + {"2400", + I2CEE,-1,0,ReadI2C,{0x10,0},0,WriteI2C,{0x10,0,1},0}, //16, 1B addr. + {"2401", + I2CEE,-1,0,ReadI2C,{0x80,0},0,WriteI2C,{0x80,0,8},0}, //128, 1B addr. + {"2402", + I2CEE,-1,0,ReadI2C,{0x100,0},0,WriteI2C,{0x100,0,8},0}, //256, 1B addr. + {"2404", + I2CEE,-1,0,ReadI2C,{0x200,0},0,WriteI2C,{0x200,0,16},0}, //512, 1B addr. + {"2408", + I2CEE,-1,0,ReadI2C,{0x400,0},0,WriteI2C,{0x400,0,16},0}, //1K, 1B addr. + {"2416", + I2CEE,-1,0,ReadI2C,{0x800,0},0,WriteI2C,{0x800,0,16},0}, //2K, 1B addr. + {"2432", + I2CEE,-1,0,ReadI2C,{0x1000,1},0,WriteI2C,{0x1000,1,32},0}, //4K, 2B addr. + {"2464", + I2CEE,-1,0,ReadI2C,{0x2000,1},0,WriteI2C,{0x2000,1,32},0}, //8K, 2B addr. + {"24128", + I2CEE,-1,0,ReadI2C,{0x4000,1},0,WriteI2C,{0x4000,1,64},0}, //16K, 2B addr. + {"24256", + I2CEE,-1,0,ReadI2C,{0x8000,1},0,WriteI2C,{0x8000,1,64},0}, //32K, 2B addr. + {"24512", + I2CEE,-1,0,ReadI2C,{0x10000,1},0,WriteI2C,{0x10000,1,128},0}, //64K, 2B addr. + {"241024", + I2CEE,-1,0,ReadI2C,{0x20000,0x201},0,WriteI2C,{0x20000,0x201,256},0}, //128K, 2B addr. + {"241025", + I2CEE,-1,0,ReadI2C,{0x20000,0x841},0,WriteI2C,{0x20000,0x841,128},0}, //128K, 2B addr. +//-------------Microwire EEPROM--------------------------------------------------------- + {"93S46", + UWEE,-1,0,Read93x,{0x80,6,0},0,Write93Sx,{0x80,6,8},0}, //128, 6b addr, 4W page + {"93x46", + UWEE,-1,0,Read93x,{0x80,6,0},0,Write93Cx,{0x80,6,0},0}, //128, 6b addr + {"93x46A", + UWEE,-1,0,Read93x,{0x80,7,1},0,Write93Cx,{0x80,7,1},0}, //128, 6b addr x8 + {"93S56", + UWEE,-1,0,Read93x,{0x100,8,0},0,Write93Sx,{0x100,8,8},0}, //256, 8b addr, 4W page + {"93x56", + UWEE,-1,0,Read93x,{0x100,8,0},0,Write93Cx,{0x100,8,0},0}, //256, 8b addr + {"93x56A", + UWEE,-1,0,Read93x,{0x100,9,1},0,Write93Cx,{0x100,9,1},0}, //256, 8b addr x8 + {"93S66", + UWEE,-1,0,Read93x,{0x200,8,0},0,Write93Sx,{0x200,8,8},0}, //512, 8b addr, 4W page + {"93x66", + UWEE,-1,0,Read93x,{0x200,8,0},0,Write93Cx,{0x200,8,0},0}, //512, 8b addr + {"93x66A", + UWEE,-1,0,Read93x,{0x200,9,1},0,Write93Cx,{0x200,9,1},0}, //512, 8b addr x8 + {"93x76", + UWEE,-1,0,Read93x,{0x400,10,0},0,Write93Cx,{0x400,10,0},0}, //1k, 10b addr + {"93x76A", + UWEE,-1,0,Read93x,{0x400,11,1},0,Write93Cx,{0x400,11,1},0}, //1k, 10b addr x8 + {"93x86", + UWEE,-1,0,Read93x,{0x800,10,0},0,Write93Cx,{0x800,10,0},0}, //2k, 10b addr + {"93x86A", + UWEE,-1,0,Read93x,{0x800,11,1},0,Write93Cx,{0x800,11,1},0}, //2k, 10b addr x8 +//-------------SPI--------------------------------------------------------- + {"25010,95010", + SPIEE,-1,0,Read25xx,{0x80},0,Write25xx,{0x80,16},0}, //128 + {"25020,95020", + SPIEE,-1,0,Read25xx,{0x100},0,Write25xx,{0x100,16},0}, //256 + {"25040,95040", + SPIEE,-1,0,Read25xx,{0x200},0,Write25xx,{0x200,16},0}, //512 + {"25080,95080", + SPIEE,-1,0,Read25xx,{0x400},0,Write25xx,{0x400,16},0}, //1K + {"25160,95160", + SPIEE,-1,0,Read25xx,{0x800},0,Write25xx,{0x800,16},0}, //2K + {"25320,95320", + SPIEE,-1,0,Read25xx,{0x1000},0,Write25xx,{0x1000,32},0}, //4K + {"25640,95640", + SPIEE,-1,0,Read25xx,{0x2000},0,Write25xx,{0x2000,32},0}, //8K + {"25128,95128", + SPIEE,-1,0,Read25xx,{0x4000},0,Write25xx,{0x4000,64},0}, //16K + {"25256,95256", + SPIEE,-1,0,Read25xx,{0x8000},0,Write25xx,{0x8000,64},0}, //32K + {"25512,95512", + SPIEE,-1,0,Read25xx,{0x10000},0,Write25xx,{0x10000,128},0}, //64K + {"251024,95M01", + SPIEE,-1,0,Read25xx,{0x20000},0,Write25xx,{0x20000,256},0}, //128K + {"95M02", + SPIEE,-1,0,Read25xx,{0x40000},0,Write25xx,{0x40000,256},0}, //256K + {"25X05", + SPIEE,-1,0,Read25xx,{0x10000},0,Write25xx,{0x10000,0x1000+256},0}, //64K flash 3.3V + {"251005,25X10", + SPIEE,-1,0,Read25xx,{0x20000},0,Write25xx,{0x20000,0x1000+256},0}, //128K flash 3.3V + {"252005,25X20", + SPIEE,-1,0,Read25xx,{0x40000},0,Write25xx,{0x40000,0x1000+256},0}, //256K flash 3.3V + {"254005,25X40", + SPIEE,-1,0,Read25xx,{0x80000},0,Write25xx,{0x80000,0x1000+256},0}, //512K flash 3.3V + {"25Q40", + SPIEE,-1,0,Read25xx,{0x80000},0,Write25xx,{0x80000,0x3000+256},0}, //512K flash 3.3V STATUS2 + {"258005,25X80", + SPIEE,-1,0,Read25xx,{0x100000},0,Write25xx,{0x100000,0x1000+256},0},//1M flash 3.3V + {"251605,25X16", + SPIEE,-1,0,Read25xx,{0x200000},0,Write25xx,{0x200000,0x1000+256},0},//2M flash 3.3V + {"25X32", + SPIEE,-1,0,Read25xx,{0x400000},0,Write25xx,{0x400000,0x1000+256},0},//4M flash 3.3V + {"25X64", + SPIEE,-1,0,Read25xx,{0x800000},0,Write25xx,{0x800000,0x1000+256},0},//8M flash 3.3V + {"25X128", + SPIEE,-1,0,Read25xx,{0x1000000},0,Write25xx,{0x1000000,0x1000+256},0},//16M flash 3.3V +//-------------One wire devices--------------------------------------------------------- + {"DS2430", + OWEE,-1,0,ReadOneWireMem,{0x20,1},0,WriteOneWireMem,{0x20,1},0}, //32 + {"DS2431", + OWEE,-1,0,ReadOneWireMem,{0x80,2},0,WriteOneWireMem,{0x80,0},0}, //128 + {"DS2433", + OWEE,-1,0,ReadOneWireMem,{0x200,0},0,WriteOneWireMem,{0x200,1},0}, //512 + {"DS28EC20", + OWEE,-1,0,ReadOneWireMem,{0xA00,2},0,WriteOneWireMem,{0xA00,1},0}, //2560 + {"DS1820", + OWEE,-1,0,ReadDS1820,{-10},0,0,{0},0}, //digital thermometer +//-------------UNIO devices--------------------------------------------------------- + {"11010", + UNIOEE,-1,0,Read11xx,{0x80},0,Write11xx,{0x80,16},0}, //128 + {"11020", + UNIOEE,-1,0,Read11xx,{0x100},0,Write11xx,{0x100,16},0}, //256 + {"11040", + UNIOEE,-1,0,Read11xx,{0x200},0,Write11xx,{0x200,16},0}, //512 + {"11080", + UNIOEE,-1,0,Read11xx,{0x400},0,Write11xx,{0x400,16},0}, //1k + {"11160", + UNIOEE,-1,0,Read11xx,{0x800},0,Write11xx,{0x800,16},0} //2k +}; + +int NDEVLIST = (sizeof(DEVLIST)/sizeof(struct DEVICES)); + +//Add all devices to the appropriate structure +#ifndef _GTKGUI +void AddDevices(char *list){ //make sure list is long enough + int i; + static char last[8]=""; + for(i=0;i0){ //3.3V required + if(!CheckV33Regulator()){ + PrintMessage(strings[S_noV33reg]); //Can't find 3.3V expansion board + return; + } + } + if(hvreg!=DEVLIST[i].HV) hvreg=StartHVReg(DEVLIST[i].HV)>0?DEVLIST[i].HV:0; + if(DEVLIST[i].ReadPtr==0){ + PrintMessage(strings[S_nodev_r]); //"Device not supported for reading\r\n"); + return; + } + switch(DEVLIST[i].family){ //call read function with the right number of arguments (better ways to do it???) + case PIC12: + if(r) params[1]=DEVLIST[i].ResArea; //modify reserved area parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1]); + break; + case PIC16: + if(r) params[2]=DEVLIST[i].ResArea; //modify reserved area parameter + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1],params[2],params[3]); + break; + case PIC18: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1],params[2]); + break; + case PIC24: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1],params[2],params[3],r?DEVLIST[i].ResArea:0); + break; + case PIC32: +// if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1]); + break; + case AVR: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].ReadPtr)(params[0],params[1],params[2]); + break; + case I2CEE: + (*DEVLIST[i].ReadPtr)(params[0],params[1]); + break; + case UWEE: + (*DEVLIST[i].ReadPtr)(params[0],params[1],params[2]); + break; + case SPIEE: + (*DEVLIST[i].ReadPtr)(params[0]); + break; + case OWEE: + if(params[0]==-10) (*DEVLIST[i].ReadPtr)(); + else (*DEVLIST[i].ReadPtr)(params[0],params[1]); + break; + case UNIOEE: + (*DEVLIST[i].ReadPtr)(params[0]); + break; + default: + PrintMessage(strings[S_nodev_r]); //"Device not supported for reading\r\n"); + } + return; + } + } + } + PrintMessage(strings[S_nodev_r]); //"Device not supported for reading\r\n"); +} + + +void Write(char* dev,int ee) +{ + int i,j; + int params[6]; + char *str=0,*tok; + //parse all device names until "dev" is found, + //then execute the write function with the right number of parameters + for(i=0;i0){ //3.3V required + if(!CheckV33Regulator()){ + PrintMessage(strings[S_noV33reg]); //Can't find 3.3V expansion board + return; + } + } + if(hvreg!=DEVLIST[i].HV) hvreg=StartHVReg(DEVLIST[i].HV)>0?DEVLIST[i].HV:0; + if(DEVLIST[i].WritePtr==0){ + PrintMessage(strings[S_nodev_w]); //"Device not supported for writing\r\n"); + return; + } + switch(DEVLIST[i].family){ //call write function with the right number of arguments (better ways to do it???) + case PIC12: + (*DEVLIST[i].WritePtr)(params[0],params[1]); + break; + case PIC16: + if(!ee) params[1]=0; //clear eeprom parameter + if(params[2]==-10) (*DEVLIST[i].WritePtr)(params[0],params[1]); + else (*DEVLIST[i].WritePtr)(params[0],params[1],params[2]); + break; + case PIC18: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].WritePtr)(params[0],params[1],params[2],params[3],params[4],params[5]); + break; + case PIC24: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].WritePtr)(params[0],params[1],params[2],params[3],params[4],DEVLIST[i].WriteParamD); + break; + case AVR: + if(!ee) params[1]=0; //clear eeprom parameter + (*DEVLIST[i].WritePtr)(params[0],params[1],params[2],params[3]); + break; + case I2CEE: + (*DEVLIST[i].WritePtr)(params[0],params[1],params[2]); + break; + case UWEE: + (*DEVLIST[i].WritePtr)(params[0],params[1],params[2]); + break; + case SPIEE: + (*DEVLIST[i].WritePtr)(params[0],params[1]); + break; + case OWEE: + (*DEVLIST[i].WritePtr)(params[0],params[1]); + break; + case UNIOEE: + (*DEVLIST[i].WritePtr)(params[0],params[1]); + break; + default: + PrintMessage(strings[S_nodev_w]); //"Device not supported for writing\r\n"); + } + return; + } + } + } + PrintMessage(strings[S_nodev_w]); //"Device not supported for writing\r\n"); +} + +///Search the device type +int GetDevType(const char* dev) +{ + int i,type=-1; + char *str=0,*tok; + //parse all device names until "dev" is found + for(i=0;ifamily=devlistEntry->family; + info->HV=devlistEntry->HV; + info->V33=devlistEntry->V33; + info->size=devlistEntry->ReadParam[0]; + info->sizeEE=devlistEntry->ReadParam[1]; + str2[0]=0; + double x=info->size/1024.0; + if(x-(int)x) sprintf(strF,"%.1f",x); + else sprintf(strF,"%d",(int)x); + switch(info->family){ + case -1: + sprintf(str2,"?? "); + break; + case PIC12: + sprintf(str2,"PIC12, "); + if(info->size<1024) sprintf(str3,"%dW FLASH",info->size); + else sprintf(str3,"%sKW FLASH",strF); + strcat(str2,str3); + break; + case PIC16: + sprintf(str2,"PIC16, "); + if(info->size<1024) sprintf(str3,"%dW FLASH",info->size); + else sprintf(str3,"%sKW FLASH",strF); + strcat(str2,str3); + if(info->sizeEE){ + int ee=info->sizeEE; + if(ee<0) ee=-ee; + sprintf(str3," + %dB EEPROM",ee); + strcat(str2,str3); + } + break; + case PIC18: + sprintf(str2,"PIC18, "); + if(info->size<1024) sprintf(str3,"%dB FLASH ",info->size); + else sprintf(str3,"%sKB FLASH ",strF); + strcat(str2,str3); + if(info->sizeEE){ + sprintf(str3,"+ %dB EEPROM ",info->sizeEE); + strcat(str2,str3); + } + break; + case PIC24: + sprintf(str2,"PIC24, "); + if(info->size<1024) sprintf(str3,"%dW FLASH",info->size); + else sprintf(str3,"%sKW FLASH",strF); + strcat(str2,str3); + if(info->sizeEE){ + sprintf(str3," + %dB EEPROM",info->sizeEE); + strcat(str2,str3); + } + break; + case PIC32: + sprintf(str2,"PIC32, "); + if(info->size<1024) sprintf(str3,"%dW FLASH",info->size); + else sprintf(str3,"%sKW FLASH",strF); + strcat(str2,str3); + if(info->sizeEE){ + sprintf(str3," + %dB EEPROM",info->sizeEE); + strcat(str2,str3); + } + break; + case AVR: + sprintf(str2,"AVR, "); + if(info->size<1024) sprintf(str3,"%dB FLASH",info->size); + else sprintf(str3,"%sKB FLASH",strF); + strcat(str2,str3); + if(info->sizeEE){ + sprintf(str3," + %dB EEPROM",info->sizeEE); + strcat(str2,str3); + } + break; + case I2CEE: + if(info->size<1024) sprintf(str2,"%s, %dB",strings[I_I2CMEM],info->size); //I2C Memory + else sprintf(str2,"%s, %sKB",strings[I_I2CMEM],strF); //I2C Memory + break; + case SPIEE: + if(info->size<1024) sprintf(str2,"%s, %dB",strings[I_SPIMEM],info->size); //SPI Memory + else sprintf(str2,"%s, %sKB",strings[I_SPIMEM],strF); //SPI Memory + break; + case UWEE: + if(info->size<1024) sprintf(str2,"%s, %dB",strings[I_UWMEM],info->size); //Microwire Memory + else sprintf(str2,"%s,%sKB",strings[I_UWMEM],strF); + break; + case OWEE: + if(info->size<0) sprintf(str2,strings[I_OWDEV]); //OneWire device + else if(info->size<1024) sprintf(str2,"%s, %dB",strings[I_OWMEM],info->size); //OneWire Memory + else sprintf(str2,"%s, %sKB",strings[I_OWMEM],strF); + break; + case UNIOEE: + if(info->size<1024) sprintf(str2,"%s, %dB",strings[I_UNIOMEM],info->size); //UNI/O Memory + else sprintf(str2,"%s, %sKB",strings[I_UNIOMEM],strF); + break; + } + if(info->HV>0){ + sprintf(str3,", %.1fV",info->HV); + strcat(str2,str3); + } + if(info->V33){ + strcat(str2,", "); + strcat(str2,strings[I_3V3REQUIRED]); // 3.3V adapter + } + info->features=malloc(strlen(str2)+1); + strcpy(info->features,str2); +} + + +///Search and return device info +struct DevInfo GetDevInfo(const char* dev) +{ + int i; + char *str=0,*tok; + struct DevInfo info; + info.device=0; + info.family=-1; + info.HV=-1; + info.V33=-1; + info.size=-1; + info.sizeEE=-1; + info.features=0; + //parse all device names until "dev" is found + for(i=0;i