Cześć wszystkim!
Mam urządzenie bez nazwy (panel led), które jest kontrolowane przez AT89S52. Próbowałem "użyć go" w jakiś sposób, ale bez powodzenia, więc postanowiłem spróbować pobrać FLASH i spróbować go przeanalizować. To jest dla mnie po raz pierwszy (zgranie flash), więc nie mam żadnego programatora - więc użyłem oryginalnego Arduino UNO.
Zaprogramowałem go jako ArduinoISP.
Potem wziąłem się za inny problem - nie ma (łatwego sposobu) "połączyć się" z programatorem do 89.
Więc przylutowałem przewody, jak sądzę, gdzie trzeba. Wszytskie interesujące nas nogi są przylutowane do czegoś:
7705 (ustawia wejście 89 na HIGH gdy napięcie zasilania spadnie poniżej 4,55V (http://www.ti.com/product/TL7705A#) - Wyjście przylutowane do D10 arduino
7805 - stabilizator napięcia na 5V -do 5V Arduino
ULN2003 - High Voltage, High Current Darlington Transistor Arrays , datasheet: https://www.onsemi.com/pub/Collateral/ULN2003A-D.PDF . Wyjścia odpowiedzialne za SCK, MOSI i MISO są z nim połączone, więc do jego nóżek przylutowałem przewody, które idą do D11-D13 Arduino.
Trochę poczytałem o tym jak zgrać FLASH i jak programować AT89 i doszedłem do wniosku, że komendy mogą wyglądać tak:
Jednakże dają mi:
Zmuszenie do zczytania (-F) daje plik 8k wypełniony zerami.
A:
Pomierzyłem wszystkie połączenia i wygląda to dobrze. Na arduino wgrałem program ustawiający wszystkie wyjścia (D10-D13) na HIGH, żeby sprawdzić, czy gdzieś napięcie nie "ucieka" i wszystko wygląda dobrze również.
Skończyły mi się pomysły...
Początek F40R96CIUSLFZFP:
Jeszcze raz wypiszę jak to jest połączone:(TQFP package):
PIN1 (MOSI) - D11
PIN2 (MISO) - D12
PIN3 (SCK) - D13
PIN4 (RST) - D10
PIN38 (5V) - 5V
PIN17 (GND) - GND
Rezonator to chyba 12M.
Sprawdziłem na dwóch takich panelach...
Mam urządzenie bez nazwy (panel led), które jest kontrolowane przez AT89S52. Próbowałem "użyć go" w jakiś sposób, ale bez powodzenia, więc postanowiłem spróbować pobrać FLASH i spróbować go przeanalizować. To jest dla mnie po raz pierwszy (zgranie flash), więc nie mam żadnego programatora - więc użyłem oryginalnego Arduino UNO.
Zaprogramowałem go jako ArduinoISP.
Potem wziąłem się za inny problem - nie ma (łatwego sposobu) "połączyć się" z programatorem do 89.
Więc przylutowałem przewody, jak sądzę, gdzie trzeba. Wszytskie interesujące nas nogi są przylutowane do czegoś:
7705 (ustawia wejście 89 na HIGH gdy napięcie zasilania spadnie poniżej 4,55V (http://www.ti.com/product/TL7705A#) - Wyjście przylutowane do D10 arduino
7805 - stabilizator napięcia na 5V -do 5V Arduino
ULN2003 - High Voltage, High Current Darlington Transistor Arrays , datasheet: https://www.onsemi.com/pub/Collateral/ULN2003A-D.PDF . Wyjścia odpowiedzialne za SCK, MOSI i MISO są z nim połączone, więc do jego nóżek przylutowałem przewody, które idą do D11-D13 Arduino.
Trochę poczytałem o tym jak zgrać FLASH i jak programować AT89 i doszedłem do wniosku, że komendy mogą wyglądać tak:
avrdude -C F40R96CIUSLFZFP.conf -c stk500v1 -P /dev/ttyACM0 -p 89s52 -b 19200 -D -Uflash:r:program.bin:r
avrdude -C F40R96CIUSLFZFP.conf -c avrisp -P /dev/ttyACM0 -p 89s52 -b 19200 -D -Uflash:r:program.bin:r Jednakże dają mi:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x000000 (retrying)
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x000000 (retrying)
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
Zmuszenie do zczytania (-F) daje plik 8k wypełniony zerami.
A:
avrdude -C F40R96CIUSLFZFP.conf -c arduino -P /dev/ttyACM0 -p 89s52 -b 19200 -D -Uflash:r:program.bin:r
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: stk500_disable(): unknown response=0x12
avrdude done. Thank you.
Pomierzyłem wszystkie połączenia i wygląda to dobrze. Na arduino wgrałem program ustawiający wszystkie wyjścia (D10-D13) na HIGH, żeby sprawdzić, czy gdzieś napięcie nie "ucieka" i wszystko wygląda dobrze również.
Skończyły mi się pomysły...
Początek F40R96CIUSLFZFP:
part
id = "89s52";
desc = "AT89S52";
stk500_devcode = 0xE1;
signature = 0x1e 0x52 0x06;
chip_erase_delay = 500000;
reset = dedicated;
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";
memory "flash"
size = 8192 ; # bytes
read = "0 0 1 0 0 0 0 0 x x x 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 x a12 a11 a10 a9 a8",
"a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
;
memory "signature"
size = 3;
read = "0 0 1 0 1 0 0 0 0 0 0 0 0 0 a1 a0",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
;
part parent "89s52"
id = "89s51";
desc = "AT89S51";
signature = 0x1e 0x51 0x06;
memory "flash"
size = 4096 ; # bytes
read = "0 0 1 0 0 0 0 0 x x x x 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 x x a11 a10 a9 a8",
"a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
;
;Jeszcze raz wypiszę jak to jest połączone:(TQFP package):
PIN1 (MOSI) - D11
PIN2 (MISO) - D12
PIN3 (SCK) - D13
PIN4 (RST) - D10
PIN38 (5V) - 5V
PIN17 (GND) - GND
Rezonator to chyba 12M.
Sprawdziłem na dwóch takich panelach...