Прошивка SPI EEPROM (mcom03-flash)
Утилита mcom03-flash предназначена для прошивки памятей, подключенных к контроллерам QSPI0, QSPI1 процессора. Поддерживаемые модули и памяти:
MCom-03 BuB r1.3.0, r1.5.0 (QSPI0, QSPI1);
NGFW-CB r1.0 с установленным ELV-MC03-SMARC r1.0, r1.1 (QSPI0);
ROCK Pi N10 с установленным ELV-MC03-SMARC r1.0, r1.1 (QSPI0);
ELV-SMARC-CB r1.0 с установленным ELV-MC03-SMARC r1.0, r1.1 (QSPI0);
ELV-SMARC-CB r2.9.1 с установленным ELV-MC03-SMARC r2.2 (QSPI0);
ELV-SMARC-CB r2.10 с установленным ELV-MC03-SMARC r1.0, r1.1 (QSPI0);
ELV-SMARC-CB r2.10.3 с установленным ELV-MC03-SMARC r1.0, r1.1, r2.6.1 (QSPI0);
ELV-SMARC-CB r3.1.0 с установленным ELV-MC03-SMARC r1.0, r1.1, r2.6.1 (QSPI0);
ELV-SMARC-CB r3.2.1 с установленным ELV-MC03-SMARC r1.0, r1.1, r2.7.1 (QSPI0);
ELV-SMARC-CB r3.3.0 с установленным ELV-MC03-SMARC r3.0.0 (QSPI0);
ELV-MC03-CB r1.1.0 с установленным ELV-MC03 r1.2, r2.2 (QSPI0);
MONO-BOARD r1.1.1 (QSPI0).
Прошивка выполняется по интерфейсу UART0: MCom-03 BootROM в режиме загрузки по UART принимает образ spi-flasher, spi-flasher запускается на RISC0, повышает частоты, принимает образы для прошивки по UART, прошивает соответствующую память QSPI.
Справочник:
$ mcom03-flash --help
usage: mcom03-flash [-h] [-p PORT] [-b BAUDRATE] [-v] [--hide-progress-bar]
[--flash-size FLASH_SIZE] [--flash-sector FLASH_SECTOR]
[--flash-page FLASH_PAGE] [-f FLASHER] [--version]
{flash,flash-tl,flash-tl-dir,flash-tl-image,read,erase,protect,unprotect} ...
Tool to flash/read/erase QSPI0, QSPI1 memory connected to MCom-03 SoC (1892ВА018).
Tool algorithm:
* upload baremetal binary flasher to CRAM memory via BootROM UART monitor
* upload image to CRAM memory (or part of it) and command flasher to flash it
* repeat previous step multiple time till whole image is flashed to SPI
Intel HEX file baremetal SPI flasher to be executed on RISC0 is embedded with the tool.
Size options (including --offset) can be in hexadecimal (0x) and decimal format. Decimals may be
followed by the multiplicative suffixes (similar to dd utility): kB=1000, K=1024, MB=1000*1000,
M=1024*1024, binary prefixes can be used, too: KiB=K, MiB=M, and so on.
positional arguments:
{flash,flash-tl,flash-tl-dir,flash-tl-image,read,erase,protect,unprotect}
flash Flash image to QSPI
flash-tl Flash tl images to QSPI
flash-tl-dir Flash tl images to QSPI relative to directory
flash-tl-image Flash tl images to QSPI from tar package
read Read data from QSPI
erase Erase data on QSPI
protect Protect QSPI from writing/erasing
unprotect Remove QSPI protection from writing/erasing
options:
-h, --help show this help message and exit
-p PORT, --port PORT serial port on host the device UART0 is connected to (default:
/dev/ttyUSB0)
-b BAUDRATE, --baudrate BAUDRATE
specify UART baudrate (default: 115200)
-v, --verbose show UART traffic (default: False)
--hide-progress-bar do not show progress bar (progress bar is hidden in non-interactive shell)
(default: False)
--flash-size FLASH_SIZE
redefine flash total size (default: None)
--flash-sector FLASH_SECTOR
redefine flash erase sector size (default: None)
--flash-page FLASH_PAGE
redefine flash page size (default: None)
-f FLASHER, --flasher FLASHER
path to Intel HEX baremetal application to be executed on RISC0(use HEX
distributed with the tool if not specified) (default: None)
--version show program's version number and exit
Напряжение падов QSPI
Контроллер QSPI0 поддерживает только режим 1.8 В. Контроллер QSPI1 может настраивать пады на режим 1.8 В или 3.3 В.
Для конфигурации падов QSPI1 в режим 1.8 В используется параметр --voltage18. По умолчанию для
QSPI1 утилита настраивает режим 3.3 В. Для QSPI0 данный параметр игнорируется и не влияет на работу
падов.
Важно
При использовании м/сх памяти, подключенных к QSPI1, с напряжением I/O 3.3 В
указание параметра --voltage18 может привести к повреждению падов MCom-03.
Важно
Параметр --voltage18 следует указывать для всех команд обращения к памяти
(flash, read, erase).
Подготовка модуля
Установить переключатели для загрузки процессора в режиме BootROM UART:
на модуле NGFW-CB (BOOT2,1,0): ON, OFF, OFF
на модуле MCom-03 BuB (BOOT2,1,0): OFF, ON, ON
на модуле conga-SEVAL (BOOT_SEL2,1,0): ON, OFF, OFF
на модуле ROCK Pi N10 снять джампер с пинов GPIO 25,26 (GND,ADC_IN1)
на модуле ELV-SMARC-CB r1.0 (BOOT SOURCE: 1, 2, 3): ON, OFF, OFF
на модуле ELV-SMARC-CB r2.9.1, r2.10.3, r3.1.0, r3.2.1 (BTSL2,1,0): ON, OFF, OFF
на модуле ELV-SMARC-CB r3.3.0 (BTSL2,1,0): ON, OFF, OFF
на модуле ELV-MC03-CB (BOOT2,1,0): OFF, ON, ON
на модуле MONO-BOARD r1.1.1 (BOOT_SEL3,2,1): ON, OFF, OFF
Подключить кабель USB для UART-консоли модуля.
Подать питание на модуль (если модуль уже включен, то нажать кнопку Reset).
Для модуля NGFW-CB необходимо дополнительно нажать кнопку Power.
Если на ПК открыто приложение, использующее UART (
minicom), то приложение необходимо закрыть.
Прошивка QSPI
Запустить:
mcom03-flash --port /dev/ttyUSBx flash qspi0 <file-to-write>
/dev/ttyUSBx— устройство терминала UART0 на ПК.Примечание
Для указания начального смещения (аргумент --offset) и для любых указаний размеров можно использовать единицы измерения как в утилите
dd: 1K = 1024, 1M = 1024K, 1KB = 1000, 1MB = 1000KB и т.д. Смещение может быть отрицательным. Тогда это интерпретируется как смещение с конца flash-памяти. В случае отрицательного смещения параметр должен передаваться с использованием знака «=», для избежания ошибки «expected one argument»:--offset=<negative value>
Примечание
Для ускорения процесса можно повысить скорость обмена данными по UART. Например:
mcom03-flash --port /dev/ttyUSBx --baudrate 921600 flash qspi0 <file-to-write>
Со стороны ПО поддерживаются все стандартные скорости от 300 бод до 4 Мбод. В том числе: 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000.
Различные переходники USB-UART могут ограничивать максимальную скорость. Например, на модуле ELV-SMARC-CB r3.3.0 используется USB-UART с максимальной скоростью 921600 бод.
В зависимости от качества Linux-драйвера переходника USB-UART устройство терминала /dev/ttyUSBx может открываться даже при указании неподдерживаемого переходником бодрейтом.
После завершения прошивки будет выведена фраза
Checking succeededи указана длительность и скорость прошивки. Скорость прошивки ограничена скоростью UART. Например, при скорости UART 115200 бод скорость прошивки составляет ~9 КБ/с, а при скорости UART 921600 бод - ~40 КБ/с.Примечание
Если при запуске на модуле NGFW-CB будет выдано исключение из-за несовпадения CRC, возможно, после включения питания не была нажата кнопка Power.
Важно
Для загрузки процессора в режиме XIP QSPI0 установить переключатели в положения:
на модуле NGFW-CB (BOOT2,1,0): ON, ON, ON
на модуле MCom-03 BuB (BOOT2,1,0): OFF, OFF, OFF
на модуле conga-SEVAL (BOOT_SEL2,1,0): ON, ON, ON
на модуле ROCK Pi N10 установить джампер на пины GPIO 25,26 (GND,ADC_IN1)
на модуле ELV-SMARC-CB r1.0 (BOOT SOURCE: 1, 2, 3): ON, ON, ON
на модуле ELV-SMARC-CB r2.9.1, r2.10.3, r3.1.0, r3.2.1 (BTSL2,1,0): ON, ON, ON
на модуле ELV-SMARC-CB r3.3.0 (BTSL2,1,0): ON, ON, ON
на модуле ELV-MC03-CB (BOOT2,1,0): OFF, OFF, OFF
на модуле MONO-BOARD r1.1.1 (BOOT_SEL3,2,1): ON, ON, ON
Справочник:
$ mcom03-flash flash --help
usage: mcom03-flash flash [-h] [--voltage18] [--offset OFFSET] {qspi0,qspi1} image
positional arguments:
{qspi0,qspi1} QSPI controller to use
image path binary image to flash to SPI
options:
-h, --help show this help message and exit
--voltage18 Setup QSPI1 to 1.8V. Not used for QSPI0
--offset OFFSET Process data starting from OFFSET bytes (e.g. 0x100, 1024, 128K).Offset can be
negative. In the case it is treated as offset from the end
Чтение QSPI
Для чтения образа используется команда read утилиты mcom03-flash:
mcom03-flash --port /dev/ttyUSBx read qspi0 <output-file> [size-in-bytes]
Если размер не указан, то будет прочитано содержимое всей памяти. Пример использования:
mcom03-flash --port /dev/ttyUSB0 read qspi0 new-file.img 256K
Справочник:
$ mcom03-flash read --help
usage: mcom03-flash read [-h] [--voltage18] [--offset OFFSET] {qspi0,qspi1} fname [size]
positional arguments:
{qspi0,qspi1} QSPI controller to use
fname file name to save
size size to read/erase. Examples: 65536, 128K (131072 bytes), 4M (4194304 bytes),
128kB (128000 bytes), 4MB (4000000 bytes). If not defined then will be used all
rest of flash (after --offset)
options:
-h, --help show this help message and exit
--voltage18 Setup QSPI1 to 1.8V. Not used for QSPI0
--offset OFFSET Process data starting from OFFSET bytes (e.g. 0x100, 1024, 128K).Offset can be
negative. In the case it is treated as offset from the end
Очистка QSPI
Для очистки памяти используется команда erase утилиты mcom03-flash:
mcom03-flash --port /dev/ttyUSBx erase qspi0 [size-in-bytes]
Если размер не указан, то будет очищена вся память. Пример использования:
mcom03-flash --port /dev/ttyUSBx erase qspi0 1M
Важно
Размер очищаемой памяти будет округлён вверх и будет кратен размеру блока стирания.
Справочник:
$ mcom03-flash erase --help
usage: mcom03-flash erase [-h] [--voltage18] [--offset OFFSET] {qspi0,qspi1} [size]
positional arguments:
{qspi0,qspi1} QSPI controller to use
size size to read/erase. Examples: 65536, 128K (131072 bytes), 4M (4194304 bytes),
128kB (128000 bytes), 4MB (4000000 bytes). If not defined then will be used all
rest of flash (after --offset)
options:
-h, --help show this help message and exit
--voltage18 Setup QSPI1 to 1.8V. Not used for QSPI0
--offset OFFSET Process data starting from OFFSET bytes (e.g. 0x100, 1024, 128K).Offset can be
negative. In the case it is treated as offset from the end
Защита от записи/стирания
Команда protect включает программную защиту от записи и стирания памяти. Команда unprotect
снимает защиту, если она установлена. В зависимости от типа защиты SPI-памяти защита может быть
включена автоматически после сброса памяти или цикла питания. Подробнее см. описание класса для
соответствующей памяти. Примеры команд:
mcom03-flash --port /dev/ttyUSBx protect qspi0
mcom03-flash --port /dev/ttyUSBx unprotect qspi0
Справочник:
$ mcom03-flash protect --help
usage: mcom03-flash protect [-h] [--voltage18] {qspi0,qspi1}
positional arguments:
{qspi0,qspi1} QSPI controller to use
options:
-h, --help show this help message and exit
--voltage18 Setup QSPI1 to 1.8V. Not used for QSPI0
$ mcom03-flash unprotect --help
usage: mcom03-flash unprotect [-h] [--voltage18] {qspi0,qspi1}
positional arguments:
{qspi0,qspi1} QSPI controller to use
options:
-h, --help show this help message and exit
--voltage18 Setup QSPI1 to 1.8V. Not used for QSPI0
Поддержка новых микросхем
Убедиться, что память поддерживается пакетом, см.
mcom03_flash_tools.FLASH_LIST.Реализовать дочерний класс для
mcom03_flash_tools.Protectorи добавить его вTYPE2CLS.
Алгоритм защиты должен подразумевать возможность программного сброса защиты.