При попытке прошить микросхему Winbond W25Q64FV или MX25L12835F через программатор CH341A вы получаете ошибку chip is not detected или content mismatch, хотя чип исправен. Причина чаще всего кроется не в самом адаптере, а в несоответствии размера загружаемого файла объему микросхемы. Материнские платы и ноутбуки используют дампы BIOS, которые по размеру меньше полного объема чипа, и перед записью такой файл необходимо правильно обрезать или дополнить до нужного размера.
Процедура обрезки дампа требуется, когда вы скачали прошивку с сайта производителя в формате .rom, .bin или .fd, а программатор отказывается ее записывать из-за несовпадения размера. В этой инструкции разберем, как определить реальный размер чипа, как обрезать биос до нужного объема и почему нельзя записывать файл «как есть».
Определение размера микросхемы и дампа
Перед тем как обрезать биос, вам нужно точно знать объем микросхемы памяти. Маркировка на корпусе содержит эту информацию: W25Q64 означает 8 МБ (64 Мбит), W25Q128 — 16 МБ (128 Мбит), MX25L25635F — 32 МБ. Но сам дамп, который вы скачали с сайта производителя, может занимать только часть этого объема — например, 6 МБ или 12 МБ.
Программатор CH341A в большинстве случаев требует файл, размер которого точно совпадает с объемом чипа. Если файл меньше — он дополняется нулями до нужного размера, если больше — запись прерывается ошибкой. Проблема в том, что «сырой» дамп с официального сайта часто содержит служебные заголовки или области, которые не относятся к коду BIOS.
Проверьте размер скачанного файла через свойства в проводнике Windows или командой ls -l файл.rom в Linux. Если размер файла меньше объема чипа — его нужно дополнить, если больше — обрезать. В большинстве случаев для ноутбуков Lenovo и HP требуется именно обрезка до размера 8 МБ или 16 МБ.
⚠️ Внимание: никогда не записывайте дамп, размер которого превышает объем микросхемы. Программатор может повредить чип или записать данные в несуществующие ячейки, после чего устройство перестанет запускаться.
Инструменты для обрезки BIOS
Для обрезки дампа подойдет любой hex-редактор, но лучший результат дают специализированные утилиты. Самые популярные — HxD для Windows и hexedit для Linux. Они позволяют выделить нужный фрагмент и сохранить его отдельным файлом без изменения исходных данных.
- 🛠 HxD — бесплатный hex-редактор для Windows, поддерживает работу с файлами до 8 ГБ, умеет удалять и вставлять блоки данных.
- 🛠 hexedit — консольная утилита для Linux, работает с любыми файлами, управление через горячие клавиши.
- 🛠 UEFITool — программа для анализа структуры UEFI-прошивок, позволяет извлечь нужные разделы без ручной обрезки.
Если вы не хотите разбираться с hex-редакторами, можно использовать скрипт на Python, который автоматически обрежет файл до нужного размера. Для этого понадобится установленный интерпретатор и базовые знания командной строки.
python -c "
import sys
with open('bios.bin', 'rb') as f:
data = f.read()
with open('bios_8mb.bin', 'wb') as f:
f.write(data[:8388608])
"
Этот скрипт обрежет файл до 8 МБ (8388608 байт). Для 16 МБ замените число на 16777216. Убедитесь, что исходный файл больше целевого размера, иначе скрипт вернет ошибку.
Пошаговая инструкция обрезки в HxD
Скачайте и установите HxD с официального сайта, затем откройте ваш дамп через меню File → Open. Внизу окна отобразится размер файла в байтах — запишите это значение. Если размер превышает объем чипа, переходите к обрезке.
Нажмите Ctrl+Home, чтобы перейти в начало файла. Затем нажмите Ctrl+G для перехода к адресу — введите значение, равное объему чипа минус один байт. Для 8 МБ это 7FFFFF, для 16 МБ — FFFFFF. После перехода выделите весь блок от начала до текущей позиции через Ctrl+Shift+Home.
Скопируйте выделенный фрагмент в новый файл: Ctrl+C, затем File → New и Ctrl+V. Сохраните результат через File → Save As с расширением .bin. Теперь файл имеет правильный размер и готов к записи.
☑️ Чек-лист перед записью дампа
⚠️ Внимание: перед обрезкой всегда сохраняйте оригинальный дамп в отдельную папку. Если после прошивки устройство не запустится, вы сможете восстановить исходный файл.
Вычисление контрольной суммы после обрезки
После обрезки дампа необходимо проверить контрольную сумму, чтобы убедиться в целостности данных. Для большинства материнских плат используется алгоритм CRC32 или SHA-256. Программатор CH341A при записи автоматически проверяет файл, но лучше перестраховаться.
Используйте утилиту certutil в Windows или sha256sum в Linux для вычисления хеша. Сравните полученное значение с контрольной суммой, указанной на сайте производителя. Если суммы не совпадают — файл поврежден или обрезан неправильно.
| Размер чипа | Объем в байтах | Hex-адрес конца | Типовая модель |
|---|---|---|---|
| 4 МБ | 4194304 | 3FFFFF | W25Q32 |
| 8 МБ | 8388608 | 7FFFFF | W25Q64 |
| 16 МБ | 16777216 | FFFFFF | W25Q128 |
| 32 МБ | 33554432 | 1FFFFFF | MX25L25635F |
Для дампов UEFI контрольная сумма часто хранится в самом файле в области Firmware Volume. Если вы обрежете файл неправильно, материнская плата выдаст ошибку Invalid BIOS Image при попытке загрузки. В этом случае проверьте структуру дампа через UEFITool.
Как работает UEFITool
UEFITool позволяет открыть дамп и увидеть все разделы — PEI, DXE, NVRAM, переменные. Если вы обрезали файл, но структура нарушена, утилита покажет ошибки в логах. Для корректной обрезки используйте функцию Extract для нужного раздела вместо ручного удаления байтов.
Типичные ошибки при обрезке дампа
Самая распространенная ошибка — обрезка файла не с того конца. Дамп BIOS имеет строгую структуру: код загрузчика находится в начале, а области NVRAM и настройки — в конце. Если вы обрежете файл с конца, потеряете критические данные, и устройство не запустится.
Вторая ошибка — попытка записать файл большего размера на чип меньшего объема. Например, дамп на 16 МБ на микросхему W25Q64 (8 МБ). Программатор либо откажется работать, либо запишет только первые 8 МБ, что приведет к неработоспособной прошивке.
Третья ошибка — игнорирование смещения. Некоторые производители, особенно Dell и HP, добавляют в начало дампа заголовок размером 64 КБ или 256 КБ, который не относится к BIOS. В этом случае нужно не просто обрезать файл, а удалить весь заголовок и сдвинуть данные к началу.
⚠️ Внимание: если после обрезки и прошивки ноутбук включается, но не показывает изображение, проверьте, не удалили ли вы область GOP Driver (Graphics Output Protocol). Она отвечает за инициализацию видеокарты и находится в конце дампа.
Особенности обрезки для ноутбуков и материнских плат
Ноутбуки Lenovo серии IdeaPad и ThinkPad используют дампы с 16-мегабайтной микросхемой, но фактический размер прошивки составляет 12 МБ или 14 МБ. В этом случае обрезка не требуется — файл нужно дополнить нулями до 16 МБ. В противном случае программатор запишет данные со смещением, и BIOS не загрузится.
Для материнских плат ASUS и Gigabyte ситуация обратная: скачанный с сайта файл часто содержит область ME Region (Management Engine), которая не используется при прошивке через программатор. Ее необходимо удалить, уменьшив размер файла до 8 МБ. Игнорирование этого правила приводит к ошибке ME corrupted при загрузке.
Универсального алгоритма обрезки для всех производителей не существует. Перед записью изучите структуру дампа через UEFITool и определите, какие разделы являются обязательными. Если вы сомневаетесь в своих действиях, используйте готовые дампы с проверенных форумов, например badcaps.net или forum.notebookreview.com.
Автоматизация процесса обрезки
Для массовой обрезки или работы с большим количеством файлов используйте скрипты на Python или Bash. Простой скрипт на Python может обрезать файл до нужного размера за секунду, а также автоматически вычислить контрольную сумму.
import hashlib
import sys
def trim_bios(input_file, output_file, target_size):
with open(input_file, 'rb') as f:
data = f.read()
if len(data) < target_size:
data = data.ljust(target_size, b'\x00')
else:
data = data[:target_size]
with open(output_file, 'wb') as f:
f.write(data)
print(f"CRC32: {hashlib.crc32(data):08X}")
if __name__ == '__main__':
trim_bios('bios.bin', 'bios_trimmed.bin', 8388608)
Этот скрипт автоматически дополнит файл нулями, если он меньше 8 МБ, или обрежет, если больше. После выполнения вы увидите контрольную сумму CRC32, которую можно сравнить с ожидаемой.
Для пользователей Linux подойдет однострочная команда dd, которая обрезает файл до нужного размера: dd if=bios.bin of=bios_8mb.bin bs=1M count=8. Однако этот способ не позволяет дополнить файл нулями, поэтому для маленьких дампов используйте truncate -s 8M bios_8mb.bin.
Частые вопросы
Что делать, если файл BIOS меньше объема микросхемы?
Дополните файл нулями до нужного размера. В HxD откройте файл, нажмите Ctrl+End, затем Ctrl+Shift+End для выделения от конца до конца файла, вставьте нулевые байты через Edit → Insert и укажите нужное количество. Либо используйте скрипт на Python из предыдущего раздела.
Можно ли обрезать BIOS без hex-редактора?
Да, используйте онлайн-сервисы или утилиту UEFITool. Но помните, что онлайн-сервисы могут исказить данные или добавить вирусы. Лучше работать локально через установленные программы.
Почему после обрезки программатор пишет ошибку верификации?
Ошибка верификации возникает, когда записанные данные не совпадают с файлом. Причины: неправильная обрезка (сдвиг данных), повреждение файла при сохранении или неисправность микросхемы. Проверьте контрольную сумму файла и повторите запись с пониженной скоростью.
Как узнать, какой размер файла нужен для конкретной модели?
Откройте оригинальный дамп, прочитанный с микросхемы, и посмотрите его размер в байтах. Скачанный файл должен иметь тот же размер после обрезки или дополнения. Если оригинального дампа нет, ищите информацию на форумах или в сервисной документации.