Еще недавно была моя публикация о программе IMSProg — программаторе для CH341a в Linux, а различные идеи продолжают приходить в голову. Происходит это во многом благодаря вашим комментариям к статье.

Микросхемы энергонезависимой памяти с последовательным интерфейсом SPI NOR FLASH все чаще применяются в различных микропроцессорных и микроконтроллерных устройствах от материнских плат до приставок для приема цифрового телевидения. Не могу сказать, что эта тенденция мне нравится — выход из строя устройств по причине разрушения информации BIOS в связи с применением этого типа микросхем многократно увеличился, но остановить процесс (прогресс?) невозможно.

Существует несколько десятков фирм, изготавливающих SPI NOR FLASH. У каждой из фирм несколько десятков моделей микросхем. То есть общее количество моделей микросхем - уже сотни. При подключении такой микросхемы к программатору, чаще всего, сначала происходит подача на микросхему команды 9Fh, в ответ на которую микросхема отдает программатору несколько байт информации JEDEC ID — уникального числа, первый байт которого является кодом производителя, второй — модификацией микросхемы, а третий — кодом емкости (объема) микросхемы. Сравнивая эти три байта с таблицей софт программатора определяет модель микросхемы и выставляет соответствующие параметры для чтения, записи или стирания микросхемы.

Информация JEDEC ID иногда совпадает у разных моделей микросхем. Именно поэтому, устанавливая микросхему в программатор, бывает, мы получаем модель микросхемы в программе, отличающуюся от ее реальной маркировки - совпали три байта JEDEC ID с информацией в базе софта программатора. В подавляющем большинстве таких случаев совпадают и параметры таких микросхем. Поэтому чтение-запись в таких случаях, чаще всего, проходит успешно.

Многие из производителей софта для программаторов безнадежно отстают от расширяющегося ассортимента и новые микросхемы не определяются программатором. Поэтому возникла идея объединения информации о SPI NOR FLASH в одном месте. В результате получилась очень большая таблица:

С разбивкой по производителям она содержит для каждой микросхемы JEDEC ID, емкость, наличие разных режимов работы, напряжение питания и ссылку на Datasheet.

Каждый раз добавляя данные в таблицу мне приходилось одновременно в редакторе программы IMSProg дублировать информацию. Это двойная работа и делать ее было поручено php-скрипту. Получилось вполне работоспособно и дальше возникла мысль — программаторов много, а данные по микросхемам, которые они используют — одинаковые. Почему бы не написать скрипты и для других программаторов?

На момент написания статьи есть возможность скачать базу для AsProgrammer, EZP2019, IMSProg, и SNANDer. Буду рад идеям по доработке и дополнению материала.

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


  1. CodeRush
    07.11.2023 17:21
    +5

    У проекта flashrom тоже есть подобная база, хоть и не настолько подробная.
    Отдельной колонкой добавил бы наличие\отсутствие поддержки SFDP, потому что с микросхем без таковой большинство современных компьютеров загрузиться не смогут, даже если по всем остальным параметрам чип подходит.


  1. big-mdm Автор
    07.11.2023 17:21
    +1

    Да, это нужная информация. Постараюсь.


  1. iamoblomov
    07.11.2023 17:21

    Отличная работа, будет полезно. А может ее в гуглдоки залить, в обычном табличном формате? Чтобы люди могли добавлять и тд


    1. big-mdm Автор
      07.11.2023 17:21

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


  1. iamoblomov
    07.11.2023 17:21

    У меня кроме народного программатора CH341A, есть еще девайс SUCCESSOR Вертьянова, он конечно не только для SPI но его тоже умеет, там формат базы данных такой

    //Winbond
    [EF3010] NAME=W25X05 FLASH_SIZE=64KB VCC=3v3
    [EF3011] NAME=W25X10 FLASH_SIZE=1Mbit VCC=3v3
    [EF3012] NAME=W25X20 FLASH_SIZE=2Mbit VCC=3v3

    На вид бедно, но там еще всякие опции есть:

    Hidden text

    19/05/2022
    Этот файл (SPI database.txt) должен находиться в одной папке с программой.
    В режиме SPI FLASH:

    • Производится поиск в этом файле на совпадение ID. При сопадении - параметры запоминаются.

    • Анализируется наличие регистра SFDP во flash spi. При сопадении - параметры запоминаются.

    • Если в этом файле ID flash не найден, то ID всегда сохраняется в файл Unknown_SPI_ID.txt и при наличии во flash регистра SFDP, его дамп так-же сохраняется в файл для анализа. Если файл Unknown_SPI_ID.txt отсутствует в папке с программой, то он создается. Если ID flash уже есть в файле, то не дублируем.

    • В этом файле нет необходимости вписывать все возможные м/сх. У многих м/сх уже есть регистр SFDP из которого можно взять все необходимые параметры для чтения/стирания/записи. Однако, если м/сх определяется (отдает ID) и на 1v8 и на 3v3, а при этом заявлена ее работа на 3v3, то чтобы программатор корректно выставлял ей питание и не было ошибок стирания/записи (на 1v8 например), то такую м/сх так-же нужно добавить сюда и указать ей верное VCC=3v3. В этом файле уже есть м/сх у которых присутствует SFDP, но именно по этой причине они так-же тут в списках.

    При детекте SPI flash программатором, хитрым методом определяется её питание (1v8 или 3v3).
    На данный момент, параметр VCC, в настройках ниже, носит чисто информативный характер и ни на что не влияет.
    После определения ID (не равен FFFFFFh и не равен 000000h) проверяется наличие регистра SFDP во flash.
    Приоритетно, значения для работы программы (параметры) берутся из этого файла. Если записи по этому ID нет, то из SFDP регистра flash.
    Если нет ни SFDP, ни данных по ID в этом файле, то предлагается перейти в ручной режим и указать необходимые настройки.

    Частота работы с flash если есть запись этого ID в этом файле - значение параметра SCLK
    Частота работы с flash если есть SFDP регистр устанавливается в 20 Mhz.
    Частота работы с flash в ручном режиме устанавливается в 15 Mhz.

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    По умолчанию применяются настройки (99% всех SPI) и их можно не указывать в параметрах:
    SCLK = 20
    WR_PAGE = 256
    BLOCK_ERASE_COMM = D8h
    BLOCK_SIZE = 65536
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Если хотите изменить данный параметр для конкретной flash, то пишете его с новым значением.
    Для примера, подовляющее большинство spi flash можно описать, используя лишь некоторые парметры
    [123456] NAME=W25Q64FW FLASH_SIZE=64Mbit VCC=1v8
    но можно записать и в полном виде
    [123456] NAME=W25Q64FW FLASH_SIZE=64Mbit VCC=1v8 SCLK=20 WR_PAGE=256 BLOCK_ERASE_COMM=D8h BLOCK_SIZE=65536
    Один ID [обязательно в скобках] - одна строка настроек в этом файле.