[Por Falcald] Lo arme para programar específicamente el AT89S8253, pero puede usarse para otros microcontroladores con pequeñas modificaciones.
Está basado en el Little-ponyprog, pero adaptado para el microcontrolador AT89S8253 específicamente. Debería funcionar con otros microcontroladores de la familia conectando las señales SCK, MOSI, MISO y RESET y reemplazando el cristal por el del nuevo microcontrolador.
El software reconocerá esta placa como ponyser, que es la definición del SIProg, en el cuál están basados estos diseños.
El esquema está partido en dos para poder adaptar el diseño a varios microcontroladores, al igual que en el SIprog. No hace falta seguir esta línea si solo se quiere hacer un programador para un microcontrolador específico.
El software necesario para programar los microcontroladores en linux es el avrdude. Está hecho para trabajar con la línea AVR de Atmel, sin embargo permite agregar definiciones de microcontroladores. El AT89S8253 no viene definido en su archivo de configuración, por lo que se debe agregar el siguiente código al final de /etc/avrdude.conf1) o de ~/.avrduderc2):
Basado en la definición de Benedikt Sauter: http://www.embedded-projects.net/index.php?page_id=241
#------------------------------------------------------------ # AT89S8253 #------------------------------------------------------------ part id = "8253"; desc = "AT89S8253"; # bad hack: AT89S8253 has got only 2 signature bytes # but 3 must be especified signature = 0x1e 0x73 0x1e; chip_erase_delay = 20000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; timeout = 200; stabdelay = 100; cmdexedelay = 25; synchloops = 32; bytedelay = 0; pollindex = 3; pollvalue = 0x53; predelay = 1; postdelay = 1; pollmethod = 0; memory "flash" size = 12288; paged = no; # yes / no min_write_delay = 4000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 0 0 1 0 0 0 0 0", " x x a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 0 1 0 0 0 0 0 0", " x x a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; mode = 0x21; delay = 12; ; memory "eeprom" size = 2048; paged = no; # yes / no min_write_delay = 3000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 1 0 1 0 0 0 0 0", " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; mode = 0x21; delay = 12; ; memory "fuses" size = 1; paged = no; # yes / no min_write_delay = 3000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 0 0 1 0 0 0 0 1", " x x x x x x x x", " x x x x x x x x", " x x x x o o o o"; write = " 1 0 1 0 1 1 0 0", " 0 0 0 1 i i i i", " x x x x x x x x", " x x x x x x x x"; mode = 0x21; delay = 12; ; memory "lock" size = 1; paged = no; # yes / no min_write_delay = 3000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 0 0 1 0 0 1 0 0", " x x x x x x x x", " x x x x x x x x", " x x x x x o o o"; write = " 1 0 1 0 1 1 0 0", " 1 1 1 0 0 i i i", " x x x x x x x x", " x x x x x x x x"; mode = 0x21; delay = 12; ; memory "usgn" size = 64; paged = no; # yes / no min_write_delay = 3000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 0 0 1 0 0 0 1 0", " x x x x x x x x", " x x a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 0 1 0 0 0 0 1 0", " x x x x x x x x", " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; mode = 0x21; delay = 12; ; memory "signature" size = 3; read = " 0 0 1 0 1 0 0 0", " x x x x x x x x", " x x 1 1 0 0 0 a0", " o o o o o o o o"; ; ;
Con esta definición se pueden programar las memorias3): flash, eeprom, fuses, lock y User Sgn. Se programa byte x byte debido a que el modo paginado para este microcontrolador no es soportado por el avrdude. Al parecer, los AVRs tienen un protocolo diferente.
avrdude -p 8253 -P /dev/ttyS0 -c ponyser -U flash:r:main:r
Si se lo llama de esa forma, el avrdude lee la memoria flash del microcontrolador AT89S8253, a traves del programador ponyser que está conectado al dispositivo ttyS0 y vuelca los datos en el archivo main en modo raw.
— falcald 2008/10/26 23:12