sonyps4.ru

Простой программатор для spi микросхем 25 серии. Механизмы доступа к Flash ROM и защита записи

Почти во всей современной электронной технике стоят микросхемы памяти таких серий как: 25LVxxx, WINBOND и др. Их объединило общее название SPIFLASH. Много занимаюсь ремонтом и такой программатор необходим под руками почти всегда.

Я переделал много программаторов под каждый процессор и пришел к выводу, что проще и быстрее отпаять саму флеш память и впаять на место, чем рыться в недрах инета и искать как прошить девайс через процессор. Был даже спутниковый ресивер, где по непонятной причине не работал сервисный разъем. Выход оставался один. Выпаять spiflash и прошить ее программатором. После прошивки и установки микросхемы на место аппарат ожил.

Рис. 1. Схема программатора Spiflash

Схема его проста и не вызовет затруднений. Резисторы 100 Ом можно поменять в пределе 47-100 Ом. Резисторы 4.7 кОм можно поменять в пределе 3.9-6.2 кОм. Схема питается от источника 3.3 В.

На печатной плате предусмотрена разводка под трехножечную микросхему-стабилизатор. Она может быть любой малогабаритной, например LM117 3.3v. Поясню зачем: Питается схема от USB порта, там напряжение 5 В, а наши флешки работают именно от источника 3.3в. Тем самым нам не нужно подсоединять внешний источник питания.

С думаю, разберетесь сами. Она по функциям нажатия аналогична другим прошивочным программам.

Способ установки микросхемы для прошивки: Отпаиваем флеш. Убираем с ее ножек лишний припой. Ложем микросхему на стол, подложив под нее что-нибудь толщиной 0.5 мм, так чтобы эта подложка не мешала ножкам микросхемы. Подгибаем ножки к столу. Делается это за тем, чтобы между микросхемой и столом был промежуток. Ложем микросхему на плату программатора, совмещаем ножки микросхемы с дорожками платы программатора и прижимаем пластмассовой прищепкой (за счет того что, ранее мы делали промежуток, микросхема плотно ножками прижимается к дорожкам платы программатора и корпус ей не мешает). Раньше я подпаивал их. Эта процедура надоела))).


C этой схемой также часто просматривают:

Не столь давно приключилась со мной одна неприятность. Нужно было обновить BIOS на материнской плате, но в процессе прошивки произошла ошибка, система зависла и перестала отвечать на любые команды. После вынужденной принудительной перезагрузки компьютер включился, крутил кулерами, но на экране ничего не отображалось и не было никаких звуковых сигналов. На лицо повреждение BIOS при записи.

Немного предыстории:

Материнская плата ASUS Commando, без, модного нынче, Dual BIOS. Только Boot Block – небольшая область BIOS, не затрагиваемая записью, которая позволяет, в случае необходимости, инициализировать минимальный набор компонентов, необходимых для включения компьютера, произвести поиск BIOS на съемных носителях. Обычно подходят Floppy или флешка с файлом прошивки, переименованным в AMIBOOT.ROM (зависит от BIOS и материнской платы, точнее написано в инструкции к плате), либо CD с драйверами из комплекта поставки. Обнаружив подходящий файл, boot block запишет его в BIOS и, если все прошло правильно, компьютер после перезагрузки оживет. Неплохая фишка, несколько раз выручала, но в данном случае она не сработала, видимо, оказался поврежден и boot block.

Пришлось искать другие решения. Так как в своем арсенале инструмента у меня не было паяльной станции и стационарного программатора для разных eeprom’ок, пришлось искать более доступные решения. Рассматривая плату, я обнаружил на ней небольшой разъем SPI_J1 , а микросхема флеш памяти как раз с SPI интерфейсом. Поиск в Интернет показал, что существуют вполне приличные заводские девайсы и немало самоделок для прошивки SPI микросхем через USB (об универсальных программаторах с поддержкой SPI даже не говорю, это само собой). Правда, поиск по местным магазинам, СЦ и форумам в отличии от Google ничего не дал, а заказывать и ждать месяц очень не хотелось.

Еще немного поиска, и вот оно, решение – чешского комрада (на чешском) о предельно простом программаторе и софтине к нему для прошивки микросхем флеш памяти с SPI интерфейсом! Ничего сложного, минимум компонентов.

Технически это очень простой способ, и требует лишь базового понимания схемотехники, умения припаять пару проводков и воспользоваться командной строкой (cmd). Но если вы не уверены в своих силах, лучше не рискуйте. Кроме того, всегда можно попросить друга, дружащего с паяльником.

Сборка устройства

Для сборки нам понадобится:

  • 1 разъем DB25P, можно отрезать от ненужного шнура от принтера
  • 4 шт. резисторы по 150 Ом
  • 1 любой электролитический конденсатор емкостью 100 мкФ или более и рабочим напряжением на 6.3 В или больше (нужен при запитке от БП)
  • Кусок плоского шлейфа с IDC разъемом на 10 контактов (он идеален при наличии SPI разъема на плате)
  • Штекер molex (как на жестких дисках ATA), либо гнездо для батарейки CR2032

Ничего дефицитного нет, все можно найти в куче хлама или за копейки в любом радиомагазине. В худшем случае, можно попробовать обойтись вообще несколькими кусками провода, подсоединив контакты с SPI напрямую к LPT, однако, в данном случае нужно быть предельно острожным, да и правильность записи гарантировать сложно.

Программатор SPIPGM может использоваться и для микросхем флеш-памяти с рабочим напряжением 1.8 Вольт . Автор применяет для этого дополнительный модуль (своего рода переходник), который подключается к основному модулю и состоит из дополнительных резисторов для гашения напряжения и каскада усиления на транзисторах BC547 для выходного сигнала чипа (схемы на сайты автора по ссылке выше). Ниже приводится адаптация схемы подключения, сразу предназначенная для работы с чипами на 1.8В. Для получения напряжения питания в 1.8 Вольта применен делитель напряжения (на схеме серые резисторы, желательно 1/4 Ватт), делитель при желании может быть пересчитан на другие номиналы (я указываю варианты 10 и 12 Ом, или 100 и 120 Ом), а еще лучше заменен подходящим DC-DC преобразователем (например, TLV70018). Диоды любые, нужны они для минимизации ошибок и, в принципе, можно обойтись без них.


Мы же будем подключать программатор не к чипу, а к разъему SPI_J1.

Если разъем 7 контактный, то подключается к нему следующим образом:


1. -> питание +3.3v
2. -> земля от питания и вывод 18 на LPT
3. -> резистор -> LPT 7
4. -> резистор -> LPT 8
5. -> резистор -> LPT 10
6. -> резистор -> LPT 9

Так же, на некоторых материнских платах бывают 9 контактные разъемы, там схема подключения немного отличается:


Разъем DB25P хорош тем, что внутри него можно разместить все необходимые детали. Желательно использовать максимально короткую длину кабеля, иначе будут ошибки записи. Неплохо было бы закрыть провода экраном, либо от антенного кабеля, либо просто обмотав фольгой от шоколадки, не забыв подсоединить экран к земле (GND).


При питании от батарейки конденсатор можно исключить. Лично я брал с +5 шины блока питания (красный провод), подключив к нему через разъем molex и погасив напряжение диодами до ~3.3v (двух-трех диодов будет достаточно).

Блок питания все же надежней батарейки. Имея отдельный БП можно запитать напрямую от шины +3.3 (оранжевый провод ATX разъема). Чтобы запустить блок питания без компьютера нужно замкнуть зеленый и черный провода.

Девайс в сборе:


Программа SPIPGM

Теперь можно переходить к программному обеспечению.

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

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

В архиве следующие файлы:

SPIPGM – исполняемый файл для Linux

SPIPGM.EXE – исполняемый файл для DOS/Win9x

SPIPGMW.EXE – исполняемый файл для Win9x/NT/2k/XP/Vista/7 (только х32 , поддержки х64 нет)

IOPERM.DLL – библиотека для низкоуровневого доступа в Win9x/NT/2k/XP/Vista/7(без UAC)

Надежней всего прошивать из DOS, загрузившись с Hiren или любого другого подходящего загрузочного CD/Flash. Но можно и из Windows.

Синтаксис и основные команды:

Синтаксис: spipgmw /<команда> [имя файла] [адрес] [размер]

Основные команды:

i – идентификация флеш памяти
d имя файла – считать содержимое флеш памяти в файл
p имя файла – записать флеш память из файла прошивки (без стирания)
v имя файла – сравнить содержимое флеш памяти с файлом прошивки
e – полное стирание флеш памяти
b – проверка стирания флеш памяти
u – разблокировать защиту от записи (зависит от сигнала WP#)

Имя файла полное имя файла, например: file.bin , file.rom и т.п. Расширение роли не играет, главное чтобы это был корректный файл образа и правильно указано имя.

Прошивка BIOS через SPI:

spipgmw /i – идентификация чипа. Для проверки все ли правильно подключено, программа должна определить тип установленной памяти. Если этого не происходит, проверьте правильность подключения и поддержку чипа программой.

spipgmw /d BIOS.bak – если нужно сохранить резервную копию имеющегося BIOS.

spipgmw /u – разрешение записи.

spipgmw /e – стирание.

spipgmw /p FILE.rom – запись прошивки («FILE.rom» – имя файла прошивки, нужно чтобы файл находился в одной папке с программой)

…ждем процесс записи…

spipgmw /v FILE.rom – сравниваем записанные данные с файлом прошивки. Либо можно сделать дамп spipgmw /d test.rom и сравнить его содержимое с оригинальным файлом прошивки в каком-нибудь Hex-редакторе.

Возможно наличие небольшого количество ошибок. Зависит от длинны кабеля, стабильности питания, типа памяти. Конечно, желательно, чтобы ошибок не было вовсе, но даже с некоторым количеством ошибок компьютер скорей всего запустится, а там уже можно прошить BIOS штатными средствами.

Данный способ подходит не только для прошивки BIOS материнских плат, но и любых других устройств, имеющих SPI разъем, либо напрямую, любой поддерживаемой микросхемы.

Во время очередной уборки был случайно выключен удлинитель, к которому были подключены работающие системный блок и монитор. Системный блок состоит из:
  • материнская плата - ASRock B75 Pro 3
  • процессор - Intel Core i5-3570
  • блок питания - Corsair CX750M
После включения системник начал издавать пять противных писков, что вроде как соответствует неисправности процессора. Процессор, судя по Яндекс.Маркету, на данный момент стоит от 11000 руб. Покупать довольно накладно, а недорогой, но слабенький не хочется. В общем, немного испугался…

Порылся в интернете, выяснил, что точная причина неисправности может быть совсем другая. Это вселило небольшую надежду. Но надо как-то найти эту самую причину.

В первую очередь подключил другой старенький БП - комп не запускается.

Для дальнейших проверок принес домой автомобильный комп. Состав:

  • материнская плата - ASRock B75M-ITX
  • процессор - Intel Pentium G640T
Как хорошо, что компоненты оказались взаимозаменяемыми.

Вытащил из автомобильного компа процессор, вставил его в домашний - комп не запускается. Но появилась надежда, что процессор все таки цел, а неисправна материнка, которая немного дешевле (хотя новые на чипсетах не H61 и H67 - дефицит).

Собственно, программирование

Хорошо, что микросхема BIOS не впаяна, а на обычной панельке DIP-8. Программатора у меня нет, заказывать в Китае и ждать месяц - не выход. Решил сделать программатор из ноутбука жены и имеющейся в наличии Arduino Nano. Покопался в интернете… Везде в основном прошивка заливается через COM-порт, я же решил прошивать с карты памяти (так вроде гораздо быстрее).

Набросал схему подключения:

Собрал все на макетной плате:

Тип и объем карты памяти, способ ее форматирования, имя файла должны соответствовать требованиям библиотеки SD Arduino.

Для начала набросал скетч, который считывает содержимое SPI Flash и записывает его в файл на карту памяти, попутно вычисляя контрольную сумму по методу Checksum-32, т.е. простым суммированием.

ReadFlash_WriteSD.ino

#include #define Flash_CS 9 #define SD_CS 10 #define FILENAME "BIOS.ROM" File myFile; SPIFlash flash(Flash_CS); void setup() { Serial.begin(115200); while (!Serial) {} // Ждем подключения последовательного порта // Инициализация SD-карты Serial.println("Initializing SD card..."); if (!SD.begin(SD_CS)) { Serial.println("Initialization SD card failed!"); return; } Serial.println("Initialization done."); // Удаляем старый файл, если есть Serial.print(FILENAME); if (SD.exists(FILENAME)) { Serial.println(" exists, removing..."); SD.remove(FILENAME); } else { Serial.println(" doesn"t exist."); } // Создаем файл и открываем его для записи Serial.print("Creating "); Serial.print(FILENAME); Serial.println("..."); myFile = SD.open(FILENAME, FILE_WRITE); // Если удалось создать и открыть файл - будем записывать в него if (myFile) { // Инициализация SPI Flash Serial.println("Initializing SPI Flash..."); flash.begin(); // Читаем/записываем блоками/страницами по 256 байт uint8_t data_buffer; // Количество страниц uint32_t maxPage = flash.getMaxPage(); // Checksum (32 bit) uint32_t checkSum = 0; for (int page = 0; page < maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем страницу SPI Flash flash.readByteArray(page, 0, &data_buffer, 256); // Записываем блок в файл на карте памяти myFile.write(data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Закрываем файл на карте памяти myFile.close(); // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } else { // Если файл не создался, то выводим сообщение об ошибке Serial.println("Error creating "); Serial.println(FILENAME); } } void loop() { // Пустой цикл }


Запустил скетч, получившийся файл сравнил с оригинальным BIOS - получилось около 140000 несовпадающих байт.

ReadSD_WriteFlash.ino

/* Подключение SPI-Flash: CS - D9 MOSI - D11 MISO - D12 CLK - D13 Подключение SD-Card Shield: CS - D10 MOSI - D11 MISO - D12 CLK - D13 */ #include #include #define Flash_CS 9 #define SD_CS 10 #define FILENAME "B75PRO31.90" File myFile; SPIFlash flash(Flash_CS); void setup() { Serial.begin(115200); while (!Serial) {} // Ждем подключения последовательного порта // Инициализация SD-карты Serial.println("Initializing SD card..."); if (!SD.begin(SD_CS)) { Serial.println("Initialization SD card failed!"); return; } Serial.println("Initialization done."); if (!SD.exists(FILENAME)) { Serial.print(FILENAME); Serial.println(" doesn"t exist."); return; } // Открываем файл для чтения Serial.print("Opening "); Serial.print(FILENAME); Serial.println("..."); myFile = SD.open(FILENAME, FILE_READ); // Если удалось открыть файл - будем читать из него if (myFile) { Serial.print("File "); Serial.print(FILENAME); Serial.println(" is open."); // Инициализация SPI Flash Serial.println("Initializing SPI Flash..."); flash.begin(); // Стираем чип if (flash.eraseChip()) { Serial.println("Chip erased."); } else { Serial.println("Error erasing chip."); return; } // Читаем/записываем блоками/страницами по 256 байт uint8_t data_buffer; // Количество страниц uint32_t maxPage = flash.getMaxPage(); // Checksum (32 bit) uint32_t checkSum = 0; for (int page = 0; page < maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем блок с карты памяти myFile.read(data_buffer, 256); // Записываем блок в страницу SPI Flash flash.writeByteArray(page, 0, &data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Закрываем файл на карте памяти myFile.close(); // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } else { // Если файл не открылся - выводим сообщение об ошибке Serial.print("Error opening "); Serial.println(FILENAME); } } void loop() { // Пустой цикл }


Запустил, подождал, скетч вывел контрольную сумму, она совпала с контрольной суммой оригинального файла. Но это контрольная сумма файла на карте памяти, мне же нужна контрольная сумма содержимого SPI Flash.

Можно было использовать первый скетч, но написал третий, который только считает контрольную сумму содержимого SPI Flash по тому же алгоритму.

ChecksumFlash.ino

/* Подключение SPI-Flash: CS - D9 MOSI - D11 MISO - D12 CLK - D13 */ #include #define Flash_CS 9 SPIFlash flash(Flash_CS); void setup() { Serial.begin(115200); while (!Serial) {} // Ждем подключения последовательного порта // Этот код нужен, чтобы не мешалась SD-карта pinMode(10, OUTPUT); digitalWrite(10, HIGH); // Инициализация SPI Flash Serial.println("Initializing SPI Flash..."); flash.begin(); // Читаем страницами по 256 байт uint8_t data_buffer; // Количество страниц uint32_t maxPage = flash.getMaxPage(); // Checksum (32 bit) uint32_t checkSum = 0; for (int page = 0; page < maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем страницу SPI Flash flash.readByteArray(page, 0, &data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } void loop() { // Пустой цикл }


Контрольная сумма SPI Flash совпала с контрольной суммой оригинального файла.

После вставки прошитой микросхемы BIOS в домашний комп - он благополучно заработал.

В среде Arduino IDE необходимо установить библиотеку SPIFlash через управление библиотеками.

Контрольную сумму вычислял с помощью HEX-редактора HxD.

PS: Первоначально в качестве SD-модуля использовал вот такой:

Но с ним были частые глюки, не инициализировалась SD-карта. Помогало «горячее» переподключение самой SD-карты при подключенной к компу Arduino.

PPS: Вместо резисторов пробовал подключить двунаправленный конвертер сигналов:

Но с ним схема не заработала.

Для прошивки Flash-памяти BIOS материнских плат, винчестеров, а также своих любительских конструкций мне потребовался программатор. Любимый PonyProg поддерживает только до 256кбит, кроме того LPT-порт теперь редкость, поискав по Интернету, нашел довольно простой USB-вариант "BlackcatUSB". Программатор предназначен для чтения/записи SPI-Flash чипов памяти объемом от 1 Мбита и выше (т.е. более 128кбайт) популярных серий 25ххх, 26ххх. По протоколу JTAG (требуется перепрошивка) CFI-Flash чипов - 25ххх, 28ххх, 29ххх, 39ххх, 49ххх, 58ххх, а так же K8D17ххх, K8D32ххх.

Его основой является микроконтроллер AT90USB162, имеющий USB-загрузчик, поэтому первоначальная его прошивка и обновление ПО производится по шине USB. Для перепрошивки не требуется дополнительных программ - это можно сделать прямо из его собственной программы. ПО распространяется свободно, более того. разработчики предоставляют файлы прошивок и исходники программы. Поддерживается система скриптов для добавления новых алгоритмов. Можно вручную выбирать все параметры работы с неизвестной памятью. Программа не требует установки, просто запускаем и работаем.

Внешний вид фабричного варианта

На оригинальной плате имеются перемычки для выбора напряжения SPI - 3,3V / 5V, кнопка сброса и переключатели выбора режима загрузки: обычный / загрузчик. В повседневной работе сброс и перепрошивка программатора крайне редко требуются, поэтому для клона кнопка и переключатели были исключены. Вместо 10-штырькового разъема установлен DIP-сокет, а разъем USB выполнен продолжением печатной платы:

Чтобы "разъем USB" не болтался в гнезде, он должен быть толщиной 2,5мм, Мне удалось найти кусочек текстолита такой толщины, а для платы в 1,5мм придется приклеивать "подкладку" 1мм. Она должна быть обязательно неметаллической - на случай случайной вставки в разъем "вверх ногами".


Схема программатора

При установке перемычки J1 в положение 1-2 питание микроконтроллера осуществляется от линии 5V USB, при установке 2-3 - от внутреннего стабилизатора 3,3V. Внимательно смотрите даташит памяти перед выбором напряжения программирования - большинство трехвольтовых чипов выйдут из строя при питании от 5V.

Собранный без ошибок клон сразу определится системой как AT90USB162 в режиме DFU. Запускаем оболочку BlackcatUSB и убеждаемся в этом:

Если микроконтроллер не "чистый", то принудительно переводим его в режим загрузчика:

  1. замыкаем на корпус контакт RESET
  2. замыкаем на корпус контакт BOOT
  3. отпускаем RESET
  4. отпускаем BOOT

Важно, чтобы BOOT был отпущен чуть позже, чем RESET. Далее переходим во вкладку AVR Firmware, выбираем файл прошивки BCUSB.1.09.SPI.hex и кнопкой "Program" запускаем процесс прошивки:

По окончании процесса (пара секунд), жмем "Start Application". Программатор определится системой и потребует драйвер - находим его в папке Drivers. После его установки видим готовый к работе программатор:

Теперь можно проверить его в работе.

ВАЖНО! Если горит (или мигает) светодиод режима, то вставлять и вынимать память из сокета нельзя - он под напряжением, это может испортить информацию!

Поэтому просто вынимаем клон из разъема USB, вставляем память в сокет и пробуем:

Память определилась и появилась вкладка SPI Flash, на которой можно ее прочесть и записать:

P.S. Программатор "BlackcatUSB" на сегодняшний момент не поддерживается разработчиком - вместо него выпускается обновленная версия "FlashcatUSB":

Из "железных" обновлений только замена мк на более емкий вариант - ATmega32U2. В программной части обновлений больше - поддержка большей номенклатуры чипов, в том числе NAND. Новые версии программы доступны на сайте разработчика. Новые прошивки NAND (FCUSB.1.07.NAND.hex) и JTAG (FCUSB.7.05.EJTAG_16K.hex) подходят и для нашего клона - во всяком случае запускаются и определяются, функционал не проверял - просто не на чем.

Перепрошиваем spi-flash память, если слетела прошивка

Одной из распространённых неисправностей современных ЖК-телевизоров является "слёт" прошивки.

При этом телевизор не выходит из дежурного режима в рабочий. Не реагирует на нажатие кнопок и команды с пульта. В большинстве случаев устранить такую неисправность можно перепрошивкой микросхемы SPI-Flash памяти.

Перечислю основные признаки "слёта" прошивки:

    Телевизор не включается, хотя индикация дежурного режима имеется. Индикатор светится. Отмечу, что телевизор перестаёт включаться вовсе . Если он, раз от разу реагирует на команды и включается, то, скорее всего неисправность связана с блоком питания;

    ЖК-телевизор не переходит в рабочий режим ни по команде с кнопочной панели, ни по команде с пульта. В некоторых случаях реакция на нажатие кнопки “Power” имеется - индикатор меняет цвет, но включение телевизора так и не происходит.

Что необходимо для прошивки микросхемы памяти?

USB-программатор микросхем SPI-Flash 25 серии.

В качестве программатора для прошивки микросхем памяти я уже давно использую USB-программатор Postal 3. Он же Postal AVR. Покупал набор для самостоятельной сборки. Вместе с рассыпухой, которой нет в наборе, программатор обошёлся мне в сумму около 500 руб. Покупал его специально для прошивки микросхем SPI-Flash от LCD-телевизоров.

Сейчас набор стоит 550 руб., но на плату запаяна вся SMD-мелочь. Ссылка на сайт , где можно заказать Postal 3 (USB). Там же найдёте инструкцию по установке и настройке софта.

Вот так программатор выглядит в сборе.

Разумеется, сейчас в продаже можно найти и другие программаторы (например, CH341A).

Ориентироваться надо на ремонтопригодность, доступность по цене, необходимую функциональность и поддержку сообщества (изделие должно быть популярным в радиолюбительской среде, иметь доступную документацию и софт).

Если руки прямые и есть время, то можно собрать программатор самому.

Для работы с USB-программатором Postal 3 используется программа с аналогичным названием (Postal 2/3).

Актуальную информацию по программатору Postal 3 (рисунок печатки, прошивка для микроконтроллера, софт, вопросы/ответы и пр.) можно найти в профильных темах на форумах Монитора и Ремонта бытовой техники и электроники .

Также можете скачать подробный мануал по прошивке микросхем памяти разных серий от Фёдора (fsem) по ссылке (формат PDF).

Что такое прошивка и где её взять?

Прошивка представляет собой файл в формате .bin , который иногда ещё называют дампом памяти или просто дампом. Она является микропрограммой, которая управляет работой ЖК-телевизора.

Где взять рабочую прошивку?

Самый простой способ найти годную прошивку - это вбить в строку поиска Гугла фразу типа: "модель вашего аппарата прошивка (скачать)". Например, "mystery mtv-3223lt2 прошивка" или "mystery mtv-3223lt2 скачать прошивку". Но такой способ выручает не всегда.

Рабочие прошивки можно найти в интернете на специализированных форумах и сайтах, где радиомеханики и сервис-инженеры обмениваются ими. Наиболее популярные Интернет-ресурсы такого толка, это:

Как найти то, что нужно в огромном океане информации - это отдельная тема. Но, чтобы ваш поиск был удачным, дам ещё несколько советов.

Найти нужную прошивку можно по номеру материнской платы (main board"а или майна). Он же номер шасси. Вбиваем в поиск его и слово прошивка. Иногда достаточно просто указать номер шасси и изучить первую страницу выдачи поисковика.

Номер шасси обычно указывается на самой печатной плате. Далее на фото показана основная плата телевизора Rolsen RL-28D1307. Как видим, на ней указан номер шасси - TP.VST59S.P89.

Прошивку к аппарату обычно сопровождают списком, где указывают основной состав его электронной начинки.

Это перечень с маркировкой основных микросхем или блоков: процессора (он же скалер), flash-памяти, ЖК-панели (LCD panel), платы T-CON, модуля тюнера и пр. По этому списку можно точно определить, что прошивка подходит именно под ваш аппарат. Это бывает необходимо, когда одна и та же модель телевизора имеет разные версии, в которых могут быть установлены другие компоненты и блоки.

Особое внимание нужно уделять номеру ЖК-панели (LCD panel). Обычно она указывается на её корпусе. Если в списке всё совпадает, но номер ЖК-панели другой, то, возможно, с данной прошивкой ваш телевизор будет работать некорректно.

В довольно редких случаях найти прошивку на нужный аппарат не удаётся. Например, мне не удалось найти прошивку для ЖК-телевизора Hyundai H-LED19V15. Но, когда я стал искать её по номеру шасси (main board’а), то обнаружил, что точно такой же майн установлен в телевизоре Liberton LED 1910 ABHDR. Взял прошивку от него.

Как оказалось, эти две модели телевизоров полные клоны. Разница лишь в бренде. Было забавно, когда при включении Hyundai H-LED19V15 на его экране появлялась заставка с надписью Liberton.

Подбор spi-flash памяти для замены.

Флэш-память (SPI-Flash память) применяется в современных ЖК-телевизорах, автомобильных MP3-ресиверах, видеорегистраторах всех мастей, материнских платах персональных компьютеров, телевизионных приставках и даже в говорящих игрушках и фоторамках.

Как правило, в них используются микросхемы SPI-Flash памяти 25 серии (MX25L1633E, MX25L1605A, MX25Q32B-104HIP, W25Q32FVSSIG, G25Q16-15G, GD25Q32, HG25Q32BVSIG и т.п.). Питание у данной серии микросхем 3-ёх вольтовое (2,7...3,6V), в отличие от 24 серии у которой номинальное напряжение питания составляет 5 вольт, да и тип памяти другой.

Зачастую на корпусе микросхемы указывается неполная маркировка что-то вроде 25Q64BSIG, но обязательно присутствует надпись 25Qxx, 25Lxx или что в этом духе. Вместо xx - кодовая маркировка объёма памяти микросхемы.

Микросхемы имеют корпус SOIC-8 под планарный монтаж.

Также могут применяться и другие типы корпусов, например, SOIC-16 (300 mil).

Не исключено, что на практике встретите не только микросхемы spi-flash с выводами (pin), но и в корпусах под BGA-монтаж (на шарах) или с выводами в виде контакта (pad), например, WSON-8 (DFN-8). К счастью, такие в ЖК-телевизорах встречаются довольно редко. Но это пока...

Вместо родной микросхемы памяти лучше использовать новую или заведомо исправную. Родная может быть с браком или дефектом. Даже если мы её удачно перешьём рабочей прошивкой, то не факт, что микросхема будет корректно работать в будущем.

Родную микросхему SPI-Flash лучше не выкидывать или считать и сохранить с неё родную, заводскую прошивку. Это страховка на случай, если новая прошивка не подойдёт.

Бывает, что после повторной перепрошивки родной микросхемы памяти своим же заводским дампом телевизор начинает работать. Но, как уже говорил, лучше заменить микросхему новой.

По моему мнению, большинство "слётов" прошивки происходит из-за брака в микросхемах памяти, криво написанного софта (микропрограммы) или же после проблем с питанием, которые приводят к некорректной работе микросхемы. Порой приходится перепрошивать микросхемы памяти в телевизорах, которые пришли в ремонт по причине выхода из строя элементов блока питания (из-за грозы или скачков напряжения в электросети).

Наиболее часто в ЖК-телевизорах можно обнаружить микросхемы 25Q32 на 32 Мбит (4 Мбайт или 4194304 байт) и 25Q64 на 64 Мбит (8 Мбайт или 8388608 байт).

Почему 8388608 байт, а не 8000000? Кому не понятна эта путаница с килобайтами и мегабайтами, и, почему надо умножать не на 1000, а на 1024, советую погуглить "Кибибайт". Возможно, развеете для себя очередной миф, наподобие того, что ток течёт не от плюса "+" к минусу "-", а наоборот.

Итак, с теорией более-менее разобрались, теперь займёмся практикой.

Ещё раз напомню о важном. При ремонте ЖК-телевизора первым делом стоит убедиться в том, что причина его некорректной работы кроется именно в "слетевшей" прошивке. Аналогичным образом проявляются неисправности блока питания (дежурного или основного).

Перепрошивать память будем на примере ЖК-телевизора Mystery MTV-3223LT2. На фото он уже исправно работает.

Неисправность проявлялась следующим образом. Телевизор не включался, но при нажатии кнопки "Power" на пульте ДУ или кнопочной панели светодиодный индикатор менял свой цвет.

Вскрываем заднюю крышку телевизора. При этом его лучше положить на диван или кровать, чтобы исключить повреждение ЖК-матрицы.

Откручиваем болты по периметру задней крышки. Не удивляйтесь тому, что LED-подсветка включена. Фото я делал уже на рабочем телевизоре.

Почти вся электронная начинка сосредоточена на одной печатной плате.

Здесь и блок питания, и инвертор DC/DC для питания LED-подсветки, и скалер (центральный процессор), а также блок тюнера и усилитель. Всё на одной плате.

Кстати, номер LCD панели у нашего телевизора Mystery MTV-3223LT2 (V4N09) указан на наклейке (V320BJ7-PE1).

После осмотра печатной платы и замера основных напряжений стало ясно, что "железо" исправно, а неисправность, скорее всего связана с программной частью аппарата.

Снимаем плату, чтобы выпаять микросхему памяти. Если не уверены в том, что потом, во время сборки, сможете правильно подключить все провода и шлейфы, то делаем качественное фото или записываем/маркируем что и с чем соединяется.

Теперь нам надо подобрать замену нашей микросхеме. Как видим, в данном телевизоре используется 25Q64BSIG с объёмом памяти 8 Мбайт (64 Мбит). Вместо неё я установлю новую микросхему W25Q64FVSIG фирмы Winbond.

Далее выпаиваем микросхему. Раньше я справлялся обычным паяльником и медной проволочкой, иногда выпаивал феном термовоздушной паяльной станции. Но теперь использую сплав Розе. С ним и не перегреешь ничего, и дорожки на печатной плате не отслаиваются.

Выпаиваем чип и убираем остатки припоя с дорожек медной оплёткой.

Отмываем остатки флюса изопропиловым спиртом. Место под установку прошитой памяти готово.

Теперь настало время прошить новую флэш-память.

Файл прошивки для ЖК-телевизора Mystery MTV-3223LT2 (V4N09) можно скачать по ссылке .

Так как микросхема выполнена в планарном корпусе, то для её прошивки желательно иметь переходник.

Первое время я просто напаивал провода на ножки микросхемы и вставлял их в панель программатора. Занятие нудное, да ещё есть риск отломить выводы микросхемы.

Устав это делать, купил адаптер-переходник с SOIC-8/SOP-8 на DIP-8 (200 - 208 mil). Вот ссылка , если кому надо такой. и детали на Али я уже рассказывал.

Кроме адаптеров есть ещё и специальные клипсы для прошивки памяти без выпаивания, но я таким пока не пользовался.

Обязательно обращаем внимание на то, под какой сокет идёт адаптер. Их существует несколько под разные типы корпусов (150 mil, 170 mil) или же под корпуса TSSOP-8. Для тех микрух, что стоят в ЖК-телевизорах надо на 200 209 mil.

Так как выводы у переходника типа PLS, то в цанговую панель на программаторе его не установишь. У меня на программатор запаяна обычная панелька DIP-8 с лепестковыми контактами. Поэтому в неё адаптер вставляется легко.

Устанавливаем память в переходник и не забываем установить джампер в положение 3,3V на плате программатора. Напомню, что микросхемы SPI-Flash питаются напряжением 2,7...3,6V.

При нажатии на верхнюю пластинку фиксатора контакты панели расходятся. Ставим микросхему на контакты, соблюдая цоколёвку и отпускаем фиксатор. Напомню, что отсчёт номера вывода микросхемы ведётся против часовой стрелки, начиная от ключа на корпусе микросхемы. Ключом в данном случае является круглое углубление или точка на корпусе.

Память я прошиваю с помощью своего старенького ноутбука Acer Aspire 5510, который гоняет ещё под WinXP. Подключаем программатор к USB-порту компьютера.

Также не помешает поставить "галку" в чекбоксе "Auto " в блоке "Writer ". Особенностью микросхем SPI-Flash является то, что они требуют полного стирания перед записью. С опцией "Auto" программа перед записью автоматически очищает память микросхемы, а также проводит проверку-сравнение (Verify) после считывания или записи дампа.

В окне слева выводятся логи процесса. По ним можно понять, что делает программа. Чтобы очистить записи в окне логов можно нажать кнопку "Clear ".

Основные настройки программы задаются на вкладке "Настройки", которую можно открыть кнопкой "Settings ".

Как видим из этого скриншота, взятом для примера, программа определила, что микросхема имеет маркировку GD25Q32, а её объём памяти составляет 4194304 байт (4M-byte).

На вкладке Settings необходимо сделать несколько настроек. Во-первых, необходимо указать, какой объём памяти имеет наша микросхема. Если проводили проверку кнопкой "Version", то объём смотрим в логах.

Я выбираю 8 M-byte (8 Мбайт) для W25Q64. Жмём "ОК". Также не помешает проверить снята ли галочка в чекбоксе EEPROM.

Затем нужно указать файл дампа, который мы будем записывать в память. Для этого в главном окне программы жмём кнопку "Open " напротив поля "Source File (for flashing) ". В окне проводника выбираем файл прошивки и жмём "Открыть ".

После этого в поле ввода "Source File (for flashing)" появится путь к файлу прошивки.

Если до этого считывали содержимое микросхемы ("Read "), то вместо Scan SPI Flash for Erase в прогресс-баре можем увидеть надпись Wait for Busy Clear .

Если микросхема памяти новая, то программа сообщит, что чип пустой и очистка не требуется (Chip is Empty, Erase Not Need. May be DATA-Line disconnected?).

Если же память микросхемы была ранее записана данными, то программа выполнит очистку и сообщит об этом (Chip is Empty. All Data = FF. May be DATA-Line disconnected?).

По завершению записи происходит верификация (Verify SPI Flash ).

В большинстве случаев процесс записи проходит без ошибок в течение нескольких минут.

Если процесс прошёл успешно, то в окне логов последними строчками будут SPI Verify 8388608 OK. usb-device closed .

Если что-то не получается, то ответ на вопрос можно найти на форумах. Ссылки я уже указывал.

Запаиваем микросхему на плату, соблюдая цоколёвку!

Радуемся работе ЖК-телевизора.

Ну и напоследок дисклеймер. Ну как без него!?

Данный мануал в первую очередь адресован всем тем, кто разбирается в электронике, а также начинающим радиомеханикам и электронщикам. Несмотря на то, что сама процедура перепрошивки не является сложной, но всё же требует компетентности и базовых навыков работы с электроникой. Всё, что вы делаете, вы делаете на свой страх и риск!



Загрузка...