Началось всё с неудачной попытки обновления BIOS (UEFI). Дело в том, что изначально была зашита кастомизированная версия от OEM-вендора, а я решил залить более свежую оригинальную. При этом я, конечно, получил сообщение о несоответствии подписи, но оно мне показалось недостаточно грозным, и я его проигнорировал. После обновления UEFI (и до обновления ME) компьютер перезагрузился. ME проверил подпись UEFI, удостоверился, что ключ неправильный, и на этом всё закончилось. Кирпич.
Для исправления содеянного я разжился дешёвеньким SPI-программатором CH341A, для работы с которым использовал flashrom 0.9.9 (более старые версии про такой программатор не знают). BIOS оказался зашит на классическую SPI-флешку 25 серии, а именно Macronix MX25L6436E, с которой у flashrom проблем нет.
Поскольку на материнках MSI есть разъём JSPI1, старая 9-пиновая версия которого описана тут, я надеялся, что проблем с перепрошивкой не будет. Вообще этот разъём предназначен несколько для другой цели: к нему подключается сервисная плата, на которую ставится чип, куда залит правильный BIOS, после чего с него выполняется загрузка и перепрошивается распаянный на плате чип. Разумеется, сервисной платы у меня не было, поэтому я рассчитывал просто получить через разъём доступ к флешке и прошить её программатором. Дело осложнялось тем, что у разъёма довольно редко встречающийся шаг между штырьками — 2 мм, так что пришлось вслед за программатором заказывать у китайцев ещё и соответствующий шлейф. Увы, это мне всё равно не принесло успеха.
На данной материнке (и, как я понимаю, на всех современных от MSI) используется "модернизированная" версия разъёма, 11-пиновая. Принципиальное отличие в том, что контакт CS (chip select) флешки соединён с разъёмом не напрямую, а через трёхногий элемент с маркировкой "73H", который я идентифицировал как n-p-n транзистор (не факт, что правильно, и не факт, что я правильно определил его распиновку). Коллектор(?) транзистора соединён с CS флешки, эмиттер(?) — с 5 ножкой разъёма JSPI1, а база(?) — с 9 ножкой. В целом же распиновка разъёма такая:
Код: Выделить всё
1 VCC | 2 ?
3 MISO | 4 MOSI
5 CS (E?) | 6 CLK
7 GND | 8 GND
9 CS (B?) | 10 NC
11 WP | 12 HOLD
Следующим, уже третьим приобретением у братьев-китайцев была SOIC8-прищепка, с помощью которой я подключил программатор к чипу напрямую (слегка погнув при этом одну ножку расположенного рядом злополучного JSPI1). И тут обнаружилась ещё одна хитрость: flashrom не видит флешку и при таком подключении до тех пор, пока на плату не подано дежурное напряжение. То есть надо подключить к ней блок питания, который в свою очередь подключить к сети, и только после этого флешка обнаруживается.
Вот такие команды нужны для работы с программатором (выполнять следует от рута, потому что flashrom общается с программатором по USB напрямую):
flashrom -VVV -p ch341a_spi -c MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E — поиск флешки (только для проверки работоспособности подключения к оной)
flashrom -V -p ch341a_spi -c MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E -r broken.rom — сохранение содержимого флешки в файл broken.rom (на всякий случай)
flashrom -V -p ch341a_spi -c MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E -w 7846v19/E7846IMS.190 — прошивка содержимого файла 7846v19/E7846IMS.190 на флешку
Поскольку при таком методе содержимое флешки переписывается разом — и UEFI, и ME — можно безбоязненно использовать прошивку от MSI.
P. S. В процессе мытарств обнаружил, что весьма распространено заблуждение, якобы разъём MOSI программатора надо подключать к разъёму MISO флешки, а MISO программатора — к MOSI флешки. Это не так! Правильно — MOSI к MOSI, MISO к MISO. Такие мудрёные (master out slave in и master in slave out) обозначения специально были придуманы, чтобы избежать путаницы, имеющей место у симметричных интерфейсов типа UART, где Tx одной стороны подключается к Rx другой.