1921ВК035 FLASH
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Re: 1921ВК035 FLASH
Может кто поможет разобраться как прошить nvr flash? Предыдущий пост. А то тишина полная. Модераторы, помогите.
Re: 1921ВК035 FLASH
Собственно прошивальщик от НИИЭТ, работает.
https://gitflic.ru/project/niiet/k1921vkx_flasher
Мы на его основе под свои требования bootloader делали.
https://gitflic.ru/project/niiet/k1921vkx_flasher
Мы на его основе под свои требования bootloader делали.
Re: 1921ВК035 FLASH
Вы дали ссылку на программу загрузки, это я видел и в курсе. Как я понимаю, в контроллере уже должен лежать загрузчик, вероятно в NVR FLASH, через который и происходит обновление ПО. Или я неправильно это понимаю?
Судя по интерфейсу программы (Выбор области - Основная - NVR/Info), ей без разнице куда шить. И тут уже совсем не понятно.
Поэтому вопрос, как прошить в NVR сам загрузчик? Это нигде не освещается.
Судя по интерфейсу программы (Выбор области - Основная - NVR/Info), ей без разнице куда шить. И тут уже совсем не понятно.
Поэтому вопрос, как прошить в NVR сам загрузчик? Это нигде не освещается.
Re: 1921ВК035 FLASH
Хотелось бы прояснить терминологию, чтобы не было недопонимания.nppsem писал(а): ↑21 ноя 2025, 09:01 Собственно прошивальщик от НИИЭТ, работает.
https://gitflic.ru/project/niiet/k1921vkx_flasher
Мы на его основе под свои требования bootloader делали.
1 вариант:
Мы подключаемся к контроллеру через UART (какой ?) и через bootloader обновляем прошивку?
2 вариант:
Мы подключаемся к адаптеру(какому ?), который подключен к контроллеру через JTAG? SWD? и обновляем прошивку?
Считаю что прошивальщик и bootloader разные вещи?
Какой вариант у вас?
Re: 1921ВК035 FLASH
Алгоритм, со слов нашего программиста, примерно такой:
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
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
Re: 1921ВК035 FLASH
Спасибо за ответ. Пытаюсь разбираться с 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 и обновляем рабочие прошивки?
Просмотрел скрипты из папки 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 и обновляем рабочие прошивки?
Re: 1921ВК035 FLASH
Для записи загрузчика 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 надо копаться.
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 надо копаться.
Re: 1921ВК035 FLASH
Ещё есть вариант прошиться: 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.
Re: 1921ВК035 FLASH
Бит BMODEDIS приводит к загрузке из nvr, но нигде не сказано, что он открывает доступ записи в nvr. Согласно с РП только через mflash.
В какой папке искать все то что добавил нииэт?
Re: 1921ВК035 FLASH
Я собственно привёл рабочую последовательность прошивки nvr. Пользоваться или нет - это уже Ваше дело.Бит BMODEDIS приводит к загрузке из nvr, но нигде не сказано, что он открывает доступ записи в nvr. Согласно с РП только через mflash.
По п.2:
https://github.com/DCVostok/openocd-k19 ... 921vk035.c
Кстати, тамже лежит проект загрузчика, на gcc, при желании можно и Кейлом собрать:
https://github.com/DCVostok/bootloader-k1921vk035
и проект прошивальщика с гуём и без:
https://github.com/DCVostok/k1921vkx_flasher
