Для патча потребуются номера команд чтения/записи и размеры блоков.
Номера основных команд у этого класса устройств совпадают у большинства производителей.
Для первого нужно добавить:
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, общий объём памяти(в байтах)
),
Для второго отличие только в объеме (4MiB):
FLASH_ID("zbit zb25vq32" , 0x03, 0x0b, 0x02, 0xd8, 0xc7, 0x0016405e, 0x100, 0x10000, 0x0400000),
UPD0:
Для RP2040 есть другой способ - нужно пропатчить "target/rp2040.cfg" для поддержки указания размера flash
# allow skip flash auto_probe
if { [info exists FLASH_SIZE] } {
set _FLASH_SIZE $FLASH_SIZE
} else {
set _FLASH_SIZE 0
}
# flash bank $_FLASHNAME rp2040_flash 0x10000000 0 0 0 $_FLASH_TARGET
flash bank $_FLASHNAME rp2040_flash 0x10000000 $_FLASH_SIZE 0 0 $_FLASH_TARGET
if { $_BOTH_CORES } {
# Alias to ensure gdb connecting to core 1 gets the correct memory map
# flash bank $_CHIPNAME.alias virtual 0x10000000 0 0 0 $_TARGETNAME_1 $_FLASHNAME
flash bank $_CHIPNAME.alias virtual 0x10000000 $_FLASH_SIZE 0 0 $_TARGETNAME_1 $_FLASHNAME
# Select core 0
targets $_TARGETNAME_0
}
Но это работает только для OpenOCD, собранного из исходников, полученных из основного репозитория.