1921ВК035 FLASH

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

smispp
Сообщения: 32
Зарегистрирован: 28 ноя 2022, 09:30
Предприятие: оао нпк спп

Re: 1921ВК035 FLASH

Сообщение smispp »

Может кто поможет разобраться как прошить nvr flash? Предыдущий пост. А то тишина полная. Модераторы, помогите.
nppsem
Сообщения: 103
Зарегистрирован: 26 апр 2010, 16:09

Re: 1921ВК035 FLASH

Сообщение nppsem »

Собственно прошивальщик от НИИЭТ, работает.
https://gitflic.ru/project/niiet/k1921vkx_flasher
Мы на его основе под свои требования bootloader делали.
smispp
Сообщения: 32
Зарегистрирован: 28 ноя 2022, 09:30
Предприятие: оао нпк спп

Re: 1921ВК035 FLASH

Сообщение smispp »

Вы дали ссылку на программу загрузки, это я видел и в курсе. Как я понимаю, в контроллере уже должен лежать загрузчик, вероятно в NVR FLASH, через который и происходит обновление ПО. Или я неправильно это понимаю?

Судя по интерфейсу программы (Выбор области - Основная - NVR/Info), ей без разнице куда шить. И тут уже совсем не понятно.

Поэтому вопрос, как прошить в NVR сам загрузчик? Это нигде не освещается.
smispp
Сообщения: 32
Зарегистрирован: 28 ноя 2022, 09:30
Предприятие: оао нпк спп

Re: 1921ВК035 FLASH

Сообщение smispp »

nppsem писал(а): 21 ноя 2025, 09:01 Собственно прошивальщик от НИИЭТ, работает.
https://gitflic.ru/project/niiet/k1921vkx_flasher
Мы на его основе под свои требования bootloader делали.
Хотелось бы прояснить терминологию, чтобы не было недопонимания.

1 вариант:
Мы подключаемся к контроллеру через UART (какой ?) и через bootloader обновляем прошивку?

2 вариант:
Мы подключаемся к адаптеру(какому ?), который подключен к контроллеру через JTAG? SWD? и обновляем прошивку?

Считаю что прошивальщик и bootloader разные вещи?

Какой вариант у вас?
nppsem
Сообщения: 103
Зарегистрирован: 26 апр 2010, 16:09

Re: 1921ВК035 FLASH

Сообщение nppsem »

Алгоритм, со слов нашего программиста, примерно такой:
1 Надо прошить загрузчик, для этого используется OpenOCD (из НИИЭТ-овского репозитария) с любым поддерживаемым "переходником". У нас, к примеру, Olimex арм-USB-тини, но это не принциаиально.
2 При снятом питании перемычкой активируется вывод SRVEN. Выполняется команда стирания в сервисном режиме openocd -f srv_erase.cfg.
Состав конфига:

source [find interface/ftdi/olimex-арм-usb-ocd-h.cfg]
source [find target/k1921vk035.cfg]
init
reset init
flash probe 0
k1921vk035 srv_erase
exit

3 Снимается питание и SRVEN деактивируется.
4 Подаётся питание и командой openocd -f program_boot.cfg шьётся загрузчик.
Состав конфига:

source [find interface/ftdi/olimex-арм-usb-ocd-h.cfg]
source [find target/k1921vk035.cfg]
init
reset init
flash probe 0
program "boot035.bin" verify reset exit 0x00000000

5 Снимается питание, теперь можно шить через UART.
В загрузчике от НИИЭТ, для его активации, используется вывод NMI, мы переделали загрузчик под один из выводов GPIO.

Шпаргалка по OpenOCD лежит здесь:
https://gitflic.ru/project/niiet/k1921v ... e=markdown
smispp
Сообщения: 32
Зарегистрирован: 28 ноя 2022, 09:30
Предприятие: оао нпк спп

Re: 1921ВК035 FLASH

Сообщение smispp »

Спасибо за ответ. Пытаюсь разбираться с openocd, это не просто, мягко говоря, поскольку раньше не приходилось сталкиваться.

Просмотрел скрипты из папки tools касательно 035 контроллера, и не нашёл ничего, что описывает специфика flash данного контроллера.

В k1921vk035.Cfg есть единственная строка про флэш.
flash bank $_CHIPNAME.flash k1921vk035 0 0 0 0 $_TARGETNAME

Определяется, некий банк флэш, присваевается имя, какой-то драйвер k1921vk035, что это и что с ним делать непонятно, начинается с 0, размер 0, следующие два 0, вроде не обязательно. Про NVR flash ничего не говорится.

Далее пункт 2. Стираем полностью контроллер

source [find interface/ftdi/olimex-арм-usb-ocd-h.cfg]
source [find target/k1921vk035.cfg]
init
reset init
flash probe 0
k1921vk035 srv_erase
exit

Более менее понятно, за исключением 5,6 строки. Хотя, зачем стирать так, при программировании можно тоже стирать сектора.

Далее пункт 4. Прошивка bootloader.

source [find interface/ftdi/olimex-арм-usb-ocd-h.cfg]
source [find target/k1921vk035.cfg]
init
reset init
flash probe 0
program "boot035.bin" verify reset exit 0x00000000

Не понятно в какой flash это всё попадает.

Разъясните пожалуйста, как это работает, может быть тут какая то более сложная схема?

Ну например.

1. bootloader пишется в основную флэш.
2 далее с помощью программы flasher, в которой есть возможность выбирать куда, та же прошивка пишется в NVR флэш.
3. После этого, активируем bootloader и обновляем рабочие прошивки?
nppsem
Сообщения: 103
Зарегистрирован: 26 апр 2010, 16:09

Re: 1921ВК035 FLASH

Сообщение nppsem »

Для записи загрузчика OpenOCD запускается три раза:
1) openocd -f srv_erase.cfg - "приведение к исходному" (CFGWORD будет приведён к значению "по умолчанию", в т.ч. NVRWE=1, см.*), в конфиге записана команда: k1921vk035 srv_erase
2) openocd -f enable_boot.cfg - запись в слово CFGWORD поля BMODEDIS=0 (загрузка из NVR области), в конфиге записана команда: k1921vk035 nvr_boot enable
3) openocd -f program_boot.cfg - собственно запись загрузчика, в конфиге записана команда: program "boot035.bin" verify reset exit 0x00000000

Загрузчик, при отсутствии аппаратного признака или по завершению работы (окончание записи или тайм-аут), устанавливает бит BMDIS регистра BDIS и установкой бита SYSRESETREQ регистра AIRCR выполняет программную перезагрузку, после которой запускается прошивка из основной области памяти.
(*)Также загрузчик контролирует содержание CFGWORD и (при необходимости) записывает CFGWORD.NVRWE=0 (запрет записи и стирания NVR блока Flash-памяти)

Насколько я понимаю, можно шить и основную память, если сначала вызвать openocd -f disable_boot.cfg (k1921vk035 nvr_boot disable),
а затем openocd -f program_main.cfg

Что касается заклинаний типа nvr_boot enable / disable, то это уже в исходниках OpenOCD надо копаться.
nppsem
Сообщения: 103
Зарегистрирован: 26 апр 2010, 16:09

Re: 1921ВК035 FLASH

Сообщение nppsem »

Ещё есть вариант прошиться: viewtopic.php?p=51893#p51893
Кстати, если потребуется просто прошиться, без отладки, можете попробовать это сделать через костыль по имени pyOCD: https://pyocd.io
В этом случае сдуваете архив с SDK: https://gitflic.ru/project/niiet/k1921vkx_sdk и подбираете из него tools\keil_pack\NIIET.K1921VK035_DFP.2.0.6.pack Потом кладёте рядом свою прошивку.
И делаете команду:
pyocd load --target K1921VK035 --pack=./NIIET.K1921VK035_DFP.2.0.6.pack ./ваша_прошивка.hex
Поскольку он подбирает из Keil-овского пакована всё, что ему нужно, то это должно прокатить с любым OpenOCD.
smispp
Сообщения: 32
Зарегистрирован: 28 ноя 2022, 09:30
Предприятие: оао нпк спп

Re: 1921ВК035 FLASH

Сообщение smispp »

nppsem писал(а): 24 ноя 2025, 10:42
2) openocd -f enable_boot.cfg - запись в слово CFGWORD поля BMODEDIS=0 (загрузка из NVR области), в конфиге записана команда: k1921vk035 nvr_boot enable
Бит BMODEDIS приводит к загрузке из nvr, но нигде не сказано, что он открывает доступ записи в nvr. Согласно с РП только через mflash.
nppsem писал(а): 24 ноя 2025, 10:42 Что касается заклинаний типа nvr_boot enable / disable, то это уже в исходниках OpenOCD надо копаться.
В какой папке искать все то что добавил нииэт?
nppsem
Сообщения: 103
Зарегистрирован: 26 апр 2010, 16:09

Re: 1921ВК035 FLASH

Сообщение nppsem »

Бит BMODEDIS приводит к загрузке из nvr, но нигде не сказано, что он открывает доступ записи в nvr. Согласно с РП только через mflash.
Я собственно привёл рабочую последовательность прошивки nvr. Пользоваться или нет - это уже Ваше дело.

По п.2:
https://github.com/DCVostok/openocd-k19 ... 921vk035.c
Кстати, тамже лежит проект загрузчика, на gcc, при желании можно и Кейлом собрать:
https://github.com/DCVostok/bootloader-k1921vk035
и проект прошивальщика с гуём и без:
https://github.com/DCVostok/k1921vkx_flasher
Ответить

Вернуться в «32-разрядные микроконтроллеры»