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

В общем это нужно чтобы перепрошивать 8 ножные SPI флешки. А это в свою очередь нужно чтобы восстанавливать роутеры, сбрасывать пароли на биосы и восстанавливать их, и много чего еще.

Будем делать за 10 минут самый простой программатор своими руками на Ардуино 🙂 Понадобится Arduino Pro Micro ну или любая другая (будет отличаться только распиновка на ардуино). Собираем эту сложную схему:

scheme_prog

Пофиг что 5 вольт, еще ничего не сгорело ни разу. Но только выпаивать флешки надо из платы, так как другие элементы могут быть не такими устойчивыми))))

prog_foto_1  prog_foto_2

Сама прога-программатор:

prog1

prog2

Скачать тут: SpiEepromFlasher.zip

Вот прошивка (скетч) для ардуины:

Ничего сложного и главное нет лишних деталей в схеме))) Главное правильные библиотеки — скачать их вместе с прошивкой тут: spi-eeprom-fw2.zip

Пробовал на флешках 25Q128FVSG, 25L3206E, еще какая-то роутерная безымянная.

Как выяснилось программатор может иногда не работать 🙂 Вариантов несколько:
— либо слишком длинные провода к флешке (нормально см 8-15)
— либо слишком китайская ардуина (например нано в3)
— либо дохлая флешка

← Предыдущий пост

Следующий пост →

95 Комментов

  1. Юрий

    Здравствуйте! А как с Вами можно связаться? Вопросик по этой программке появился

    • admin

      Здравствуйте, почта kovalev@skproj.ru

    • Александр

      Приветствую.
      Попробовал собрать данный прибор на UNO и на MEGA, работает на простых SPI 25-йсерии.
      Могу я вас попросить доработать устройство для работы с Flash AT45DB161 — Atmel ?
      Очень интересная микруха, а как правильно читать-записывать никак не разберусь.
      Спасибо.

      • admin

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

  2. Мансур

    Здравствуйте! Я всё скачал. прошил ардуину вашим скетчем. Но до меня не доходит как залить прошивку в флешь. Нету кнопки залить или закачать. Только сохранить получается. Подскажите пожалуйста. Очень надо прошить тв с 8 мегабайтной spi. Мой прогер только до 2-х мега берёт. И ещё не понял в архиве 3 файла. 1 то понятно скетч а 2 других куда?

    • admin

      Здравствуйте! Ставите курсор в начало флеша (на нулевую позицию) и нажимаете «вставить файл в текущую позицию», затем выбираете файл прошивки и ждете ))

      Насчет двух дополнительных файлов — это вспомогательные файлы с функциями для скетча, просто пусть они лежат в той же папке, что и сам файл скетча, ардруино сама их подцепит, с ними ничего делать не нужно.

  3. Иван

    Здравствуйте! А можно этим программатором шить флешки биосов материнок , если да а как туда залить (в прогу) прошивку для биоса?

    • admin

      Да наверно, надо только проверить что флешки именно с SPI интерфейсом и ее нужно все ж выпаять из материнки. Чтобы точно сказать напишите модель флешки.

      А чтобы прошить надо сначала сделать бекап (скачать фулфлеш). Потом поставить курсор на самый первый байт в редакторе и нажать «Вставить файл в текущую позицию»

  4. Filin

    Было бы здорово еще исходники проги-программатора заполучить, с целью общего развития и возможного допиливания 🙂

    • admin

      Для общего развития если просто посмотреть — можно декомпилировать без проблем)) а что Вы бы улучшили? Есть предложения? Я готов работать над программой.

      • Filin

        Декомпилировать — это для меня слишком круто 🙂 Я пока только начинаю интересоваться этой темой. Ну нет так нет, не критично. В любом случае спасибо за статью, для начинающего самое то — коротко и по делу.

  5. Виктор

    А если я буду использовать аналог Меги2560 — что нужно изменить? Хочу попробовать прошить флэш мульта ноутбука. Еще есть у мня USB-TTL и COM-TTL переходники. Может как-то с их помощью можно прошить?

    • admin

      Думаю с мегой2560 проблем не возникнет, номера ног для MOSI, MISO и SCK немного другие, но они должны быть соседние.
      Насчет USB-TTL и COM-TTL не знаю, мне кажется есть какие-нибудь программаторы, которые работают через эти переходники, но я не встречал

  6. Виктор

    я так понял -= у вас 2-й пин это SDA. 15й — SCL, 14- MISO 16 — MOSI. это аппаратная распиновка предусмотренная изготовителем контроллера?

    тогда на Mega2560 20й пин — SDA, 21й — SCL, 50 — miso, 51 — mosi. Так и подпаивать к флэшке?

    SDA — нога 1
    MISO — нога 2
    VCC — нога 3, 7, 8
    GND — нога 4
    MOSI — нога 5
    SCL — нога 6

    правильно?

    скетч я уже залил в контроллер, в программку Вашу загрузил BIN с прошивкой, контроллер при прошивке в пустоту мигает светодиодами. осталось припаять пациента и экспериментировать.

    • admin

      Немного не так, CS нога флешки должна идти к D2 (Digital 2). Еще SCL на меге2560 52 пин. MISO и MOSI правильно. Вот тут таблица есть https://www.arduino.cc/en/Reference/SPI

      • Виктор

        Смотрел по схеме. да, 52 пин это SCK. Просто у меня на плате есть надписи где 21 — SCL.

        А вообще я ступил, тут же прям посередине платы есть 6-пиновый разъем ICSP — буду от туда подключатся. там и MISO и MOSI и SCK и Vcc и GND. А 2-й пин значит задается в скетче в начале?

        По поводу переходников — они наверное в другой ситуации используются, там интерфейс UART, т.е. по Rx и Tx данные передаются.

        • admin

          Я чет не уверен что тот 6 пиновый разъем по середине — то что надо. Все ж лучше по таблице делать https://www.arduino.cc/en/Reference/SPI
          Хотя проверить не мешает, может правда просто продублировали ноги в другое место

        • admin

          а 2 пин да, задается в начале. Можно любой использовать какой нравится)

  7. Виктор

    Да. и на 2560 есть 2 питания 3,3v и 5v, какое надежнее использовать?

    • admin

      Я все делал на 5 вольтах, хотя по документации надо 3.3. попробуйте 3.3 — если не заработает тогда 5 🙂

  8. Виктор

    а какой размер выставлять? в даташите есть такая инфа:

    Pm25LD010: 128K x 8 (1 Mbit)

    • admin

      128 килобайт

      • Виктор

        Все. Спасибо дружище. Прошил флэху. Ноут сразу запустился. До этого лежал мертвым, даже индикации заряда АКБ небыло.

  9. Александр

    Скетч залил на Ардуино Уно. При запуске SpiEepromFlasher выдается сообщение о том, что тот не является приложением WIN32. У меня XP. Нужна WIN7 ?

    • admin

      Нужен .net framework 4.5 и 64 разрядная операционная система

  10. Александр

    При попытке перезалить скетч выдает : Arduino: 1.6.6 (Windows XP), Плата:»Arduino/Genuino Uno»

    avr-g++: error: missing filename after ‘-o’

    exit status 1
    Ошибка компиляции.

    • Александр

      Установил последнюю версию Arduino IDE, скетч залил без ошибок. Буду искать 64 разрядную ОС.

  11. Александр

    Всё прошил на отлично !
    Теперь подробнее, возможно кому-то поможет. ОС WIN 7 32-разрядная(достаточно оказалось), на всякий случай поставил последнюю версию Net.framework 4.5.
    Плата китайская Ардуино Uno.
    Подключение :
    Ардуино Микросхема
    2 1 D2
    12 2 MISO
    3.3 v 3, 7, 8 Vcc
    GND 4 GND
    11 5 MOSI
    13 6 SCL
    Автору — искренняя благодарность !!!!
    P.s. а какие еще типы флешек можно прошивать по Вашей методике ?

    • admin

      Был рад помочь. Только SPI флешки

      • Виктор

        Доброго дня. Сегдня принесли автомобильный видеорегистратор, висит на заставке. Пробую прошить. На офсайте прошивка заливается через SD карту. Результата нет — закачал на Sd, включил — все равно не прошился. Я его разобрал и сразу обратил внимание на SPI память с маркировкой 25L320SE. Я так понял микропрограмма вся хранится на этой флэшке? может также прошить с ардуины? других микросхем памяти я не нашел на плате. файл прошивка в формате BIN.

    • Виктор

      я вообще на WIN 10 64x шил. все в норме прошло. Воскресил ноутбук) щас буду пробовать регистратор восстановить. А вообще заказал программатор на aliexpress что б не паяться к ножкам. стоит он 200 рублей.

  12. Денис

    Спасибо автору!
    Этим способом удалось прошить SATA контроллер.

  13. Легион

    Шил 25032xx Через переходник 5 ->3.3 читает но не пишет. Воткнул напрямую. Шьет. Спасибо.

  14. Metamorf

    Распиновка Arduino nano v3.0
    1 — d2
    2 — 12
    3,7,8 — vcc (5v)
    4 — GND
    5 — 11
    6 — 13

  15. Андрей

    Привет, микросхема 25l8006e со скаллера (после кривой прошивки через усб, была не вовремя прервана). При запуске этого программатора, после выбора нужного ком-порта, открывается окно программы с белым экраном вместо данных и зависает — not responding. Куда копать? Большое Спасибо.

    • admin

      Привет, ну либо провода слишком длинные либо что то с ардуиной не то. попробуйте подключится к ней через монитор порта на скорости 115200 и отправить букву t — если напишет COM ok то проблемы между флешкой и ардуиной или с самой флешкой. Если не напишет COM ok тогда что то не то с ардуиной 🙂
      Если с флешкой проблема попробуйте укоротить провода к ней, ну или другую флешку, может какая-то несовместимость 🙂 Еще почему то не всегда программатор с arduino mini работает

      • Андрей

        Получилось с Мегой! С Nano v3 на отрез отказывается работать. Спасибище!!! 🙂

  16. Сергей

    Всё отлично, хороший программатор на скорую руку получается. Автору огромное спасибо. Только вот я его нагуглил, когда хотел прошить 93C56… А такие маленькие он не шьет(

    • admin

      прошьет))поставьте минимальный размер при прошивке. если нужно считать — фулфлеш потом обрежете просто. а если нужно записать — курсор ставьте на первый байт и записывайте файл нужного размера, хоть 64 байта ))

  17. Алексей

    Спасибо автору! Если внимательно прочитать и сделать как описано, то все получится! Впервые решил перепрошить роутер. Была под рукой запылившаяся Ардуино Нано. Соединил провода. Скачал последний IDE. Прошил успешно!!!

  18. Павел

    Спасибо автору огромное! Очень помогло! Вот только не решил проблему: на меге 2560 первые 128 байт заливаются сплошные FF.

  19. Константин

    Все собрал. ID читает. После нажатия на считывание фулфлеш программа перестает отвечать. Как с этим бороться? Заранее спасибо

    • admin

      Вариантов несколько:
      — либо слишком длинные провода к флешке
      — либо слишком китайская ардуина (например нано в3)
      — либо дохлая флешка

  20. Илья

    Огромное спасибо автору! Восстановил камеру Soocoo C30 после неудачной прошивки. Все супер !

  21. Wikly

    Автор молодец! Спасибо! Было бы прям совсем отлично, если бы сама прога на ПК была под 32х разрядную систему!

    • Wikly

      И еще, при попытке скачать фулфлеш, почему то сохраняется только 4 КБ из 4096. Хм.
      Arduino UNO,
      flash: Winbond w25q32bv

  22. Андрей

    Здравствуйте, помогите с Ардуино Уно Китайский.
    Заливаю скетч проверка проходит. Но когда делаю выгрузку. Сыпет ошибкой.
    Arduino: 1.6.5 (Windows 7), Плата»Arduino Uno»
    Изменена опция сборки, пересобираем все
    Sketch uses 4 332 bytes (13%) of program storage space. Maximum is 32 256 bytes.
    Global variables use 1 276 bytes (62%) of dynamic memory, leaving 772 bytes for local variables. Maximum is 2 048 bytes.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xc9
    Проблема загрузки на плату. Для достижения дзен, курить http://www.arduino.cc/en/Guide/Troubleshooting#upload .
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xc9
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xc9
    Это сообщение будет содержать больше информации чем
    «Отображать вывод во время компиляции»
    включено в Файл > Настройки

  23. alexgz

    Прошил флешку W25Q64FVSIG. арудиной наной на меге168 и консольной версией прогивальщика . Немного пришлось подправить код.
    Спасибо большое!!!

  24. Борис

    Спасибо автору за идею.
    Пробовал на плате через SPI разъем шить — не получилось. Прочитать смог. Стереть — тоже. Буду выпаивать. Ардуина UNO китайская (максимальная скорость 115200). Через flashrom — то же самое. Для надежности поставил делители напряжения. Пробовал со скоростью играться — не помогает.

  25. Борис

    Дополняю: флешка SST25VF080B.
    Хотелось бы в программе иметь возможность не писать флешку целиком, а только измененный блок. Или она так и делает? Не смотрел…

  26. Борис

    Прошил flashrom-ом. И только выпаянный чип с первого раза.
    Данная программа не помогла.

  27. Дима

    Скажите, а ST95080W можно шить так? Есть Мега и надо прошить дампом флешь от принтера.

  28. Bozar

    а китайская uno R3 сможет полноценно работать?

  29. Степан

    Большущее спасибо за статью и софт! Спас жизнь материнке 🙂

  30. Павел

    Здравствуйте!

    Собрал данный программатор, всё работает, но есть беда.
    Выбираю файл дампа биоса, а в банку флешера он не отображается — как были нули везде, так и записываются нули, а не мой файл.
    Как туда код засунуть нужный?

    • admin

      Здравствуйте! поставьте курсор в начало флеша (на нулевую позицию) и нажимаете «вставить файл в текущую позицию», затем выбираете файл прошивки и ждите. Если не помогло то возможно либо у вас файл из нулей, либо что-то собрано не так

      • Павел

        Именно так и делаю. Файл точно не из нулей — хекс редактором смотрел. И что интересно, когда считывал микросхему, там были FFF и т.д., а после записи, стали одни нули. Получается, что работает всё правильно, считывает-записывает, но не то что нужно. Есть ли ограничение на размер файла дампа во флешере? Он у меня 16 мегабайт.

      • Павел

        И ещё момент, если физически переподключить ардуино перед запуском флешера — пишет разные device ID. То FFF, то 0, а сейчас вот EF40 написал.

        • admin

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

        • Денис

          Здравствуйте. Те же яйца. При запуске скачанного флешера, в окне НЕХ редактора уже есть какой-то код, т.е. видно что это какая-то прошивка (НЕ МОЯ). При попытке выставить курсор на 00 и нажать «Вставить файл с текущей позиции», выбрать при этом свою прошивку — начинается процесс, флешка шьется. Если потом считать — то выдно, что флешка прошилась, только не моим файлом, а тем что было в окне НЕХ редактора ((((
          Может есть предыдущая версия флешера?

          • admin

            Здравствуйте. При запуске флешера в окне НЕХ редактора уже есть бинарник — это ваша текущая прошивка. Данные в это окно загружаются из флешки, а не наоборот.
            Флешер не может шить повторно содержимое HEX редактора, он не запрограммирован на это. Данные берутся из файла, которые вы указываете, а не из окна HEX. Скорее всего флешер просто не может прошить ваш файл по каким то причинам.

            Проверьте все еще раз внимательно, особенно длину проводов. Прям попробуйте те провода, которые до флешки, 3-4 см оставить

      • Павел

        И вот ещё нашёл библиотеки для SPIFlash с поддержкой почти всех возможных чипов: https://github.com/Marzogh/SPIFlash/releases/tag/v2.4.0

        Можно ли их как-то использовать с данным флешером?

        • admin

          К сожалению нет времени, но к счастью можно использовать) если сможете сделать — делитесь скетчем, все будут рады!

  31. Олег

    Здравия желаю!
    Скажите пожалуйста, можно ли данным способом залить дамп в FL127SIF10 ?
    .pdf —> http://www.cypress.com/file/177961/download
    Cпасибо.

  32. Рафаэль

    Прошил spi флэш winbond с матплаты принтера Canon. Пришлось повозиться т.к. в первый раз такое делаю )))
    Поскольку не знал как по другому подключиться — припаивался к каждой ноге отдельным проводком
    Соединять c Arduino Uno надо по следующей схеме
    2pin — CS
    11pin — MOSI
    12pin — MISO
    13pin — SCLK
    GND — GND
    3.3V — VCC
    Схему выходов (CS, MOSI, MISO и другие) на вашей флешке легко найти в интернете. У меня были так: левый ряд (где контрольная точка, от нее) сверху вниз: CS, MISO, VCC, GND, правый ряд (который без точки) сверху вниз: VCC, VCC, SCLK, MOSI.
    Важная особенность — если ноги слишком длинные, то либо не считывает либо считывает но с ошибками. Проверял после заливки скачиванием залитого фуллфлеш и проверкой контрольной суммы с исходным файлом. Когда проводки были слишком длинные — дампы не совпадали. Остановился на 15 см длине проводов, так все работает стабильно.

    • Victory

      Рафаель добрый вечер. Вы бы не могли мне на почту сбросить фотку или от руки зарисуйте схему подключения spi k arduino uno и какой вы использовали скэч для загрузки в ардуино? заранее благодарен. victory-sokolovsky@mail.ru

  33. Artur

    Проверил на Arduino Nano через ISP порт (6 пиновый). Читал 25P16VG (208mil). Все считалось без проблем.
    Сначала не понял как сохранять… Потом просто добавит .hex прошивка скачалась. Спасибо.

  34. Дмитрий Макаров

    Сначала было подумал не работает. Отлично работает! pm25ld010 .SPI. 1мбит
    Сразу не заработало, потом работало через раз. Проблема оказалось в подключении. Сделал провода как можно короче (4-5 см)[по совету из другого форума] и конденсатор (222К 1 KV, быо под рукой) прямо у ног флешки (между vcc , gnd) arduino pro mini 16к, 5в. Через uart прошиватель про, в режиме 3.3в. Без каких либо поправок в скетче, и exe программы из статьи. Спасибо автору.

    • Здравствуйте Дмитрий Макаров! У меня тоже arduino pro mini 16k, 5v и uart pro, при загрузке скетча пишет ошибка компиляции, flash W25Q32vb и файл SpiEepromFlasher при открытии пишет приложение не win32, установлена XP32bit. Не могли бы Вы написать подробнее последовательность действий с ардуино, и как запустить файл SpiEepromFlasher.exe. Спасибо. dmi-roman@yandex.ru

  35. mdrs

    Arduino Nano V3 (Кытай) — mx25l8005 без проблем прошиваются.

  36. Виталий

    Спасибо автору за труд!
    По работе часто прошиваю spi флеши. Ремонтирую ноутбуки. Приказал долго жить программатор. Ваше решение спасло.
    Но . 4 мегабайтная флеш шьется минут 15. Нельзя ли увеличить скорость?
    Спасибо !

    • admin

      На новых ардуинах можно, но тогда не будет совместимости со старыми дешевыми нано и уно

  37. SpiEepromFlasher не открывает winXP пишет файл не является приложением win32, только этот файл.

  38. Здравствуйте! Подскажите пожалуйста, файл SpiEepromFlasher в winXP не открывает этот файл пишет приложение не win32,в чем может быть проблема. Не открывает только этот файл, антивирус не ругается.

  39. Алексей

    Всем привет!

    Хотел прошить Winbond 25Q128BVFG используя Arduino Duemilanove (пины изменил на другие согласно документации Arduino SPI) и столкнулся со странной проблемой — программа после запуска считывает только Device ID и после этого зависает. Никаких считываний с флешки не происходит согласно светодиодам.

    В то же время через com-порт если вручную команды кидать, то ардуино откликается, так же выдает девайс ID, можно запросить прочитать байты из флешки и т.д. Т.е. похоже на нормальную работу самой ардуины.

    ОС у меня — Win7x64. В чем тут может быть проблема?

    • admin

      Надо пробовать отладить сам прошивальщик из визуал студио. Если интересно попробуйте отладить консольную версию. Если получится выкладывайте сюда))

  40. Возможно ли этим программатором шить EEPROM микросхемы? 24LC32A к примеру?

  41. Руслан

    спасибо. получилось с первого раза. использовал Уно.
    а микросхему 25l8000 даже не выпаивал с платы. приподнял первую ножку (cs) и провода припаял прям на плату. питание брал с Уно 3.3В.

  42. Руслан

    СПАСИБО! УСПЕХОВ ТЕБЕ АВТОР!
    После неудачной прошивки MSI 760G-P43 образовался кирпич.
    Взял ARDUINO UNO на ch340 от ROBOTDYN подключил к разъему JSPI1 питание взял с уны. Проводки по 10 см. Сама микруха на плате 25q16 на 2 мегабайта. Батарейку не вынимал, плту полностью отключил, проц память снял. Прошил с первого раза, сразу запустилась.
    Автор еще раз СПАСИБО, удачи в твоем не легком деле.

  43. Юрий

    спасибо за чудо-программатор!
    с китайской нано в3 не заработала программа. программа зависла. в мониторе порта вообще ничего не писалось.
    на уно сделал те же манипуляции и все получилось.

  44. сергей

    можно ли им прошить m25px80?

  45. Александр

    Приветствую вас форумчане !!! Собрал это чуда на Uno r3 от ROBOTDYN )) Программатор запустился )) Но при попытке считать микруху (pm25LD010) пишет нули и ID:0 . У кого какие есть соображения ???

    • Александр

      В дополнение : думал что скисла флеша купил новую … результат тот же )))

  46. Николай

    Всем привет.
    Респект и уважуха автору. Всё прекрасно работает. Получилось проапгрейдить D-link DIR-615 E4 на 16 Mb.
    Хочу поделиться своими трудностями и найденным решением.
    Под рукой оказалась только кетайская Arduino UNO R3 Mega 328P-AU на CH340G — программатор её не видел, белый экран, эха c COM-порта не обнаружено и это несмотря на то что скетч залился нормально.
    Сначала грешил на длину проводов/какчество пайки, но погуглив чуток нашёл что кетайские товарищи в эту ардуину на линии RX и TX зачем-то залепили резисторы по 1 килоому, заменил их на 220 Ом и «о чудо» — всё заработало.
    Может это поможет кому ещё.
    Автору спасибо.

Добавить комментарий