Патчим OpenOCD для поддержки чипа NOR Flash

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Отлаживать отладчик, пока отлаживаешь отладчик
Отлаживать отладчик, пока отлаживаешь отладчик

Disclaimer: "чукча не писатель, чукча читатель"

UseCase 0: надоело переподключать плату с RP2040 и захотелось загружать прошивку из IDE по кнопке "Run"
UseCase 1: хочется пошаговой отладки, а не принтами.

Установил на одну из плат DebugProbe и попробовал подключиться.

Оказалось не все так просто - OpenOCD плевался на неизвестное устройство:

Error: Unknown flash device (ID 0x00184068)

Загуглим ошибку.
Натыкаемся на предложение пропатчить список известных flash
Ладно...

Скачиваем исходники OpenOCD:

git clone https://git.code.sf.net/p/openocd/code openocd

Смотрим в src/flash/nor/spi.c

Разработчики заботливо оставили комментарий с инструкциями по расширению списка:

/* Shared table of known SPI flash devices for SPI-based flash drivers. Taken
   from device datasheets and Linux SPI flash drivers. /
const struct flash_device flash_devices[] = {    /* Note: device_id is usually 3 bytes long, however the unused highest byte counts
      continuation codes for manufacturer id as per JEP106xx.
     
      All sizes (page, sector/block and flash) are in bytes.
     
      Guide to select a proper erase command (if both sector and block erase cmds are available):
      Use 4kbit sector erase cmd and set erase size to the size of sector for small devices
      (4Mbit and less, size <= 0x80000) to prevent too raw erase granularity.
      Use 64kbit block erase cmd and set erase size to the size of block for bigger devices
      (8Mbit and more, size >= 0x100000) to keep erase speed reasonable.
      If the device implements also 32kbit block erase, use it for 8Mbit, size == 0x100000.
     */

То есть для патча потребуются номера команд чтения/записи и размеры блоков.
Судя по всему номера основных команд у этого класса устройств совпадают у большинства производителей.

В моём случае потребовалось добавить строки


	FLASH_ID("zbit zb25vq32"  ,       0x03, 0x0b, 0x02, 0xd8, 0xc7, 0x0016405e, 0x100, 0x10000, 0x0400000),
	FLASH_ID("boya by25q128es",       0x03, 0x0b, 0x02, 0xd8, 0xc7, 0x00184068, 0x100, 0x10000, 0x1000000),

с комментариями к константам

FLASH_ID(
    "by25q128es", // название чипа
    0x03,         // "Read Data" - команда чтения
    0x0b,         // "Quick Read" - ускоренное чтение
    0x02,         // "Page Program" - записать "страницу"
    0xd8,         // "64K Block Erase" - стереть блок
    0xc7,         // "Chip Erase" - стереть всё
    0x00184068,   // ID производителя / устройства
    0x100,        // 256 байт, размер "страницы" для записи
    0x10000,      // 64KiB, размер стираемого блока(в байтах)
    0x1000000     // 16MiB, общий объём памяти(в байтах)
),

Источник: https://habr.com/ru/articles/891768/


Интересные статьи

Интересные статьи

Сегодня мы поговорим о том, как использовать вложенные транзакции в Bitrix, чтобы обеспечить целостность данных. Транзакции - это ваше надежное магическое заклинание, которое гарантирует, что ваши мн...
Начало: центральный процессор Напомню, что большая часть графического конвейера выполняется GTE. В неё входит преобразование перспективы (проецирование 3D-пространства на 2D-плоскость при помощи ...
Всем привет! Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. Главные темы нового выпу...
Как-то у нас исторически сложилось, что Менеджеры сидят в Битрикс КП, а Разработчики в Jira. Менеджеры привыкли ставить и решать задачи через КП, Разработчики — через Джиру.
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...