Grabador BIOS SPI por puerto paralelo

Esta sección contiene tutoriales paso a paso, informes y opiniones. En ocasiones instrucciones generales.
Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

Grabador BIOS SPI por puerto paralelo

Mensaje sin leer por Enigma » 06 Jul 2018, 11:59

Grabador BIOS SPI por puerto paralelo
Programador SPI FlashROM a Puerto Paralelo

Imagen

Ahora conozco un nuevo tipo de memoria en mi nueva placa madre Gigabyte GA-P31-DS3L - Hi-speed SPI FlashROM Winbond 25X40VSIG en la carcasa SMIC de la carcasa SOIC-8, que está soldada directamente a la placa. Los puentes Southern ICHx siempre han sido compatibles con las variantes FWH y SPI. Usando ciertos registros y pines de chipset, puede elegir qué interfaz se usa principalmente para el BIOS. Para hacer que el flash funcione razonablemente, lo coloco en el conector DIL8 preciso.

La producción del programador siguió. Sin embargo, un puerto paralelo paralelo, 5 cables, un par de resistencias y conectores son suficientes para conectar un dispositivo SPI a una PC. La conexión se basa en el cable SPI de programación BSD para la programación del microcontrolador Atrel AVR. La mencionada memoria W25X40V está diseñada para una tensión de alimentación de 3.3V, por lo que tengo las líneas de datos separadas por las resistencias para que no sufran un voltaje más alto desde la LPT. Al mismo tiempo, las resistencias realizan una función de amortiguación, sin ellas, en un cable plano más largo (aproximadamente 1,5 m) sin líneas de protección entre las señales, crosstalks y transferencia de datos errónea. Curiosamente, AVRka está trabajando con el mismo cable sin ningún problema. Usé una fuente de alimentación externa.

Imagen

Imagen

Lo siguiente es solo lo del software que tuve que escribir. En primer lugar, era necesario programar la capa más baja que funciona con los registros LPT y establecer / leer los niveles requeridos en las líneas SPI dadas.

También diría algo al propio SPI. Se compone de tres líneas: SCK - reloj en serie (hasta decenas de MHz), MISO - Entrada Maestro Esclavo de salida, MOSI - Maestro Esclavo de entrada y salida, en este caso también hay una línea auxiliar de control # CS - Selección de Chip. La comunicación tiene lugar normalmente entre dos dispositivos, uno de los cuales es el maestro (en este caso PC) que controla la SCK reloj (hay un registro de reposo. 0) y envía los comandos / datos a la línea MOSI al mismo tiempo que lee los datos de la línea MISO.

Los dispositivos esclavos (en este caso, la memoria) reacciona a los SCK reloj por el flanco de bajada del bit de reloj se envía a la línea MISO y en el borde ascendente del reloj de las líneas de bit de lectura MOSI. Byte se envía en el orden de MSB primero, LSB en último lugar. Después de terminar la transferencia, el maestro devuelve el reloj al nivel inactivo (registro 0). Por lo tanto, el bus I2C es completamente dúplex. Los dispositivos esclavos no están identificados por ninguna dirección.

Para poder conectar múltiples dispositivos esclavos a las líneas SPI, el maestro debe estar conectado a cada dispositivo con un nivel de línea de control CS # separado con el nivel de registro. 0 activa uno dispositivos Zn esclavos (los otros tienen salidas SPI en un estado de alta impedancia a afectar a la comunicación continua (dispositivo SPI tener un salidas de 3 estados no son necesarios pull-ups). Si se utiliza el SPI flash de memoria CS # para el comienzo y el final de la trama , por lo que no puedes simplemente conectarlo a tierra.

(Los dispositivos SPI tienen salidas de 3 estados, no se necesitan pull-ups). En el caso de la memoria flash SPI, CS # se usa para el principio y el final del cuadro, por lo que no puede simplemente conectarse al suelo. La siguiente imagen le dirá cómo se lee la memoria: (Los dispositivos SPI tienen salidas de 3 estados, no se necesitan pull-ups). En el caso de la memoria flash SPI, CS # se usa para el principio y el final del cuadro, por lo que no puede simplemente conectarse al suelo. La siguiente imagen le dirá cómo se lee la memoria:

Imagen

La memoria soporta un conjunto estándar de comandos, incluyendo la necesidad de leer, escribir, borrar páginas, borrar sector, borrar todo el chip, bloquear, desbloquear, la identificación del fabricante y el tipo de chip JEDEC registro de estado de lectura de identificación ... Algunos comandos son de un solo byte, los demás tener parámetros y datos. Algo de memoria es equivalente a enviar datos, no a otros. Para obtener más detalles, consulte la hoja de datos de memoria específica.

El siguiente paso fue escribir las funciones para enviar y recibir Bytes y bloques de datos, y finalmente la función para procesar cada comando de memoria Flash. La versión actual le permite identificar el tipo de memoria / i , leer y mostrar el tamaño de bloque de datos de la dirección / r , leer todo el archivo en la memoria / d , todo el programa de la memoria/ P , borrar toda la memoria / E y desbloquear bits de protección contra escritura / u . Otros parámetros / l = pueden establecerse en la dirección base LPT y usar / d = para extender la duración del pulso SCK en microsegundos. Hay cuatro versiones disponibles para DOS, Windows, Linux 32b y Linux 64b en el paquete SPIPGM

Si tiene alguna pregunta, lea las Preguntas frecuentes con atención .

Debido a la velocidad limitada de LPT y al método de transmisión en serie, toma lecturas o escribe decenas de segundos en minutos. El tiempo de eliminación del chip depende de la velocidad de los mecanismos internos en la memoria y toma unas pocas decenas de segundos. Se podría lograr una comunicación más rápida con un microcontrolador, preferiblemente con un controlador SPI de hardware que se comunicaría con la PC, ya sea de 8 bits a través de LPT o USB. Ejemplo de programa de acción con memoria ST M25P32:

Código: Seleccionar todo

SPI FlashROM Programmer 1.0 (C) 2008 por Martin Rehak; rayer ^ seznam * cz
Compilado por GCC 3.4.5 (especial de mingw) a las 18:41:28, 26 de marzo de 2008

SPI conectado al puerto LPT en la dirección de base de E / S: 378h, ancho de pulso SCK: t + 0us
FlashROM JEDEC ID, tipo: 202016h
ST Microelectronic M25P32 (4MB)
Sector de lectura en: 00396000h (89%)
La velocidad de lectura es totalmente comparable, mientras que la eliminación es más lenta en Flash porque también incluye la verificación forzada (es decir, lectura completa). Además, uso un solo comando de borrado de chip. La versión actual de Flash todavía no contiene ningún indicador de progreso, así que no se preocupe y vaya a tomar café mientras tanto :)

Cómo programar memoria de 1,8 V
Resulta que, a veces, las soluciones más simples funcionan mejor, así que volví a las limitaciones de voltaje pasivo de LPT usando resistencias y diodos. Ahi esta la nueva configuración. Con esta conexión, ya no tuve el problema de programar la memoria. Me gustaría destacar la última actualización de mi programa SPIPGM 2.22 , donde agregué soporte experimental para direccionamiento de 32 bits para memoria de más de 16MB.

Este es el circuito resultante para 1.8 Voltios:

Imagen[/img]

Materiales:
1- Ficha Centronic 25 macho
4- Resistencia de 150 Ohms (yo use de 180 Ohms)
1- Capacitor de 1microFaradio 50V... si o si tiene que ser de 1microfaradio

Yo le agregue una pila CR2032 y puse todo dentro de la ficha centronica, salvo el zocalo de la pila...

lo que se necesitan 3.3V pero la mayoria de las memorias soportan entre 2.8 y 3.3... si no graba o da error ver el votaje...
El puerto paralelo da 5V asi que las resietencias es para bajar el voltaje.

Para grabar se usa el software SPIPGM.ZIP que es para windows pero se usa desde el terminal. Viene para Linux.
Yo lo probe con windows XP

El enlace del programa version 2.23

Código: Seleccionar todo

http://rayer.g6.cz/programm/spipgm.zip
Google Drive

Código: Seleccionar todo

https://drive.google.com/u/0/uc?id=1Vx9-T2Y0krxQ11j9QpJbln6mGqtZfW0F&export=download
Archivos que trae:

SPIPGM - binary for Linux x86-32
SPIPGM64 - binary for Linux x86-64
SPIPGM.EXE - binary for DOS/Win9x x86-32
SPIPGMW.EXE - binary for Win9x/NT/2k/XP/Vista/7/8 x86-32
IOPERM.DLL - low-level HW access library for Win9x/NT/2k/XP/Vista/7/8(NoUAC)

Las memorias soportadas en la versión 2.23 son:

AMIC:
A25L05PU/PT (64kB)
A25L10PU/PT (128kB)
A25L20PU/PT (256kB)
A25L40PU/PT (512kB)
A25L80PU/PT (1MB)
A25L16PU/PT (2MB)
A25L32PU/PT (4MB)
A25L64PU/PT (8MB)
A25L512 (64kB)
A25L010 (128kB)
A25L020 (256kB)
A25L040 (512kB)
A25L080 (1MB) - tested OK

Atmel:
AT25F512B (64kB)
AT25F1024A (128kB) - this chip may be supported but a tester is needed
AT25DF021 (256kB)
AT26DF041 (512kB)
AT25DF041A (512kB)
AT26F004 (512kB) - tested OK
AT26DF081 (1MB)
AT25/26DF081A (1MB)
AT25DF081 (1MB)
AT26DF161 (1MB)
AT26DF161A (2MB)
AT25DF161 (2MB)
AT25DQ161 (2MB)
AT25/26DF321 (4MB)
AT25DF321A (4MB)
AT25DQ321A (4MB)
AT25DF641(A) (8MB)

EON:
EN25B10 (128kB)
EN25B20 (256kB)
EN25B40(T) (512kB)
EN25B80 (1MB)
EN25B16 (2MB)
EN25P32 (4MB)
EN25P64 (8MB)
EN25P128 (16MB)
EN25Q40 (512kB)
EN25Q80 (1MB)
EN25Q16 (2MB)
EN25Q32 (4MB)
EN25Q64 (8MB)
EN25Q128 (16MB)
EN25F10 (128kB)
EN25F20 (256kB)
EN25F40 (512kB)
EN25F80 (1MB) - tested OK
EN25F16 (2MB)
EN25F32 (4MB)
EN25F64 (8MB)
EN25F128 (16MB)
EN25T10 (128kB)
EN25T20 (256kB)
EN25T40 (512kB)
EN25T80 (1MB)
EN25T16 (2MB)
EN25T32 (4MB)
EN25T64 (8MB)
EN25QH16 (2MB)
EN25QH32 (4MB) - tested OK
EN25QH64 (8MB)
EN25QH128 (16MB)
EN25QH256 (32MB)

ESMT:
F25L004A (512kB) - tested OK
F25L008A/08PA (1MB)
F25L016A/16PA (2MB)
F25L32PA (4MB)
F25L64PA (8MB)
F25S04PA (512kB)
F25L08PA (1MB)
F25L16QA (2MB)
F25L32QA (4MB)
F25L64QA (8MB)

GigaDevice:
GD25Q512 (64kB)
GD25Q10 (128kB)
GD25Q20 (256kB)
GD25Q40 (512kB)
GD25Q80 (1MB)
GD25Q16 (2MB) - tested OK
GD25Q32 (4MB) - tested OK
GD25Q64 (8MB)

Intel:
QB25F016S33B8 (2MB)
QB25F032S33B8 (4MB)
QB25F064S33B8 (8MB)

Macronix:
MX25L512E/25V512 (64kB)
MX25L5121E (64kB)
MX25U5121E (64kB)
MX25L1005/1006/1025/1026E/25V1006E (128kB) - tested OK
MX25L1021E (128kB)
MX25U1001E (128kB)
MX25L2005/2006/2025/2026E/25V2006 (256kB)
MX25U2033E (256kB)
MX25L4005/4006/4025/4026/25V4005/4006E (512kB)
MX25U4033/4035/25V4033/4035 (512kB)
MX25L8005/8006/8008/8035/8036/8073/8075E (1MB) - tested OK
MX25U8033/8035E (1MB)
MX25V8035 (1MB)
MX25L1605/1606/1608E (2MB) - tested OK
MX25L1633/1635/1636/1673/1675E (2MB)
MX25L1635/1636E (2MB)
MX25U1635 (2MB)
MX25L3205/3206/3208/3233/3235/3273/3275E (4MB)
MX25U3235/25L3239E (4MB)
MX25L3225/3236/3237D (4MB)
MX25L6405/6406/6408/6435/6436/6445/6465/6473/6475E (8MB) - tested OK
MX25U6435/25L6439E (8MB) - tested OK
MX25L12835/12836/12839/12845/12865/12873/12875F (16MB) - tested OK
MX25U12835F (16MB)
MX25L25635/25639/25735/25835E (32MB)
MX25U25635F (32MB)
MX66L51235F/51245G (64MB)
MX66U51235F (64MB)
MX66L1G45G (128MB)

PMC:
Pm25LD512 (64kB) - tested OK
Pm25LD010 (128kB) - tested OK
Pm25LD020 (256kB)
Pm25LV512(A) (64kB) - tested OK
Pm25LV010(AB) (128kB) - tested OK
Pm25LV020 (256kB)
Pm25LV040 (512kB) - tested OK
Pm25LV080B (1MB)
Pm25LV016B (2MB)
Pm25LV032B (4MB)
Pm25LV064B (8MB)
*Pm25LQ032C (4MB)

Spansion:
S25FL001A (128kB)
S25FL002A (256kB)
S25FL004A (512kB)
S25FL008A (1MB)
S25FL016A (2MB)
S25FL032A/P (4MB) - tested OK
S25FL064A/P (8MB)
S25FL128P/S/129P/S (16MB) - tested OK
S25FL256S (32MB)
S25FL512S (64MB)
S25FL01GS (128MB)

ST Microelectronic/Numonyx:
M25P05 (64kB)
M25P10 (128kB)
M25P10AV (128kB) - tested OK
M25P20 (256kB)
M25P40 (512kB)
M25P80 (1MB)
M25P16 (2MB)
M25P32 (4MB) - tested OK
M25P64 (8MB)
M25P128 (16MB)
M45PE10 (128kB)
M45PE20 (256kB)
M45PE40 (512kB)
M45PE80 (1MB)
M45PE16 (2MB)
M25PX80 (1MB)
M25PX16 (2MB)
M25PX32 (4MB)
M25PX64 (8MB)
N25Q032A13E (4MB)
N25Q032A11E (4MB)
N25Q064A13E (8MB)
N25Q064A11E (8MB)
N25Q128A13E (16MB)
N25Q128A11E (16MB)
N25Q256A13E (32MB)
N25Q256A11E (32MB)
N25Q512A13G (64MB)
N25Q512A11G (64MB)
N25Q00AA13GB (128MB)

SST:
SST25VF512(B) (64kB) - tested OK
SST25VF010(B) (128kB) - tested OK
SST25VF020(B) (256kB)
SST25VF040(B) (512kB)
SST25VF080(B) (1MB) - tested OK
SST25VF016(B) (2MB) - tested OK
SST25VF032(B) (4MB)
SST25VF064C (8MB)
SST25VF128(B) (16MB)
SST26VF016 (2MB)
SST26VF032 (4MB)
SST26VF064 (8MB)

Winbond:
W25Q10B (128kB)
W25Q20BV (256kB)
W25Q40BV (512kB)
W25Q80BV (1MB) - tested OK
W25Q16BV (2MB) - tested OK
W25Q32BV (4MB) - tested OK
W25Q64BV/FV (8MB) - tested OK
W25Q128BV/FV (16MB)
W25Q256FV (32MB)
W25Q16FW 1,8V (2MB)
W25Q32FW 1,8V (4MB)
W25Q64FW 1,8V (8MB)
W25Q128FW 1,8V (16MB)
W25X10 (128kB)
W25X20 (256kB)
W25X40 (512kB)
W25X80 (1MB) - tested OK
W25X16 (2MB)
W25X32 (4MB) - tested OK
W25X64 (8MB)

Posible problemas:

SPIPGM doesn't communicate with FlashROM, returned JEDEC ID is FFFFFFh.
Cuando da este código normalmente el problema es del programador. Falso contacto, fallo del capacitor, la masa, problema en el puerto paralelo (contacto, impedancia, etc). Tambien puede ser por la velocidad de los datos. se peude agregar el parametro /d=tiempo en microsegundos. Este comando debe ir al final de la linea de comandos. Se puede agregar al circuito algun buffer que marque bien las señales. Tambien puede ser un problema de la pila o la tensión de alimentacion de 3.3V.

Como podremos ver en el diagrama, el circuito es alimentado con 3.3v. Para llegar a ese voltage podremos usar

2 pilas AA o AAA (recomiendo con base como se ve en la foto para evitar falsos contactos), con lo que lograremos 3v exactos, lo cual no hace la diferencia, ya que el circuito funcionara normalmente debido a que se encuentra dentro de los limites aceptables para el IC.
Si utilizamos una PC de escritorio con una fuente ATX convencional, podremos extraer 3.3v exactos (cable color NARANJA de la fuente).
Si tienes el chip 25Q64FVSIG deberemos alimentarlo entre 2.7v / 3.6v
Si tiene el chip 25Q64FWSIG deberemos alimentarlo entre 1.65v / 1.95v

En mi caso personal tengo 25Q64FWSIG lo alimente con 3v y no tuve problemas alguno. Queda la advertencia.

SPIPGM communication with FlashROM is not well, returned JEDEC ID is different from FFFFFFh but it reports a parity error or it fails later during comparison of programmed data.
Revisar el voltaje y que la señal sea bien definida.

Para conectarla a la bios, yo probe con una de una placa madre de pc en desuso. Según dicen en internet se peude soldar a la BIOS a regrabar directamente pero tomar la precaucion de sacarle la pila a la placa madre primero.

Ejemplo de comandos:

Código: Seleccionar todo

spipgmw /d original.bin /d=2 
"HACE BACKUP DEL ARCHIVO ORIGINAL DEL LA MEMORIA
SI YA ESTA CORRUPTA NO SIRVE DE NADA."

Código: Seleccionar todo

spipgmw /u /d=2
"DESBLOQUEA LA EPROM SI SE ENCUENTRA BLOQUEADA"

Código: Seleccionar todo

spipgmw /e /d=2
"BORRA LA EPROM COMPLETA"

Código: Seleccionar todo

spipgmw /p ejemplo.bin /d=2
"PROGRAMA LA EPROM A LA MEMORIA BORRADA"

Código: Seleccionar todo

spipgmw /d veriCAR.bin /d=2
"HACE BACKUP DE LA MEMORIA PARA COMPARAR CRC Y CHECKSM"
TIENE QUE SER EL MISMO CON LA BIOS QUE TU METES CON LA QUE HACES BACKUP

Fuente
http://rayer.g6.cz/programm/programe.htm



Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

adaptar los 3.3 voltios del programador para memorias o BIOS de 1.8 voltios

Mensaje sin leer por Enigma » 06 Jul 2018, 12:09

Otra forma de adaptar los 3.3 voltios del programador para memorias o BIOS de 1.8 voltios, basicamente tienen que tomar tension de los 3,3v que su flasheador genera, y, con 4 diodos 1n4148, un adaptador de 8 pines como los que vienen en los mothers de desktop y el adaptador que usen habitualmente para flashear sus memorias, tendrian el problema resuelto.

En mi caso particular esta adaptacion funciono perfectamente para una memoria MX25U6435F, 1.8V, 64Mb que segun el datasheet soporta de 1,8 a 2v de alimentacion.

Imagen

Con 4 diodos 1n4148

Imagen

Imagen

JPamerico

Re: Grabador BIOS SPI por puerto paralelo

Mensaje sin leer por JPamerico » 25 Jul 2021, 08:01

Bom dia aqui do Brasil a você.
Testarei esse adaptador com 4 doidos zener . Seria a solução mais rápida. A solução com porta paralela achei genial. Espero servir para gravar uma bios 1.8v de uma placa mãe de PC de mesa msi. Só fiquei na duvida onde soldar os 4 diodos na gravadora de epromm. Pode me responder por email: jpamerico2@Yahoo.com.BR.
Obrigado! ;)

Responder

Volver a “Soporte IT”