//escribo LA DRAM .......
set_tris_d(0x00); //Salida
output_low(_WE);
for(direccion=0;direccion <65535; direccion++) {
//Pongo la direccion en el bus de direcciones:
_Set_Address(direccion);
output_d(direccion);
delay_us(1);
}
//LEO LA DRAM y la mando por el puerto serie....
set_tris_d(0xFF); //Entrada
output_high(_WE);
for(direccion=0;direccion <65535; direccion++) {
//Pongo la direccion en el bus de direcciones:
_Set_Address(direccion);
dato = input_d();
//Envio el dato por RS-232
printf("%X", dato);
delay_us(350);
}
void _Set_Address(int16 direccion) {(estoy usando dos latches, para poner los 16 bits de la direccion usando solo 8 pines del PIC. Pero eso se que funciona OK).
//Coloca una direccion en el bus de direcciones
unsigned int8 ADH, ADL;
ADH = make8(direccion, 1);
ADL = make8(direccion, 0);
//Primero coloco ADH en el LATCH superior...
output_high(_OE);
output_b(ADH);
output_high(_LE1);
delay_us(1);
output_low(_LE1);
delay_us(1);
output_b(ADL);
output_high(_LE2);
delay_us(1);
output_low(_LE2);
delay_us(1);
output_low(_OE);
delay_us(1);
}
Porque no haces esta prueba, escribis un BYTE e inmediatamente despues lo lees (sin modificar adress). Proba todos los valores del byte, si siempre lees el mismo byte entonces el bus de datos esta bien, sino ya hay un problema mas general, incluso puede que una linea de adress este suelta y se cambia al azar.
Las capturas son hechas directamente sobre el bus, con un analizador lógico...asi que el tema de los cables de direcciones (si, son cables....tengo un proto con todo encima) lo descarto....Esas gráficas son "reales", no es una simulacion, y están tomadas directamente de los pines de la memoria.Esas capturas son de un emulador o un osciloscopio con bus?