July 25th, 2024, 18:44
July 25th, 2024, 20:52
July 25th, 2024, 21:41
July 30th, 2024, 21:03
July 30th, 2024, 21:37
July 31st, 2024, 18:33
fzabkar wrote:I have an idea for recovering these ROMs when the Vcc or ground pins are completely inaccessible.
I recall that in one blog someone needed to cut both the Vcc (8) and Hold* (7) pins to prevent a USB-SATA bridge IC from detecting its external SPI flash. It appears that the IC obtained its power from the Hold* pin via an internal pullup diode. I suspect that WP (3) could similarly provide a path to ground via an internal pulldown diode in those cases where the Gnd pin (4) has been damaged.
July 31st, 2024, 19:06
July 31st, 2024, 19:24
fzabkar wrote:If you have a 1.8V ROM, you may need to select a 2.5V supply to account for the voltage drop across the diode.
Edit:
I just noticed that your case involves the ground pin. Sorry. Maybe a level translator is needed. I did something like this 30 years ago when I needed to buffer a sick output pin on a VGA controller IC.
Edit #2:
Can you upload the good ROM so that we can see where the differences are?
July 31st, 2024, 19:54
July 31st, 2024, 20:13
July 31st, 2024, 20:53
fzabkar wrote:I have another solution. Dump the ROM 10 times, say, then compare each 0x4000-byte block across all of the dumps. If a particular block is consistent in 5 dumps, say, then assume it is good and add it to the repaired ROM. Do this for all blocks. I could probably write a simple tool to do this.
July 31st, 2024, 22:18
July 31st, 2024, 22:23
Prog-Express can be remote controlled by other software with command line parameters and script files
July 31st, 2024, 22:46
August 1st, 2024, 0:03
August 1st, 2024, 0:24
import serial
import time
def read_rom_data(serial_port, baud_rate, output_file):
ser = serial.Serial(serial_port, baud_rate)
time.sleep(2) # wait for the serial connection to initialize ( sleep 1 fails)
ser.write(b'R') # Send the read command Arduino P1
with open(output_file, 'wb') as file:
for i in range(1024 * 1024): # double?
data = ser.read(1)
file.write(data)
ser.close()
print(f"ROM dumped to {output_file}")
if __name__ == "__main__":
serial_port = 'COM3' # using PS to USB port 2
baud_rate = 115200
output_file = 'rom_dump.bin'
read_rom_data(serial_port, baud_rate, output_file)
import serial
import time
import os
def read_rom_data(serial_port, baud_rate):
ser = serial.Serial(serial_port, baud_rate)
time.sleep(2) # Wait for the serial connection to initialize
ser.write(b'R') # Send the read command to the Arduino
data = ser.read(1024 * 1024)
ser.close()
return data
def compare_rom_reads(reads):
reference = reads[0]
for read in reads[1:]:
if read != reference:
return False
return True
if __name__ == "__main__":
serial_port = 'COM4' # try 2nd adapter
baud_rate = 115200
reads = []
for i in range(10):
print(f"Reading ROM... Attempt {i+1}")
rom_data = read_rom_data(serial_port, baud_rate)
reads.append(rom_data)
time.sleep(1) # Wait a second between reads
if compare_rom_reads(reads):
print("All ROM reads are identical.")
output_file = 'rom_dump.bin'
with open(output_file, 'wb') as file:
file.write(reads[0])
print(f"ROM data dumped {output_file}")
else:
print("ROM reads are not identical.")
for idx, data in enumerate(reads):
output_file = f'rom_dump_attempt_{idx + 1}.bin'
with open(output_file, 'wb') as file:
file.write(data)
print(f"ROM data from attempt {idx + 1} has been written to {output_file}")
August 1st, 2024, 14:57
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000BDEC0 02 98 F3
000BDED0 01 00 01 00 01 00 01Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000BDDE0 0A 63 CC 04 00 04 00 04 00 0402 98 F3 01 00 01 00 01 00 01
0A 63 CC 04 00 04 00 04 00 04
0b 0000 0010 1001 1000 1111 0011 0000 0001
0b 0000 1010 0110 0011 1100 1100 0000 0100Powered by phpBB © phpBB Group.