16Мб SPI flash WINBOND W25Q128 – расширяем память роутеру TL-MR3020

Добрый день,
Предлагаю Вашему вниманию мини обзор последовательной SPI флеш-памяти в корпусе SOIC8 от производителя Winbond размером 16Мбайт. В этом обзоре я опишу как с минимальными затратами усилий сделать апгрейд постоянной памяти роутера TP-Link TL-MR3020.

Зачем?

Мне понадобился компактный роутер на базе Atheros с большим объемом ROM, чем предлагают производители. В частности, мне нужно было место для нескольких пакетов, чтобы организовать APRS шлюз. Обычно в таких случаях используют внешнюю USB флеш память, но мне этот вариант не подходил, так как создавал проблемы с надежностью и занимал единственный USB-порт роутера.

Теоретические изыскания

Я провел поиски в Сети и нашел несколько вариантов расширения памяти роутера. Все они задействуют альтернативный загрузчик UBoot, требуют работы в HEX редакторе с пониманием происходящего и пайки консольного вывода к USB-TTL переходнику и работы в консоли.

Моя реализация

Мною был найден UBoot, которому не нужна последовательная консоль.
Мною была написана программа, которая позволяет собрать прошивку без использования HEX-редактора.

Герой обзора

Пришла в отрезке ленты:

Она же без упаковки:

Идентификаторы:

Необходимые инструменты и материалы

Паяльник, флешка, роутер и программатор Ch441A.

Процесс замены

1.Выпаиваем родную флешку, считываем программатором и сохраняем в файл с именем 4mb.bin. Должен получится файл размером 4194304 байта.
2.Качаем программу и помещаем файл 4mb.bin в одну папку с MR3020FW.exe
3.Запускаем MR3020FW.exe:

Жмем «Собрать прошивку с ART». Программа вытащит калибровки ART из оригинального дампа и соберет файл final_16mb_with_ART.bin
4.Прошиваем файл final_16mb_with_ART.bin в новую флешку, проверяем записанное и впаиваем новую флешку в роутер.

Я убил исходную флешку! Что делать?

Если содержимое исходной флешки недоступно — программа соберет прошивку без калибровочных данных. Роутер будет полностью работоспособен за исключением wifi-интерфейса.

Программная часть

1.Подключаем роутер к сетевой плате компьютера патч-кордом.
2.Назначаем сетевой плате компьютера IP: 192.168.1.2, маску:255.255.255.0.
3.Зажимаем кнопку WPS на выключенном роутере и подключаем питание.
4.Считаем вспышки светодиодов. После пятой(!) вспышки отпускаем кнопку WPS.
5.Заходим браузером на 192.168.1.1:

6.Качаем подходящую сборку OpenWRT и обновляем основную прошивку:

PS:

Вот так выглядел тестовый стенд

С наступающим Новым Годом!

mysku.ru

Прошивка BIOS через SPI интерфейс

Не столь давно приключилась со мной одна неприятность. Нужно было обновить 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, однако, в данном случае нужно быть предельно острожным, да и правильность записи гарантировать сложно.

Схема с сайта автора, при подключении непосредственно к чипу (для флеш-памяти с рабочим напряжением 3 вольта):

Программатор 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 /<команда> [имя файла] [адрес] [размер] [/l=адрес] [/d=задержка]

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

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 разъем, либо напрямую, любой поддерживаемой микросхемы.

www.toolgir.ru

Прошивка flash-памяти 25xxx через программатор USBasp

Микросхемы флеш-памяти eeprom серии 25xxx широко применяются в микроэлектронике. В частности, в современных телевизорах и материнских платах в 25xxx хранится прошивка биоса. Перепрошивка 25xxx осуществляется по интерфейсу SPI, в чем и заключается отличие этих микросхем от флеш-памяти семейства 24xxx, которые шьются по i2c(квадратная шина).

Соответственно, для чтения/стирания/записи 25xxx нужен SPI-программатор. Одним из самых дешевых вариантов программаторов для этой цели является USBasp, который стоит смешные деньги- с доставкой всего около 2$ на ебее. В свое время я купил себе такой для программирования микроконтроллеров. Теперь мне понадобилось прошить не микроконтроллер, а SPI-флеш и решено было им воспользоваться.

Оказалось, что сам по себе USBasp с оригинальной прошивкой такую память не шьет, но отечественный программист с ником Tifa (низкий поклон ему и долгих лет жизни) модернизировал прошивку USBasp специально для обеспечения возможности работы с флеш-памятью. Постоянная ветка обсуждения альтернативной прошивки USBasp от Tifa, связь с автором и ссылки на файлы тут: http://forum.easyelectronics.ru/viewtopic.php?f=17&t=10947

Забегая вперед скажу, что прошивка от Tifa работает, микросхемы 25xxx шьются. Кстати, кроме 25xxx, модифицированный программатор рассчитан на работу с 24xxx и Microwire.

 

1. Перепрошивка USBasp

Сначала нужно замкнуть контакты J2:

Лично я не просто замкнул, а впаял в контакты переключатель:

При замкнутых контактах J2 (это у меня переключатель в положении вправо) USBasp переходит в режим готовности к перепрошивке.

Сам себя USBap перепрошить не может, поэтому нужен еще один программатор. USBasp как бы оказывается в положении хирурга, который не может сам себе вырезать аппендикс и просит друга помочь. Для перепрошивки USBasp я использовал самодельный программатор AVR910, но для одного раза можно по-быстрому за пару минут спаять программатор «5 проводков», который состоит всего-лишь  из одного разъема LPT и 5 резисторов.

Подключаем программатор к USBasp:


Теперь идем на форум альтернативной прошивки от Tifa, в самом верхнем посте находим и качаем архив с последней прошивкой  и ПО.

Находим там файл mega8.hex, это и есть альтернативная прошивка для USBasp.

Запускаем CodeVisionAvr (я использую версию 2.0.5), выставляем настройки программатора: Settings-> Programmer.

Устанавливаем настройки записи: Tools->Chip programmer. Выбираем чип Atmega8L, именно такой стоит на USBasp. Фьюзы не выставляем- те, что надо, уже прошиты в чипе. Остальные настройки оставляем по умолчанию.

Стираем старую программу USBasp: Program-> Erase chip.

Открываем файл прошивки mega8.hex: File-> Load flash.

Перепрошиваем USBasp: Program-> Flash.

Если прошла запись и не выдало сообщение об  ошибке, значит альтернативная прошивка благополучно прошита в USBasp. Теперь USBasp может не только шить AVR-микроконтроллеры, как раньше, но еще и работать с флеш-памятью. Размыкаем контакты J2, что бы USBasp снова перешел в режим программатора.

Теперь проверим, видит ли Windows 7 x86 этот программатор. Вставляем USBasp в USB и… система пишет «USBasp не удалось найти драйвер». Понятно, нужно установить драйвер. Но драйверов в скачанном на форуме архиве нет, их нужно скачать на родном сайте USBasp тут, оригинальные драйвера подходят и для модифицированного программатора. Скачали, установили, Win7 увидела программатор, все ок. Впрочем, я программирую микроэлектронику на ноутбуке с WinXP, она тоже после установки драйверов видит программатор.

 

 2. Площадка для подключения USBasp к микросхеме 25xxx DIP

Теперь нужно подготовить площадку для программирования 25xxx. Я это сделал на макетной плате по такой схеме:

 

3. Прошивка микросхем 25xxx через USBasp

Для прошивки 25xxx через модифицированный USBasp используется программа AsProgrammer, которая тоже есть в архиве.

Для примера, поработаем с микросхемой Winbond 25×40.  Запускаем AsProgrammer, ставим режим работы SPI и выбираем тип микросхемы: Микросхема-> SPI-> Winbond->…

… и видим, что W25X40 в списке нет. Что же, тогда заполним параметры микросхемы вручную. Находим мануал на Winbond 25X40 и там на странице 4 видим такие параметры:

Эти параметры вносим сюда:

Подключаем USBasp к компьютеру и микросхеме Winbond 25×40:

С помощью кнопок «прочитать», «записать», «стереть», проверяем работу программатора:

Все ок.

Только нужно учесть, что перед тем, как что-то записать в микросхему, сначала нужно выставить: Настройки-> Проверка записи, что бы после записи прошивки в микросхему была выполнена проверка на соответствие того, что писали тому, что в итоге записали. Это немаловажная вещь, потому что если прошивку делать не на очищенный чип, в него запишется чёрт-те что. Поэтому сначала нужно стереть микросхему, а затем только проводить ее запись.

Благодаря прошивке от Tifa дешевый китайский программатор USBasp теперь умеет работать с микросхемами flash-памяти eeprom 25xxx. Теоретически еще может работать c 24xxx и Microwire, но я проверил только работу с 25xxx.

UPD1:
Оказывается, такую же прошивку можно записать и в программатор AVR910. Тогда он тоже будет работать с flash-памятью 25xxx: Программатор ISP памяти из AVR910.

plc-blog.com.ua

Программатор SPI Flash своими руками

#include “SPIFlash.h”

#include <SPI.h>

#include <avr/wdt.h>

//////////////////////////////////////////

// flash(SPI_CS, MANUFACTURER_ID)

// SPI_CS          – CS pin attached to SPI flash chip (8 in case of Moteino)

// MANUFACTURER_ID – OPTIONAL, 0x1F44 for adesto(ex atmel) 4mbit flash

//                             0xEF30 for windbond 4mbit flash

//////////////////////////////////////////

SPIFlash flash(2, 0);

byte buf[1024];

void setup() {

  Serial.begin(115200);

  while (!Serial);

  if (flash.initialize())

    Serial.println(“Init OK!”);

  else

    Serial.println(“Init FAIL!”);

}

 

void loop() {

  char cmd;

  if (!Serial.available()) return;

  cmd = Serial.read();

  if (cmd == ‘t’) {

    Serial.print(“COM ok\n”);

    return;

  }

  if (cmd == ‘i’)

  {

    Serial.print(“DeviceID: “);

    Serial.print(flash.readDeviceId(), HEX);

    Serial.print(‘\n’);

    return;

  }

  if (cmd == ‘a’)

  {

    flash.chipErase();

    while (flash.busy());

    Serial.print(“OK”);

    Serial.print(‘\n’);

    return;

  }

  if (cmd == ‘e’)

  {

    long  sector = Serial.parseInt();

    Serial.read(); // разделитель

    flash.blockErase4K(sector);

    Serial.print(“OK”);

    Serial.print(sector);

    Serial.print(‘\n’);

    return;

  }

  if (cmd == ‘w’)

  {

    long addr = Serial.parseInt();

    Serial.read(); // разделитель

    for (int bufsz = 0; bufsz < 128; bufsz++)

    {

      while (Serial.available() == 0);

      buf[bufsz] = Serial.read();

    }

    flash.writeBytes(addr, buf, 128);

    Serial.print(“OK”);

    Serial.print(addr);

    Serial.print(‘\n’);

    return;

  }

  if (cmd == ‘r’) {

    long addr = Serial.parseInt();

    Serial.read(); // разделитель

    for (int i = 0; i < 4; i++)

    {

      flash.readBytes(addr + (i * 1024) + 0, buf, 1024);

      for (int j = 0; j < 1024; j++)

        Serial.write(buf[j]);

    }

    return;

  }

}

skproj.ru

Замена eeprom в ресивере GS 8306

Ресивер GS 8306 выключился непосредственно в процессе работы. После выключения ресивер больше не включается. Проверили блок питания — он исправен. Значит проблема всё же в самом ресивере. Внутри у ресивера GS 8306 только небольшая материнская плата и модуль картоприёмника. Долго мудрить с платой ресивера не стали — внешне она была в полном порядке. И в качестве совмещённой диагностики и ремонта заменили микросхему eeprom.

Заменили микросхему постоянной памяти eeprom, хранящую прошивку ресивера. В качестве микросхемы eeprom в ресивере использована WINBOND W25Q128BVFG. Вот именно такую новую микросхему мы и установили, предварительно прошив версией ПО 1.2.001

Замена eeprom в ресивере GS 8306 на оригинальную WINBOND W25Q128BVFG

Вообще у GS 8306 есть проблемки в работе с этой микросхемой. Например, если обновлять список каналов ресивера и при этом отключают электропитание в доме, то прошивка у ресивера слетает.

В случае рассматриваемого ремонта прошивка на микросхеме не слетала, просто она отработала больше, чем того хотелось старой прошивке версии 1.1.

В общем — микросхему заменили — всё работает.

Так же в нашем сервисе можно выполнить ремонт ресиверов GS 8300 /8300M /8300N и других моделей как для Триколор, так и для НТВ+.

Сделать заказ ремонта Вашего ресивера в Краснодаре можно по тел. + 7 (905) 40-24-600. Евгений.

tech.servis23.ru

alexxlab

leave a Comment