Вход

Просмотр полной версии : Программирование флэшек с помощью CD-ROM



_Ratibor_
29.03.2011, 20:04
Достался мне тут клон Спектрума.
В нем оказалась дохлая ПЗУ и на глазах сдох блок питания.

На работе был старенький корпус с блоком питания, вот я и подумал заюзать его.
На следующий день принес домой корпус.
В нем был блок питания, мамка с процом и пямятью, cd-rom.

Блок питания сразу же подрубил к спектруму, все нормально.

На мамке стояла флешка Биоса - Pm29F002T-12JC
Вот эту флешку я решил и использовать.

Осталось найти программатор :)

Нашел на данном форуме схему программатора на ATMega8515.
Дома есть с десяток разных АВР, но как назло нужной меги и не оказалось.

А ехать через пол города в промэлектроннику лень :)

Сперва хотел прошить прямо в мамке, но awdflash как то криво зашил и подвил. В общем только угробил биос.

Дальше стал лазить по инету и наткнулся на одну прогу - mtkflash (http://digi.rpc1.org/mtkflash.htm). С помощью ее можно шить флешки в сидюках на чипсете Mediatek.

Вот тут то и пригодился сидюк NEC из старого корпуса.
Разобрал его, а там как раз стоит чипсет MT1189S и флешка 39sf010a.

Сделал загрузочную дискету, залил на нее MTKFLASH.EXE и файл прошивки.

Подключил сидюк к компу, перезагрузился с дискеты.
Сперва попробовал считать прошивку с флешки, а то вдруг что пойдет не так :)
Считалось нормально.
Далее стер флешку, потом записал в нее свой дамп.
Считал дамп, чтоб проверить нормально ли записалось. Все OK.

Теперь осталось аккуратно выпаять флешку и воткнуть ее в Спектрум.

Потом впаять вместо выпаянной флешки панельку, вдруг опять понадобиться что прошить.

В комплекте с прогой есть файлик с поддерживаемыми флешками:

0x00 0x01 WRT_SERIAL 0x80000 0x1000 "SST(SST25VF040)(Serial)"
0x00 0x02 WRT_SERIAL 0x80000 0x10000 "ST(M25P40V6)(Serial)"
// 16M-bit (2M bytes)
0xC2 0x49 WRT_JEDEC 0x200000 0x2000 "MXIC(MX29LV160(A)B)(+3.0V)"
0xC2 0xC4 WRT_JEDEC 0x200000 0x2000 "MXIC(MX29LV160(A)T)(+3.0V)"
// 8M-bit (1024K bytes)
0xBF 0xD8 WRT_JEDEC 0x100000 0x10000 "SST(SST39LF/VF080)(+3.3V)"
0xC2 0x38 WRT_JEDEC 0x100000 0x10000 "MXIC(MX29LV081)(+3.3V)"
0xC2 0x3E WRT_JEDEC 0x100000 0x2000 "MXIC(MX29LV008T)(+3.3V)"
0xC2 0x37 WRT_JEDEC 0x100000 0x2000 "MXIC(MX29LV008B)(+3.3V)"
0x01 0x3E WRT_JEDEC 0x100000 0x2000 "AMD(AM29LV008BT)(+3.3V)"
0x01 0x37 WRT_JEDEC 0x100000 0x2000 "AMD(AM29LV008BB)(+3.3V)"
0x04 0x5B WRT_JEDEC 0x100000 0x2000 "FUJI(MBM29LV800BA)(+3.3V)"
0x1F 0x21 WRT_JEDEC 0x100000 0x2000 "ATMEL(AT49BV/LV008AT)(+3.3V)"
0xC2 0xDA WRT_JEDEC 0x100000 0x2000 "MXIC(AM29LV800T/AT)(+3.0V)"
0xC2 0x5B WRT_JEDEC 0x100000 0x2000 "MXIC(AM29LV800B/AB)(+3.0V)"
0x37 0x9B WRT_JEDEC 0x100000 0x2000 "AMIC(A29L800B)(+3.0V)"
0x37 0x1A WRT_JEDEC 0x100000 0x2000 "AMIC(A29L800T)(+3.0V)"
0x7F 0x21 WRT_JEDEC 0x100000L 0x1000 "ACTRANS(AC39VF080)(+3.0V)"
0x20 0x5B WRT_JEDEC 0x100000 0x10000 "ST(M29W800)(+3.0V)"
// 4M-bit (512K bytes)
0xAD 0xA4 WRT_JEDEC 0x80000 0x10000 "HYNIX(HY29F040)(+5.0V)"
0x37 0x34 WRT_JEDEC 0x80000 0x2000 "AMIC(A29L004T)(+3.3V)" // Top Boot Block
0x37 0xB5 WRT_JEDEC 0x80000 0x2000 "AMIC(A29L004U)(+3.3V)" // Bottom Boot Block
0x37 0x86 WRT_JEDEC 0x80000 0x10000 "AMIC(AM29040A)(+5.0V)"
0x1F 0x13 WRT_JEDEC 0x80000 0x4000 "ATMEL(AT49F040)(+5.0V)"
0x1F 0x12 WRT_JEDEC 0x80000 0x4000 "ATMEL(AT49BV/LV040T)(+3.3V)"
0x1C 0x04 WRT_JEDEC 0x80000 0x10000 "EON(EN29F040)(+5.0V)" // ManuID(000h) = 0x7F DevID(000h) = 0x7F
0x7F 0xAE WRT_JEDEC 0x80000 0x400 "IMT(IM29F004B)(+5.0V)" // Bottom Boot Block
0x7F 0xAF WRT_JEDEC 0x80000 0x400 "IMT(IM29F004T)(+5.0V)" // Top Boot Block
0x8C 0x4F WRT_JEDEC 0x80000 0x400 "EFST(F49L040A)(+3.0V)" // Top Boot Block
0xC2 0xB6 WRT_JEDEC 0x80000 0x2000 "MXIC(MX29LV004B)(+3.3V)" // Bottom Boot Block
0x04 0xB6 WRT_JEDEC 0x80000 0x2000 "Fuji(MBM29LV004BC)(+3.3V)" // Bottom Boot Block
0xC2 0xB5 WRT_JEDEC 0x80000 0x2000 "MXIC(MX29LV004T)(+3.3V)" // Top Boot Block
0xC2 0x4F WRT_JEDEC 0x80000 0x10000 "MXIC(MX29LV040)(+3.3V)"
0xC2 0xA4 WRT_JEDEC 0x80000 0x10000 "MXIC(MX29F040)(+5.0V)"
0xC2 0x46 WRT_JEDEC 0x80000 0x2000 "MXIC(MX29F004B)(+5.0V)" // Bottom Boot Block
0xC2 0xB9 WRT_JEDEC 0x80000 0x2000 "MXIC(MX29LV400T)(+3.3V)"
0xC2 0xBA WRT_JEDEC 0x80000 0x2000 "MXIC(MX29LV400B)(+3.3V)"
0xBF 0xD7 WRT_JEDEC 0x80000 0x1000 "SST(SST39LV/VF040)(+3.3V)"
0xBF 0xB7 WRT_JEDEC 0x80000 0x1000 "SST(SST39SF040)(+5.0V)"
0xBF 0x87 WRT_JEDEC 0x80000 0x1000 "SST(SST39VF040)(+3.3V)"
0x20 0xEF WRT_JEDEC 0x80000 0x2000 "ST(M29W400BB)(+3.3V)"
0x9D 0x3E WRT_JEDEC 0x80000 0x1000 "PMC(PM39LV040)(+3.0V)"
0xDA 0x46 WRT_ATMEL 0x80000 0x100 "WINBOND(W29C040)(+5.0V)"
0xDA 0xB6 WRT_JEDEC 0x80000 0x10000 "WINBOND(W39L040)(+3.3V)"
0x9D 0x4E WRT_JEDEC 0x80000 0x1000 "PMC(PM39F040)(+5.0V)"
0x1C 0x4F WRT_JEDEC 0x80000 0x10000 "EON(EN29LV040)(+3.3V)"
0x37 0x92 WRT_JEDEC 0x80000 0x10000 "AMIC(A29L040)(+3.0V)"
// 2M-bit (256K bytes)
0x37 0x8C WRT_JEDEC 0x40000 0x2000 "AMIC(A29002L)"
0x37 0x0D WRT_JEDEC 0x40000 0x2000 "AMIC(A29002U)"
0x1F 0x07 WRT_JEDEC 0x40000 0x2000 "ATMEL(AT49F002(N))" // Bottom Boot Block
0x1F 0x08 WRT_JEDEC 0x40000 0x2000 "ATMEL(AT49F002(N)T)" // Top Boot Block
0x8C 0x00 WRT_JEDEC 0x40000 0x2000 "EFST(F49B002UA)"
0x1C 0x92 WRT_JEDEC 0x40000 0x2000 "EON(EN29F002/EN29F002NT)" // ManuID(000h) = 0x7F DevID(000h) = 0x7F
0x1C 0x97 WRT_JEDEC 0x40000 0x2000 "EON(EN29F002/EN29F002NB)" // ManuID(000h) = 0x7F DevID(000h) = 0x7F
0xAD 0xB0 WRT_JEDEC 0x40000 0x10000 "HYUNDAI(HY29F002T)" // Top Boot Block
0x7F 0xA1 WRT_JEDEC 0x40000 0x200 "IMT(IM29002T)" // Top Boot Block
0x7F 0xA2 WRT_JEDEC 0x40000 0x200 "IMT(IM29002B)" // Bottom Boot Block
0x7F 0xAF WRT_JEDEC 0x40000 0x200 "MOSEL(V29C51002T)/SYNCMOS(F29C51002T)" // Top Boot Block
0x40 0x02 WRT_JEDEC 0x40000 0x200 "MOSEL(V29C51002T)/SYNCMOS(F29C51002T)" // Top Boot Block
0x40 0xA2 WRT_JEDEC 0x40000 0x200 "MOSEL(V29C51002B)/SYNCMOS(F29C51002B)" // Bottom Boot Block
0xC2 0xB0 WRT_JEDEC 0x40000 0x2000 "MXIC(MX29F002T)" // Top Boot Block
0xC2 0x34 WRT_JEDEC 0x40000 0x2000 "MXIC(MX29F002B)" // Bottom Boot Block
0x9D 0x1D WRT_JEDEC 0x40000 0x20000 "PMC(PM29F002T)" // Top Boot Block
0xBF 0xB6 WRT_JEDEC 0x40000 0x1000 "SST(SST39SF020)"
0xBF 0xD6 WRT_JEDEC 0x40000 0x1000 "SST(SST39VF020)"
0xDA 0x0B WRT_JEDEC 0x40000 0x20000 "WIBOND(W49F002U)"
0xDA 0x45 WRT_ATMEL 0x40000 0x80 "WINBOND(W29C020CP)"
0xDA 0xB5 WRT_JEDEC 0x40000 0x1000 "WINBOND(W39L020)"
0x01 0x34 WRT_JEDEC 0x40000 0x1000 "AMD(AM29F002BB)"
0x9D 0x3E WRT_JEDEC 0x80000 0x1000 "PMC(PM39LV020)(+3.0V)"
0x9D 0x4D WRT_JEDEC 0x80000 0x1000 "PMC(PM39F020)(+5.0V)"
// 1M-bit (128K bytes)
0x01 0x6E WRT_JEDEC 0x20000 0x4000 "AMD(AM29LV010)"
0x01 0x20 WRT_JEDEC 0x20000 0x4000 "AMD(AM29F010)/NEX(NX29F010)"
0x01 0xED WRT_JEDEC 0x20000 0x1000 "AMD(AM29LV001BT)"
0x01 0x6D WRT_JEDEC 0x20000 0x1000 "AMD(AM29LV001BB)"
0x9D 0x1C WRT_JEDEC 0x20000 0x1000 "PMC(PM39LV010R)"
0x37 0xA1 WRT_JEDEC 0x20000 0x1000 "AMIC(A29001/290011)"
0x37 0x4C WRT_JEDEC 0x20000 0x1000 "AMIC(A29001/290011U)"
0x1F 0xD5 WRT_ATMEL 0x20000 0x80 "ATMEL(AT29C010A)"
0x1F 0x05 WRT_JEDEC 0x20000 0x2000 "ATMEL(AT49F001N)" // Bottom Boot Block
0x1F 0x04 WRT_JEDEC 0x20000 0x2000 "ATMEL(AT49F001NT)" // Top Boot Block
0x40 0x01 WRT_JEDEC 0x20000 0x200 "MOSEL(V29C51001T)/SYNCMOS((F29C51001T)" // Top Boot Block
0x40 0xA1 WRT_JEDEC 0x20000 0x200 "MOSEL(V29C51001B)/SYNCMOS((F29C51001B)" // Bottom Boot Block
0xC2 0x18 WRT_JEDEC 0x20000 0x1000 "MXIC(MX29F001T)" // Top Boot Block
0xC2 0x19 WRT_JEDEC 0x20000 0x1000 "MXIC(MX29F001B)" // Bottom Boot Block
0xBF 0x01 WRT_JEDEC 0x20000 0x1000 "SST(SST27SF010)"
0xBF 0x07 WRT_ATMEL 0x20000 0x80 "SST(SST29EE010)"
0xBF 0xD5 WRT_JEDEC 0x20000 0x1000 "SST(SST39VF010)"
0xBF 0xB5 WRT_JEDEC 0x20000 0x1000 "SST(SST39SF010)"
0x7F 0xA0 WRT_JEDEC 0x20000 0x200 "IMT(IM29001T)" // Top Boot Block
0x7F 0xA3 WRT_JEDEC 0x20000 0x200 "IMT(IM29001B)" // Bottom Boot Block
0xDA 0xC1 WRT_ATMEL 0x20000 0x80 "WINBOND(W29C011A)"
0xDA 0x06 WRT_ATMEL 0x20000 0x80 "WINBOND(W29EE011P)"
0xDA 0xA1 WRT_JEDEC 0x20000 0x1000 "WINBOND(W39F010)"
0x20 0x20 WRT_JEDEC 0x20000 0x4000 "ST(M29F010B)"
0x1C 0x20 WRT_JEDEC 0x20000 0x4000 "EON(EN29F010)"
0x9D 0x4C WRT_JEDEC 0x80000 0x1000 "PMC(PM39F010)(+5.0V)"
// 512K-bit (64K bytes)
0x1F 0x03 WRT_JEDEC 0x10000 0x10000 "ATMEL(AT49F512)"
0x1F 0x5D WRT_ATMEL 0x10000 0x80 "ATMEL(AT29C512)"
0x1F 0x3D WRT_ATMEL 0x10000 0x80 "ATMEL(AT29LV512)"
0xC2 0x17 WRT_JEDEC 0x10000 0x1000 "MXIC(MX29F512T)"
0xBF 0x5D WRT_ATMEL 0x10000 0x80 "SST(SST29EE512)"
0xBF 0xB4 WRT_JEDEC 0x10000 0x1000 "SST(SST39SF512)"
0xBF 0xD4 WRT_JEDEC 0x10000 0x1000 "SST(SST39VF512)"
0xDA 0xC8 WRT_ATMEL 0x10000 0x80 "WINBOND(W29C512A/W29EE512)"
0x1C 0x21 WRT_JEDEC 0x10000 0x80 "EON(EN29F512)"
0xf6 0x56 WRT_JEDEC 0x10000 0x10000 "WINBOND(W27E512)"
// Unknown Type
0xFF 0xFF WRT_ATMEL 0x80000 0 "Unknown Flash Memory"

Vasily
30.03.2011, 18:12
Для прошивки в матерях лучше использовать Uniflash, он позволяет переписать польностью чип. Awdflash и amiflash нужно пробовать, во всяком случае у меня "левый" биос удалось зашить Uniflash.

_Ratibor_
30.03.2011, 18:32
Для прошивки в матерях лучше использовать Uniflash, он позволяет переписать польностью чип. Awdflash и amiflash нужно пробовать, во всяком случае у меня "левый" биос удалось зашить Uniflash.
Все это шаманство с бубном.
Нужно дергать флешки на лету, а это не есть гуд.
А так вытащил платку из сидюка, припаял панельку и получился фактически нормальный программатор.

lisica
30.03.2011, 20:28
Далее стер флешку,
Я чёт не увидел команды как стереть. (В англицком я не очень...)

_Ratibor_
30.03.2011, 20:53
Я чёт не увидел команды как стереть. (В англицком я не очень...)

Просто запустите программу без параметров, она выдаст весь список команд.


c:\flash>mtkflash
MTKFLASH by Joseph Lin, MTK 1998 (Ver 1.83c)

Ex1: MTKFLASH <R|W|E|C|UW> [/C] [/O XXXXX YYYYY [/F]] [/Ax] [/T] <file list>
R: Read FLASH
W: Write FLASH
E: Erase FLASH
C: Only check FLASH & Unlock WINBOND(W29C040)
UW: UP FLASH
DW: DSP WRITE
DR: DSP READ
SR: Read ICE28LF010 FLASH SW: Write ICE28LF010 FLASH
/Ax: x = Bank Number from 0 to 15. Default: Bank0
/U: Auto Write Flash (for MT1198 + PAGE WRITE Flash ROM only)
/M: Read(Write) multi-bank data into(from) one merged file
/T: Show FLASH Download Time in Write FLASH mode
/C: Check FLASH & Unlock WINBOND(W29C040)
/O: Skip FLASH OPC Area, and OPC Area save to pwrcur.bin
/F: OPC Area read from file pwrcur.bin
/SATA: SATA interface
/ST: ST Micron Serial FLASH
/SST: SST Serial Flash (Default Setting)
XXXXX: Start address of FLASH OPC Area(5-digit in HEX). Default: 1F000h
YYYY: Length of FLASH OPC Area(4-digit in HEX). Maximum: 8000h

lisica
30.03.2011, 21:08
Спасибо. Ещё бы коменты на русском...