Использование Pinboard II как SPI программатора BIOS материнcких плат

Понадобился программатор USB -> SPI. Решил делать на основе FT2232D c Pinboard II rev. 1.

Сначала разобрался как подключена плашка для внутрисхемного програмирования (ISP) AVR (слева).
Разводка разьемов соответствует рекомендациям Atmel. Справа наиболее употребительные в инете. Совпадают.



У Pinboard II rev. 2 разводка та же, отсутствует 6-pin разьем.
Плашка предназначена для программы Avrdude, которая при прошивке через FT2232 использует режим синхронного битбанга. Но мне не хотелось использовать битбанг, скорость маловата.
Возможность использования чипа FTDI FT2232D как преобразователя протоколов USB -> SPI описана в даташите.
Для этого в нем реализован режим MPSSE (AN135, Multi-Protocol Synchronous Serial Engine).



Этот режим доступен только на канале А. В режиме MPSSE аппаратная конфигурация выводов жестко задана, переназначить их нельзя.
Работа в режиме MPSSE не требует прошивки конфигурационных данных в EEPROM чипа, все можно сделать через драйвер (как и в режиме битбанга).
Теперь смотрим что нам надо (слева), за основу взят стандарт разьема SPI програмирования BIOS материнских плат фирм ASUS и MSI (справа).



Если вы решите работать с шиной SPI на програмном уровне самостоятельно, есть два варианта:
  • Непосредственно через драйвер D2XX. В этом случае необходимо производить ручное программирование режима MPSSE в соответствии с набором команд, описанных в AN108. Вся работа идет через функции FT_Read() и FT_Write(), а также сопутствующие функции открытия/закрытия устройства и т.п.
  • С использованием библиотеки LibMPSSE-SPI (AN178). Данная библиотека решает все вопросы программирования режима MPSSE и позволяет производить операции чтения и записи указанного числа байт по шине SPI с использованием вызовов SPI_Write() и SPI_Read(). Для управления остальными пинами можно использовать FT_WriteGPIO и FT_ReadGPIO.
Я не стал так заморачиваться и нашел готовую программу. Мощной многофункциональной программой, поддерживающей режим MPSSE, является FlashRom. Программа чисто консольная, т. к. была написана под Linux, затем портирована под DOS и Windows.

Особенности программы (Linux версия, перевод):
  • 300 семейств чипов flash ROM а также их варианты;
  • 220 поддерживаемых чипсетов;
  • 401 поддерживаемых материнских плат;
  • Parallel, LPC, FWH и SPI интерфейсы;
  • Поддержка прошивки на плате и внешних программаторов;
  • Поддерживаются чипы в любых корпусах. DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40, TSOP48 и других;
  • Специальный код включения прошивки для нестандартных материнских плат;
  • 50 PCI устройства, 9 USB, 1 параллельное устройство и все программаторы основанные на последовательном интерфейсе могут быть перепрошиты или использованы для перепрошивки;
  • Нет необходимости в физическом доступе. Доступа администратора достаточно для поддержки встроенных и PCI программаторов, прав пользователя достаточно для USB и основанных на последовательном интерфейсе программаторов;
  • Не нужны загрузочные дискеты, CD-ROM или флешки;
  • Не нужна клавиатура или монитор. Можно перепрошивать через SSH;
  • Не нужна перезагрузка. Можно перепрошить ROM в запущенной системе, проверить правильность записи. Новый BIOS будет доступен в следующий раз;
  • «Горячая» перепрошивка;
  • Возможность использования в скриптах;
  • Скорость. flashrom намного быстрее чем программы от производителя;
  • Поддержка Linux, FreeBSD, NetBSD, DragonFly BSD, Nexenta, Solaris, Mac OS X и DOS, частичная поддержка Windows (нет встроенных/PCI программаторов);
Как видно из описания программа очень функциональна, входит в репозитории многих популярных сборок Linux. На английском есть хелпы, вот под Ubuntu. Доступны полные исходники. К сожалению под Windows работает только частично. Но нам нужна только ее возможность работы с «300 семейств чипов flash ROM» и «SPI интерфейс». Возможность программы работать через «220 поддерживаемых чипсетов» на «401 поддерживаемых материнских плат» и «Parallel, LPC, FWH интерфейсы» здесь не востребованы.
Версию для Windows можно собрать как самостоятельно, есть руководство, так и скачать отсюда. В архиве 4 файла:
  • VERSION;
  • flashrom.exe — исполняемый файл под Windows;
  • libftdi.dll — библиотека от FTDI;
  • libusb0_x86.dll или libusb0_x64.dll — библиотека от FTDI;
Для корректной работы файл libusb0_x86(_x64).dll необходимо переименовать в libusb0.dll.
Последние версии программы FlashROM поддерживают ключ -p ft2232_spi для использования FTDI FT2232/FT4232H/FT232H чипов как внешнего SPI программатора. По команде >flashrom.exe -h (--help) программа выведет синтаксис требуемых ключей и параметров.

Update

Специальный разьем не изготавливал. Соединял проводочками ~ 20см разьем BIOS и гребенку FTDI. Между CPU_POWER и MISO включен резистор 6,8к для подтяжки. Питание брал с FTDI. Чтобы напряжение CPU_POWER было 3,3В в разьем контроллера ставил модуль STM32. Сама компьютерная материнка на время прошивки была обесточена.

  • +1
  • 12 января 2015, 21:14
  • anakost

Комментарии (23)

RSS свернуть / развернуть
SPI шью этим — пусть и не быстро, но дешево и сердито, за что спасибо автору!
0
Не нужна клавиатура или монитор. Можно перепрошивать через SSH.
Нет необходимости в физическом доступе
Интересно узнать технологию программирования БИОСА компьютера не имея физического доступа к нему и средств ввода командной строки и обратной связи в виде монитора :)
Будет видеопрезентазия бесконтактного безклавиатурно-безмониторного «использования Pinboard II как SPI программатора BIOS материнcких плат»?
Pinboard в качестве суперкибероружия?
Или автор имел ввиду иное?
Чем не устраивают фирменные программы обновления прошивки с сайта производителя матери?
Китайцы продают USB программаторы IIC 24 EEPROM и 25 SPI FLASH на своём CH341 по 240 р(2015) с ZIF панелькой под контактный переходник
0
Интересно узнать технологию программирования БИОСА компьютера не имея физического доступа к нему и средств ввода командной строки и обратной связи в виде монитора :)
Ну, там же явно написано: Можно перепрошивать через SSH.
0
По работе FlashRom под Windows не всё так просто. Надо специальные драйвера. Плотно занимаясь программированием FlashRom под Windows нашел удобную утулиту zadig для переключения драйверов FTDI.

Еще интересует практическая сторона. Получилось ли шить через спец разъём? Какой алгоритм? Подавать питание на мат.плату включив её? Подовать отдельно 3.3V на матплату (если так, то какой ток? Ведь там много чего на нем сидит. Не опасно ли?) Нужны ли какие подтяжки?
0
Подавать питание на мат.плату включив её? Подовать отдельно 3.3V на матплату (если так, то какой ток? Ведь там много чего на нем сидит. Не опасно ли?)
Микростаровскую мать шил через разъем. Пока 3,3 внешних (3 батарейки 1,5 и стабилизатор на 3,3) не подал, и читаться, и шиться отказывалась. На мать питание, ЕМНИП, не подавал. Шил программатором SPI TT через LPT-порт.
0
Пока специальный разьем не изготавливал. Соединял проводочками ~ 20см разьем BIOS и гребенку FTDI. Питание брал с FTDI.
Чтобы CPU_POVER была 3,3В в процессорный разьем ставил модуль STM32. Сама материнка на время прошивки была обесточена.
0
Про подтяжку забыл, между VCC и MISO включен резистор 6,8к. Нужен ли нет не знаю, впаял по совету когда делал шнуры.
0
Добавь это в статью.
0
Добавил.
0
Заинтересовала программа FlashRom, но пока её не запускал. Но где можно увидеть принципиальные схемы подключения FT2232D к микросхем БИОС? Интересуют также Parallel, LPC, FWH интерфейсы.
0
  • avatar
  • Aneg
  • 16 января 2015, 17:35
У разных производителей распиновки SPI разьемов для перепрошивки отличаются. Где искать? По хорошему распиновка должна быть в паспорте или на сайте изготовителя. Должна быть… В инете попадаются, вот некоторые:


0
Вдогонку… Вот для Parallel интерфейса
0
anakost, а ты можешь описать как запустить программу FlashRom в Linux, для тех кто никогда не работал с Linux. Вот например я запустил Линукс с загрузочной флешки и что дальше?
0
К сожалению Aneg профессионально не работал в Linux с 1998 года. Периодически интересуюсь новостями по старой памяти. И все.
0
А под чем ты запускаешь FlashRom?
0
Windows 7 x32
0
P.S. Если вы установили программу из дистрибутива через официальный инсталятор, или тем паче с официального репозитория, программа будет полностью функциональной. Загрузочная флешка или CD ROM Live предназначены только для ознакомления, без опыта работать в них не выйдет. ИМХО.
0
Загрузочная флешка или CD ROM Live предназначены только для ознакомления, без опыта работать в них не выйдет.
Можно для ознакомления.
Но без опыта — нельзя.
Тут какой-то парадокс.
Или мне кажется?
0
Нет никакого парадокса. Загрузились с флешки, открыли книжку, изучаем систему команд и повторяем учебные примеры.
Если есть опыт, чиним файловую (и не только) систему на винте. Или прошиваем флешку.
0
Microsoft совместно с Canonical интегрировала в Windows 10 практически полноценную ОС Ubuntu. Пока только в сборках Windows Insider, но обещают скоро и в обычную Win10 выпустить это обновлением.
При этом появится возможность вместе/вместо CMD запустить и BASH, полный доступ к огромному репозиторию Ubuntu и т.д.
В общем обещано много, что получится посмотрим…
0
Недержание это беда…
Надо напоминать, ваш пост вообще не в тему?
0
как бы в тему, он говорит что надо делать, если нет пинборда.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.