Чтение и запись флеш-памяти с помощью arduino на примере микросхемы 25l8005
Содержание:
- 1.2. Отличие микросхем SPI NAND от обычных (параллельных) микросхем NAND FLASH
- Программа SPIPGM
- Особенности программирования микросхем памяти Flash
- 2.5. Чтение информации ONFI
- License [CC0][http://creativecommons.org/publicdomain/zero/1.0/]
- Flashing a 16MB wr703n Flash chip
- Flashing iCE40HX8K-EVB from Olimex
- Создание кнопок
- 1.1. Коротко об SPI NAND FLASH
- USB- накопитель EEPROM
- Устранение сбоев работы микроконтроллеров
- DIY: универсальные программы создания
- Выбор: SF & SD
- NOR
- Утилита для идентификации
- 2.4. Запись образа SPI NAND
- Источники информации
- Интерфейс SPI: историческая справка
- 3Чтение и запись ПЗУ с помощью программатора CH341A
- 1Обзор программатораCH341A
1.2. Отличие микросхем SPI NAND от обычных (параллельных) микросхем NAND FLASH
Основное отличие заключается в том, что SPI NAND используют последовательный (serial) аппаратный интерфейс стандарта SPI (Serial Peripheral Interface).
Использование SPI дает ряд преимуществ:
- Позволяет сделать корпус микросхем более компактным;
- Позволяет использовать меньшее
количество сигналов для управления микросхемой (4 против минимум 13 у параллельных NAND).
Однако SPI интерфейс при прочих равных условиях более медленный, поэтому микросхемы будут читаться и писаться несколько медленнее, чем традиционные NAND.
Все остальные особенности SPI NAND (логическая организация, управление плохими блоками и исправление ошибок) идентичны используемым у параллельных NAND и подробно рассмотрены в основной статье. Единственное отличие лишь в том, что в SPI NAND более широко используется механизм встроенного вычисления ECC кодов и исправления ошибок сразу внутри микросхемы. По этому признаку SPI NAND относятся к категории Managed NAND (управляемые NAND).
Главной особенностью логической организации SPI NAND является то, что большинство из них поддерживают встроенную генерацию кодов исправления ошибок (ECC) при записи и автоматическое исправление ошибок при чтении:
- Коды ECC вычисляются непосредственно перед записью страницы;
- Корректировка происходит сразу после считывания страницы;
- Коды ЕСС записываются в определенное место SPARE области страницы;
- Коды ECC вычисляются для всей области данных страницы, но только для некоторой части SPARE области;
- Разметка SPARE области для разных микросхем разная;
- Вычисление ECC у большинства микросхем можно временно отключить;
- У некоторых микросхем часть области SPARE, в которой сохраняются коды ECC, недоступна для пользователя;
- У некоторых микросхем при включении или выключении внутреннего вычисления ЕСС изменяется размер SPARE области;
Все вышеописанное скорее усложняет, чем упрощает, работу тем, кто занимается ремонтом аппаратуры и заранее не знает, каким образом и в каком режиме ECC используется микросхема в аппаратуре.
Программа 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 /<команда>
Основные команды:
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 разъем, либо напрямую, любой поддерживаемой микросхемы.
Особенности программирования микросхем памяти Flash
- Программатор для I2C
- Программатор для NAND
- Программатор для DataFlash
Особенности программирования FLASH микросхем:
- Большинство микросхем памяти типа флеш для программирования требуют небольших токов, только одного напряжения питания от 3 до 5 вольт и одного напряжения программирования, как правило, 12 вольт.
- Микросхемы флэш имеют простые алгоритмы записи и верификации и поддерживаются многими программаторами.
- Микросхемы параллельной флеш-памяти могут записываться побайтно (большинство микросхем серий 29F, 39F, 49F) или сразу страницами (микросхемы серии 29С). Программирование страницами происходит значительно быстрее. Скорость программирования паралельной флеш-памяти больше определяется особенностями алгоритма программирования конкретной микросхемы и меньше зависит от быстродействия программатора, чем чтение. Например: скорось записи микросхемы AM29LV160DB на самом быстром программаторе ChipStar-TAU всего в четыре раза быстрее, чем на самом медленном ChipStar-Lynx. Однако разница в скорости чтения между ними уже более чем десятикратная.
2.5. Чтение информации ONFI
SPI NAND, как и параллельные (обычные) микросхемы NAND, поддерживают считывание таблиц конфигурации устройства в соответствии со спецификацией ONFI (Open Nand Flash Interface):
В отличие от паралельных NAND у SPI NAND с поддержкой ONFI дела обстоят значительно лучше. Все известные нам микросхемы поддерживают ONFI.
На рисунке выше значение «ширина шины данных» (data bus) в отчете ONFI указывается как 8 бит, хотя, как известно, SPI интерфейс однобитный. В этом нет ничего странного: здесь имеется в виду организация памяти по восемь бит. Также в отчете ONFI указано требование к внешнему алгоритму ECC исправлять 0 ошибок (исправлять не требуется). Однако внутренний алгоритм исправляет до 8 ошибок, поэтому при выключенном внутреннем ECC внешний алгоритм просто обязан исправлять те же восемь ошибок. Поэтому в базе данных программатора прописано именно «8» и это не является ошибкой.
License [CC0][http://creativecommons.org/publicdomain/zero/1.0/]
To the extent possible under law, the authors below have waived all copyright and related or neighboring rights to spi-flash-programmer.
- Leonardo Goncalves
- Nicholas FitzRoy-Dale, United Kingdom
- Tobias Faller, Germany
Flashing a 16MB wr703n Flash chip
I used this to write a 16MB flash chip for the wr703n router running OpenWRT. Recent versions of OpenWRT detect the larger Flash and automatically use it, so you don’t need to do any patching. U-Boot still thinks the chip is 4MB large, but Linux doesn’t seem to care. So all you need to do is copy the image and write the ART (wireless firmware) partition to the right spot, which is right at the end of Flash.
I guess if you do a system upgrade which puts the kernel image somewhere after the first 4MB you might be in trouble, so upgrade u-boot before doing that.
-
Connect the original chip and dump it:
python3 spi_flash_programmer_client.py -s 4096 -f wr703n.orig.bin read
-
Connect the new chip and write it:
python3 spi_flash_programmer_client.py -s 4096 -f wr703n.orig.bin write
-
Verify the write.
python3 spi_flash_programmer_client.py -s 4096 -f wr703n.orig.bin verify
-
Write the ART partition to the final 64k of the chip (the magic numbers are 16M-64K and 4M-64K respectively).
python3 spi_flash_programmer_client.py -f wr703n.orig.bin —flash-offset 16711680 —file-offset 4128768 write
-
Verify the ART partition.
python3 spi_flash_programmer_client.py -f wr703n.orig.bin —flash-offset 16711680 —file-offset 4128768 verify
-
Solder the new chip in.
If you try this, let me know!
Flashing iCE40HX8K-EVB from Olimex
This example uses the OLIMEXINO-32U4 to flash a Olimex iCE40HX8K-EVB. The steps should also work with a iCE40HX1K-EVB.
The board is connected using the UEXT connector.
# Set iCE40-CRESET LOW - PIN 0x2 > python3 spi_flash_programmer_client.py -d COM1 --io 0x2 --value 0x0 set-output # Set CS/SS to PIN 13/0xd > python3 spi_flash_programmer_client.py -d COM1 --io 0xd set-cs-io # power cycle the EVB, check if ID register is readable > python3 spi_flash_programmer_client.py -d COM1 id-register # program the bitmap > python3 spi_flash_programmer_client.py -d COM1 -l -1 --pad 0xff -f toplevel_bitmap.bin write
Создание кнопок
Кнопка представляет собой четырехкадровый интерактивный мувиклип. Когда мы присваиваем
символу тип «Кнопка», Flash создает для нового символа монтажную линейку из
четырех кадров:
• Up-состояние это кадр, соответствующий ситуации, когда кнопка не нажата
и указатель мыши расположен не над кнопкой;
• Over-состояние кадр, иллюстрирующий вид кнопки, когда указатель мыши расположен
над кнопкой, но кнопка не нажата;
• Down-состояние данный кадр показывает вид кнопки при ее нажатии;
• Hit-состояние определяет область, в которой кнопка реагирует на щелчок мыши;
эту область в клипе не видно.
Чтобы создать кнопку, выполните команду Insert => New Symbol (можно набрать
сочетание клавиш Control+F8). В появившемся диалоговом окне Create New Symbol
введите имя символа-кнопки (например, but1) и выберите тип символа Button («Кнопка»).
Flash переключится в режим редактирования символа, предоставив кадры Up, Over,
Down и Hit. Первый кадр, Up, становится пустым ключевым кадром. Нарисуем в этом
кадре ненажатый вид кнопки (рис. 1).
Рис. 1. UP-кадр кнопки
Выделим второй кадр, помеченный как Over и соответствующий состоянию, когда
курсор занесен над кнопкой. Вставим в этом кадре ключевой фрейм (по команде
Insert => Keyframe ), в результате чего появится ключевой кадр, полностью
повторяющий содержание Up-кадра. Изменим цвет кнопки, как показано на рис. 2.
Рис 2. Over-кадр кнопки
Аналогично добавим следующий кадр (Down-кадр) и нарисуем нажатое состояние
кнопки (рис. 3).
Рис. 3. Down-кадр кнопки
В Hit-кадре пока не будем ничего рисовать, а вернемся к этому кадру чуть позже.
Перейдем к основной сцене, вызовем библиотеку по команде Window => Library
и создадим экземпляр символа кнопки путем перетаскивания его на сцену (рис.
4.)
Рис. 4. Создадим экземпляр кнопки, перетащив его из библиотеки
В результате получим следующий фильм. Как видно из данного фильма, надавливание
кнопки происходит не только тогда, когда мы нажимаем мышью на центральную (рабочую)
зону кнопки, но и при нажатии на рамку вокруг нее. Связано это с тем, что если
Hit-кадр не нарисован, то рабочая область кнопки будет соответствовать Up-кадру.
Для того чтобы нажатие кнопки происходило только в рабочей зоне, необходимо
в Hit-кадре определить эту зону, то есть нарисовать кнопку без рамки (см. рис.
5)
Рис. 5. Hit-кадр кнопки
После того как мы добавим необходимый Hit-кадр получим следующий фильм,
в котором при нажатии на рамку продавливания кнопки не происходит.
Чтобы сделать кнопку интерактивной, необходимо связать факт нажатия кнопки с
выполнением определенных команд, то есть описать определенный сценарий. Для
задания сценариев во Flash существует специальный язык Action Script. В данном
уроке мы затронем лишь незначительную часть возможностей этого языка, а в дальнейшем
будем возвращаться к структуре и синтаксису Action Script по мере усложнения
примеров создания интерактивных фильмов на Flash.
1.1. Коротко об SPI NAND FLASH
Микросхемы SPI NAND или Serial NAND являются разновидностью микросхем FLASH памяти типа NAND. Как и у всех подобных микросхем, их отличительными чертами являются:
- Очень большой объем памяти.
- Не гарантированное качество записи (возможно наличие ошибок).
- Микросхемы могут иметь плохие (сбойные) блоки.
- Размер страницы записи не является степенью 2.
- Запись в микросхему осуществляется только страницами, стирание — минимум блоками.
Подробно о классификации микросхем NAND, их видах, внутренней логической структуре подробно написано в нашей первой статье о NAND микросхемах. В этой статье мы больше коснемся особенностей SPI NAND (Serial NAND) и практической работы с ними.
USB- накопитель EEPROM
Программатор Spi Flash EEPROM серии 25 с программным обеспечением и поддержкой драйверов и 25-SPI флэш-память 8-контактный/16-контактный имеет следующие функциональные возможности:
- Автоматическая идентификация модели чипа 25 серия.
- Поддержка USB в TTL.
- Автоматическое определение чипа серии 25.
- Поддержка загрузки STC серии.
- Процедура однокристального микроконтроллера STC программатора Spi Flash ch341a поддерживает полный спектр загрузки программ для разнообразного ПО: резервного копирования, стирания, программирования, калибровки и других перемещений.
- Обеспечивает выход питания 5 В — 3,3 В.
- Размер: 70 мм х 27 мм
- CH341SER.EXE — самостоятельная установка архива с USB на последовательный драйвер.
Устранение сбоев работы микроконтроллеров
Когда пользователь начинает работать с микроконтроллерами, он, вероятно, столкнется с проблемами при программировании, на решение которых потребуются часы или дни, а иногда они просто неразрешимы. Опытные программисты поделились своими наработками устранения различных нарушений, вот некоторые из них:
- При любом сбое вначале проверяют блок питания. Иногда случается так, что источник питания не подходит к программатору и требуется внешний источник питания.
- Выбирают правильный последовательный порт в программном обеспечении.
- Прежде чем использовать программатор, необходимо установить драйверы, необходимые для его функционирования. Когда подключается программатор в первый раз, он автоматически устанавливает их, если есть соединение с интернетом, иногда потребуется указать расположение драйверов.
- Повышение напряжения. Многие микроконтроллеры требуют подтягивания в своей цепи, прежде чем могут быть запрограммированы, так микроконтроллер пикасе требует 10 кОм подтягивающего резистора на последовательном выводе, иначе показывает ошибку.
- Программное обеспечение для программирования не обнаруживает микроконтроллер — это опять-таки проблема с блоком питания, проверяют БП снова и подключают программатор к компьютеру.
После выполнения своими руками USB программатора Spi Flash пользователь получит SF, выполненную собственноручно для системного программирования. Она будет легко управляться компьютером через шину USB благодаря удобному интерфейсу и мощным функциями.
DIY: универсальные программы создания
Это лучший для микроконтроллеров PIC и AVR программатор Spi Flash, своими руками, может быть, его создать не получится, но устройство не дорогое, стоит меньше 10 $ и выполняется из легко доступных компонентов.
- Бесплатное ПО с открытым исходным кодом.
- Нет необходимости устанавливать дополнительные драйверы, использует драйвер H >
Основные три последовательных заголовка (J1, J2 и J3) используются для связи с ведомым устройством микроконтроллера. Использование выводов различно в разных микроконтроллерах. Переключатель сброса добавлен к блоку контроллера для установки сброса программатора. PIC18F2550 мигает с помощью шестнадцатеричного кода прошивки, можно использовать другие последовательные или параллельные программаторы Spi Flash PIC.
Он проверяет связь между микроконтроллером и ПК. Требуется провести тестирование HID-обнаружения (Human Interface Device), которое устранит много ошибок, таких как проблемы с микроконтроллером, кристаллами и USB. Перед началом использования программы убеждаются, что мигает светодиод LED, который затем замедляет процесс мигания. Если программатор не обнаружен, проверяют перекрестные соединения и инструкции. Если он обнаружен, переходят к следующему шагу.
Выбор: SF & SD
Существует множество причин для выбора дискретной флэш-микросхемы вместо подсистемы SD или, наоборот, поэтому пользователю необходимо выбирать компромиссы перед приобретением устройства. Приведенный ниже список содержит несколько аргументов, которые нужно знать, перед выбором DIP-чипа или полноценного SD-решения:
- Аппаратная сложность, преимущество имеет SF. DIP-пакет с дискретной флеш-микросхемой намного проще использовать, чем SD.
- Сложность программного обеспечения, преимущество имеет SF. Подсистема флэш-памяти SD обычно опирается на библиотеки SD Fat16/32. Хотя устройства являются интерфейсом SPI, имеет смысл использовать FAT, поскольку любой ПК/MAC может считывать карту. Эти библиотеки большие и могут занимать драгоценное пространство EEPROM на малых встроенных контроллерах.
- Емкость и портативность, преимущество имеет SD. Можно использовать SD-карту большей емкости в существующем дизайне без изменений. Дискретная SPI имеет более низкие пределы плотности.
- Стоимость, преимущество имеет SF.
- Мощность, преимущество имеет SF. SD-карты обычно имеют более высокую мощность утечки из-за более высокой плотности и высокой динамической мощности из-за скорости доступа.
- Скорость, преимущество имеет SD. SD-флэш-память поставляется во многих различных SKU, основанных на скорости в основном из-за требований цифровой фотографии и использования необработанных форматов изображений.
NOR
NOR Флеш память
Архитектура NOR получила название благодаря логической операции ИЛИ — НЕ (в переводе с английского NOR). Принцип логической операции NOR заключается в том, что она над несколькими операндами (данные, аргумент операции…) дает единичное значение, когда все операнды равны нулю, и нулевое значение во всех остальных операциях. В нашем случае под операндами подразумевается значение ячеек памяти, а значит в данной архитектуре единичное значение на битовой линии будет наблюдается только в том случае , когда значение всех ячеек, которые подключены к битовой линии, будут равны нулю (все транзисторы закрыты). В этой архитектуре хорошо организован произвольный доступ к памяти, но процесс записи и стирания данных выполняется относительно медленно. В процессе записи и стирания применяется метод инжекции горячих электронов. Ко всему прочему микросхема флеш-памяти с архитектурой NOR и размер ее ячейки получается большим, поэтому эта память плохо масштабируется.Флеш-память с архитектурой NOR как правило используют в устройствах для хранения программного кода. Это могут быть телефоны, КПК, BIOS системных плат…
Применение NOR-флеши, устройства энергонезависимой памяти относительно небольшого объёма, требующие быстрого доступа по случайным адресам и с гарантией отсутствия сбойных элементов:
- Встраиваемая память программ однокристальных микроконтроллеров. Типовые объёмы — от 1 кбайта до 1 Мбайта.
- Стандартные микросхемы ПЗУ произвольного доступа для работы вместе с микропроцессором.
- Специализированные микросхемы начальной загрузки компьютеров (POST и BIOS), процессоров ЦОС и программируемой логики. Типовые объёмы — единицы и десятки мегабайт.
- Микросхемы хранения среднего размера данных, например, DataFlash. Обычно снабжаются интерфейсом SPI и упаковываются в миниатюрные корпуса. Типовые объёмы — от сотен кбайт до технологического максимума.
Максимальное значение объёмов микросхем NOR — до 256 Мбайт.
Утилита для идентификации
Flashrom — это утилита для идентификации, чтения, записи, проверки и удаления флеш-чипов. Она предназначена для прошивки образов BIOS/EFI/coreboot/firmware/optionROM на материнских платах, картах контроллера сети/графики/хранения и на различных других устройствах программирования. Функциональные возможности:
- Поддерживает более 476 чипов флэш-памяти, 291 наборов микросхем, 500 материнских плат, 79 устройств PCI, 17 устройств USB и различные программаторы Spi Flash на основе параллельных/последовательных портов.
- Поддерживает параллельные интерфейсы, интерфейсы флэш-памяти LPC, FWH и SPI и различные пакеты микросхем (DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40, TSOP48, BGA и другие).
- Физический доступ не требуется, root-доступ достаточен или вообще не требуется для некоторых программаторов.
- Не требуется загрузочная дискета, CD-ROM или другой носитель.
- Клавиатура и мониторы не требуются, просто перепрошиваются удаленно через SSH.
- Не требуется мгновенная перезагрузка.
- Переписывают чип в работающей системе и проверяют его, новая прошивка будет работать при следующей загрузке.
- Доступна частичная поддержка Windows.
2.4. Запись образа SPI NAND
Рассмотрим несколько примеров. На рисунке ниже показано окно подтверждения начала записи с открытой закладкой ECC в случае, если форматы резервной области и исходного файла и микросхемы совпадают:
На следующем рисунке когда форматы резервной области и исходного файла также совпадают, но формат другой:
Ниже показан случай несовпадения разметки резервных областей:
В этом случае программа выдает предупреждение и блокирует попытку записи такой микросхемы, как заведомо неуспешную.
Попробуем записать файл в микросхему SPI NAND с включенным режимом внутренней генерации ECC. На рисунке ниже показан пример такой записи:
На левой части рисунка представлено окно редактора, которое соответствует тому, что мы писали в микросхему. На правой части отображается то, что было записано и считано в результате работы внутреннего алгоритма ECC.
- Основная область страницы в редакторе показана обычным шрифтом;
- Резервная (spare) область микросхемы показана тусклым шрифтом, место маркера плохого блока показано на оранжевом фоне;
- Резервная (spare) область микросхемы предназначенная для размещения ECC выделена светло-голубым фоном;
- Резервная (spare) область микросхемы заполненная кодами ECC (результат внутренней генерации ECC).
Хорошо видно, что часть страницы, предназначенная для ECC, была автоматически ими заполнена и записана. При этом исходное содержимое этой области полностью игнорируется.
Программное обеспечение программатора ChipStar знает о такой особенности этих микросхем и не выдает ошибок при верификации таких микросхем: все различия в области ECC будут учтены в отчете о верификации, но ошибка верификации выдана не будет. А вот при сравнении двух файлов эти области будут отмечены как ошибочные. Таким образом, можно гибко анализировать и сравнивать содержимое микросхем.
Источники информации
Электронные документы, доступные на сайтеdeveloper.intel.com.
1) Intel Low Pin Count (LPC) Interface Specification. Revision 1.1. Document
Number 251289-001.
2) Intel P965 Express Chipset Family Datasheet – For the Intel 82P965 Memory
Controller Hub (MCH). Document Number: 313053-001.
3) Intel I/O Controller Hub 8 (ICH8) Family Datasheet – For the Intel 82801HB
ICH8 and 82801HR ICH8R I/O Controller Hubs. Document Number: 313056-001.
Электронные документы, доступные на сайтеwww.superflash.com илиssti.com.
4) 1 Mbit SPI Serial Flash SST25VF010 Data Sheet. Document Number:
S71233-01-000.
5) 8 Mbit SPI Serial Flash SST25VF080B Data Sheet. Document Number:
S71296-01-000.
Электронные документы, доступные на сайтеwinbond.com.tw.
6) W25X10A, W25X20A, W25X40A, W25X80A 1M-bit, 2M-bit, 4M-bit and 8M-bit
Serial Flash Memory with 4KB sectors and dual output SPI Data Sheet.
Интерфейс SPI: историческая справка
Как известно, быстродействие микросхемы постоянного запоминающего устройства
(Flash ROM), используемой в качестве носителя BIOS, практически не влияет на
общую производительность компьютера. Это связано с тем, что при старте
материнской платы, BIOS переписывается (или распаковывается) в оперативную
память Shadow RAM и при обращении к BIOS в сеансе ОС, программы работают с
оперативной памятью, а не с микросхемой Flash ROM. Поэтому, в отличие от
процессора, памяти, графической подсистемы, эволюция которых сопровождается
ростом производительности, микросхемы Flash ROM и их интерфейсы развиваются в
другом направлении. Здесь главными критериями являются уменьшение стоимости,
потребляемой мощности и занимаемой площади на материнской плате. Главный метод
достижения этих целей – уменьшение количества проводников между микросхемой BIOS
и контроллером, обычно входящим в состав «южного моста» чипсета. С точки зрения
метода подключения микросхемы BIOS, можно выделить три поколения материнских
плат:
1) На платах, использующих шину ISA, устанавливались микросхемы постоянных
запоминающих устройств с раздельными линиями адреса, данных и управления. При
этом для каждого разряда адреса и данных, а также для каждого сигнала управления
(чтение, запись) требовался свой провод, точнее печатный проводник на плате.
2) С появлением чипсетов Intel 810, 815, на основе «хабовой» архитектуры,
шина ISA ушла в прошлое. Ряд устройств материнской платы, ранее подключаемых к
ISA (контроллер гибких дисков, порты COM и LPT, микросхема BIOS), «переехали» на
интерфейс Low Pin Count или LPC, название которого переводится как «малое
количество сигналов». Сигналы адреса, данных и управления в этом интерфейсе
передаются по пяти линиям (не считая сигналов сброса, тактирования и линий
питания), в режиме мультиплексирования во времени. Микросхемы BIOS, используемые
в таких платформах, иногда называют Firmware Hub или FWH. Пример программы
стирания и записи микросхемы BIOS, приведенный в ранее опубликованной статье
«Проникновение в BIOS ROM» N1 и N2″ предназначен для таких платформ.
3) Начиная с чипсета Intel 945, в состав «южного моста» включен контроллер
специализированной последовательной шины Serial Peripheral Interface или SPI,
использующий передачу данных чтения и записи, а также управляющей и статусной
информации по однобитному последовательному каналу. Это позволило использовать
8-контактный корпус для микросхемы BIOS. Данная статья посвящена рассмотрению
именно таких платформ.
Отметим, что интерфейс LPC также поддерживается современными чипсетами и
разработчик материнской платы может использовать для подключения микросхемы BIOS
как LPC, так и SPI. Сфера применения интерфейса SPI не ограничивается
материнскими платами компьютеров
Внимательный читатель мог обратить внимание на
то, что из-за перехода к последовательному формату данных, каждый из описанных
интерфейсов использует больше тактов для выполнения операций чтения и записи,
чем его предшественник, что чревато снижением быстродействия. Но этого не
происходит, так как указанное обстоятельство компенсируется ростом частоты и
оптимизацией форматов данных
Шина ISA работает на частотах 5-8MHz, LPC на
33MHz, SPI на 33-50 MHz.
3Чтение и запись ПЗУ с помощью программатора CH341A
Установим программируемую микросхему в DIP-панель и зажмём с помощью специального рычага. Первая ножка микросхемы flash-памяти обозначена на корпусе точкой.
Программируемая микросхема в ZIF-панели под микроскопом
На нижней стороне программатора, как мы уже видели, отмечено, как необходимо располагать программируемую микросхему.
Программируемая микросхема в DIP-панели программатора CH341AПрограмматор CH341A
Будьте предельно внимательны при установке программируемой микросхемы. Если её неправильно (и неудачно) подключить, можно вывести из строя или микросхему, или сам программатор. Явным признаком неправильного подключения микросхемы может служить сильный разогрев частей программатора или программируемой микросхемы.
После установки драйвера запустим программу CH341A Programmer. Программа автоматически определит, что программатор подключён. В правом нижнем углу в статусной строке программы появится надпись, оповещающая о том, что программа нашла программатор: Состояние: Подключено
Если программа не определила программатор, статусная строка отобразит соответствующее предупреждение.
Нажмите кнопку «Определить» (в разных версиях программы встречаются разные варианты перевода, а изначально интерфейс программы на китайском языке). Программа, если сможет, покажет наиболее подходящие варианты. Также вы можете выбрать тип микросхемы вручную, нажав кнопку «Поиск чипов».
Программа для работы с программатором CH341A
После того, как чип выбран, нажмите кнопку «Чтение». Программа прочитает и отобразит содержимое чипа в шестнадцатеричном формате (а также в виде текстовых символов в кодировке ASCII).
Кстати, в программе отображается подсказка в виде изображения, как должна быть расположена микросхема при программировании. Так вот, не смотрите на неё. Правильное положение указано на самом программаторе CH341A, как мы видели ранее, и оно не совпадает с нарисованным в программе.
Для записи данных в ПЗУ нужно ввести в поле представления данных в 16-ном формате необходимый массив байтов, а затем нажать кнопку «Запись». Программа начнёт запись данных в микросхему флеш-памяти. Светодиодный индикатор RUN на программаторе загорится оранжевым цветом. По завершении записи программа проверит успешность записи, сверив переданный массив с содержимым в памяти микросхемы, а индикатор погаснет.
Можно убедиться в том, что данные успешно записаны, отключив программатор от компьютера, а затем подключив его и заново считав содержимое ПЗУ.
Можно сохранить считанный из ПЗУ массив данных в файл. Для этого нужно просто нажать кнопку «Сохранить» и указать желаемое имя файла. А можно, наоборот, загрузить в память данные из файла, нажав кнопку «Открыть».
Как правило, расширения файлов для хранения данных ПЗУ – *.bin, *.hex и *.rom.
1Обзор программатораCH341A
Как следует из названия программатора, его основная часть – это микросхема CH341A. Рядом с ней располагается кварцевый резонатор на 12 МГц, а также стабилизатор напряжения AMS1117, который выдаёт 3,3 вольта. По бокам от USB разъёма, которым программатор подключается к компьютеру, располагаются светодиодные индикаторы: сверху (на фото) – индикатор питания (POWER), а снизу – индикатор обмена данными между ПК и программатором (RUN). Он включается, когда программатор считывает данные из программируемой микросхемы и когда происходит запись.
Верхняя сторона программатора CH341A
Для подключения программируемых микросхем установлена 16-контактная DIP панель с нулевым усилием (ZIF), которая промаркирована TFXTDOL. С обеих стороны панели располагаются две группы контактов. Их назначение описано на нижней стороне программатора и приводится на фото ниже:
Нижняя сторона программатора CH341A
По названиям выводов понятно, что верхняя (на фото) гребёнка предназначена для обмена по интерфейсу SPI, а нижняя – по UART. Также тут имеется площадка для пайки, на которую можно припаять программируемую микросхему.
Лучше использовать переходные панели с нулевым усилением (т.н. ZIF панели), которые позволяют подключать микросхемы к программатору без пайки посредством DIP панели на верхней стороне.
С помощью перемычки, которая по умолчанию установлена между контактами 1 и 2, можно менять режим работы программатора. Так, если перемычка установлена между контактами 1 и 2, программатор работает в параллельном режиме и определяется в диспетчере устройств Windows как параллельный порт (USB-EPP/I2C), а если между контактами 2 и 3 – в последовательном режиме и определяется в диспетчере устройств как COM-порт.
Программатор предназначен для чтения и записи данных в микросхемы flash-памяти серий 24 и 25. На шелкографии на нижней стороне программатора CH341A указано, каким образом нужно подключать программируемую микросхему каждой из серий. Приобрести программатор можно на Али-Экспресс, например, здесь, а подходящие микросхемы памяти здесь.