Procedimientos para leer y programar memorias serie SPI Flash 25XXXDispongo de este router:
Un EPC3925, similar al EPC3825, pero que lleva 2 puertos telefonicos FXS:
Internamente tiene este ascpecto:
Aunque parezca mentira, el medio mas seguro para leer este tipo de memorias es desoldandolas.
El riesgo principal esta en "deteriorar" las lineas de comunicaciones del microprocesador que estan unidas a esta memoria.
Normalemnte, estas lineas pueden soportar tensiones no superiores a +0.5V de la tension de alimentacion VCCIO del microprocesador, nunca sobrepasando los 3.6V.
MX25L12845EMI-10G, una memoria SPI de 128Mb (16MB):
http://www.mxic.com.tw/Lists/DataSheet/Attachments/1582/MX25L12845E,%203V,%20128Mb,%20v1.9.pdfPreparamos la zona de trabajo:
Y por arte de magia el chip desaparece:
Bueno, yo dispongo de un desoldador de aire caliente y una bomba de vacio para succionar componentes.
Cada cual se busque la vida o elija otros metodos, pero que no sean muy agresivos.
Y quien tenga dudas de si se ha dañado la memoria, aqui la teneis:
Casi como recien salido de fabrica.
No me gusta reconocerlo, pero mis primeros chips desoldados hace años no acababan con tan buen aspecto.
Ahora viene la parte del programador.
Aun disponiendo de programadores comerciales, resulta que estos solamente aceptan memorias flash serie SPI de hasta 64Mb (8MB).
Asi que he tenido que recurrir al cacharreo.
Disponia de 2 programadores chinos "economicos" del tipo USBAsp, como el de la imagen:
Para este procedimiento se necesita tener:
- dos programadores de este tipo USBAsp
- o un programador USBAsp y otro programador que te permita actualizar el firmware del Atmega8
El procedimiento consiste en convertir este programador USBAsp actualizandole el firmware en un programador BRSPI.
http://sourceforge.net/projects/zjtag/files/brspi/Brspi_0.0.1_exe.rar/downloadPara la actualizacion del firmware se necesitan realizar 2 pasos.
En el interior del archivo viene un documento que explica el procedimiento, asi que no voy a repetirlo aqui.
Archivo: "c:\Hidspi_ROM1.01\readme.txt"
Solo voy a aclarar algunas dudas que puedan surgir.
PASO 1:Actualizacion del bootloader, uniendo ambos USBAsp con un cable IDC de 10 hilos.
El que hace de programador se deja tal cual, y el que se va a actualizar hay que realizarle un puente en el conector J2, tal y como aparece en la imagen.
Ejecutar: c:\Hidspi_ROM1.01>runme.bat
Esta actualizacion tarda unos 2 minutos aproximadamente.
Se desconecta todo y se guarda el programador USBAsp.
PASO2:Lo siguiente sera programar el firmware "BRSPI" sobre el programador que llevaba el puente J2.
Lo primero es quitar el puente J2, ya que es necesario que arranque el bootloader que hemos programado en el paso 1.
Conectamos momentaneamente este programador a un puerto USB.
Sabremos que el bootloader esta funcionando porque parpadean los dos leds alternativamente.
Desconectar el programador y leer las instrucciones, ya que el siguiente paso hay que hacerlo a los pocos segundos de conectar este programador al puerto USB:
A los pocos segundo de conectar el programador ejecutar el siguiente comando:
c:\Hidspi_ROM1.01\bootloadhid main.hex
Este firmware se actualiza en muy poco tiempo, un segundo, y dejara un led encendido permanentemente.
Nota: es "bootloadhid main.hex", en el readme.txt indican "bootloadhid brs_m812.hex" por ser una version anterior.
Una captura del ultimo paso de la ventana de MSDOS:
c:\Hidspi_ROM1.01>bootloadhid main.hex
Page size = 64 (0x40)
Device size = 8192 (0x2000); 6144 bytes remaining
Uploading 3072 (0xc00) bytes starting at 0 (0x0)
0x00b80 ... 0x00c00
c:\Hidspi_ROM1.01>
Si reconectamos el programador podremos ver que esta correctamente instalado en nuestro sistema operativo windows:
IMPORTANTE:Como las memorias flash SPI tienen una alimentacion maxima de 3.6V tenemos que dejar la alimentacion del programador a 3.3V.
En estos programadores, al menos en los que tengo, la tension de alimentacion y de VCCIO por defecto es de 5V.
Pero son configurables para 3.3V tambien:
Hay que desoldar la resistencia R7 de 0 ohmios del USBAsp para configurar la salida a 3.3V, tanto VCC como señales digitales.
Hay que prestar atencion que los Atmega8 sean Atmega8A o Atmega8L, ya que la serie estandar solo funciona de 4.5V a 5.5V.
En la siguiente foto se ve el programador con la resistencia R7 de 0 ohmios aun sin quitar, el paso siguiente fue
quitarla.
Veis que por comodidad he usado un zocalo ZIF. A este zocalo le he colocado adaptadores de diversos tipos para distintos tipos de encapsulados de memoria.
Por ejemplo, para las primeras pruebas he usado una memoria virgen parecida, una M25P40 con encapsulado SOIC8 y 4Mb (512KB).
Esta memoria me ha servido para comprobrar que el programador funciona correctamente, tanto en la lectura como en la escritura.
Posteriormente he usado el programador con la memoria MX25L12845E de 128Mb (16MB) con resultados aceptables.
Las ventajas de este programador:
- Coste y disponibilidad, incluso se podria realizar con chips directamente o usar el hardware de un arduino.
Inconvenientes:
- Velocidad de lectura y escritura.
Lectura:
5.0KB/s (200s por cada MB)
Escritura:
2.4KB/s (430s por cada MB)
El software que se utiliza es de windows, win32, utilizando una consola de MSDOS.
Pero antes hay que instalar los drivers que habilitan el puerto USB:
http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.6.0/libusb-win32-bin-1.2.6.0.zip/downloadY capturar y filtrar el puerto del programador Hid-BRSPI en windows.
Ejecutar:
libusb-win32-bin-1.2.6.0\bin\x86\install-filter-win.exe
Recordad, una vez finalizado el uso del programador se recomienda remover (desasociar) el filtro USB instalado.
En cuanto al uso del programa, en una consola de MSDOS, os dejo algunos
comando utiles:
Ayuda:
brspi > brspi_comandos.txt
Listado de chips soportados:
brspi -list > brspi_lista.txt
Detectar la memoria SPI Flash:
brspi -d
Lectura del primer bloque de 64K para ver que funciona, tarda unos 13 segundos:
brspi -b /s:0x000000 /l:0x10000
Lectura de 8MB (unos 26 minutos):
brspi -b /s:0x000000 /l:0x800000
Lectura de 16MB (unos 53 minutos):
brspi -b /s:0x000000 /l:0x1000000
Nota:
Se ha omitido la opcion /cbl:0 que selecciona el tipo de programador BRSPI basado en Atmega8 porque no hace falta.
Hay una opcion /cbl:1 que permite usar un tipo de programador BRSPI basado en STM32.
Comandos PELIGROSOS:Borrado de 8MB:
brspi -c /s:0x000000 /l:0x800000
Borrado de 16MB:
brspi -c /s:0x000000 /l:0x1000000
Escritura 8MB (1 hora):
brspi -p firmware.bin /s:0x000000 /l:0x800000
Escritura 16MB (2 horas):
brspi -p firmware.bin /s:0x000000 /l:0x1000000
Hay mas comandos, pero con los indicados se pueden hacer la mayoria de cosas.
Espero que esto le pueda servir a alguien para salir de algun apuro de ultima hora en algun momento.
Se aceptan comentario y mas versiones de programadores para este tipo de dispositivos (memorias flash SPI).
En este mismo foro otros usuarios han indicado metodos para usar la Raspberry Pi como programador, otros han usado un router livebox.
Tambien recuerdo algun enlace a paginas de programadores usando un puerto paralelo, pero la dificultad reside en encontrar un PC que actualmente lo tenga.
ISP Programmer:
http://dybkowski.net/content/en/node/15Retroleum SPI Large EEPROM Programmer SPILEP25:
http://www.retroleum.co.uk/electronics-articles/spilep-spi-large-eeprom-programmer/Y al trabajar a 5V no son adecuados para las memorias de 3.3V que no aceptan mas de 3.6V.
Tambien hay otros programadores interesantes que si funcionan a 3.3V:
SpiFlash Programmer con PIC16F628 (128K a 16MB):
http://spi-flash-programmer.blogspot.com.es/2010/12/spi-flash-programmer_27.htmlBus Pirate:
http://flashrom.org/Bus_PirateEncapsulado y zocalo:Para facilitar la reprogramacion de la memoria y su recolocacion en el router he:
- Encapsulado la memoria colocandole patas de paso estandard, compatible con el zocalo ZIF de mi programador.
- Creado un zocalo compatible con el nuevo encapsulado de la memoria.
Teniendo el siguiente aspecto:
Ahora puedo reprogramar este router y hacer todas las pruebas que quiera de una forma sencilla y segura, y asi avanzar en el desarrollo de OpenWrt en estos equipos.
Saludos
espeltron