Flash память К1921ВК01Т

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

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

Ответить
steksor
Сообщения: 3
Зарегистрирован: 28 апр 2017, 14:23
Предприятие: Сумма Технологии

Flash память К1921ВК01Т

Сообщение steksor » 28 апр 2017, 14:37

Несколько вопросов по работе с Flash памятью

1. Flash память. Полное стирание.

Каким образом произойдет стирание Flash памяти, если, согласно п.7.3 ТО на К1921ВК01Т, установить на ножку H2 лог. единицу и после сброса по JTAG или SWD подать команду записи значения 0x00000001 в регистр FLASH_FULL_ERASE ?
Произойдет стирание:
а) основного блока загрузочной Flash ?
б) информационного блока загрузочной Flash ?
в) основого блока пользовательской Flash ?
г) информационного блока пользовательской Flash ?
д) INFO_WORD и биты защиты страниц тоже обнуляться?

2. Flash память. Защищенный блок.

Из защищенного (информационного) блока flash-памяти возможно чтение только при загрузке программы из него? То есть при выполнении программы из основной загрузочной памяти нельзя прочесть содержимое защищенного блока?
В ТО на К1921ВК01Т написано, что в защищенном блоке можно хранить важные данные. Тогда читать эти данные может только программа исполняемая из этого блока?

3. Flash память. Загрузчик.

Т.к. загрузочная Flash память у К1921ВК01Т имеет два блока (основной и защищенный), которые имеют одинаковые начальные адреса (0x0000), исполнение кода из которых зависит от бита BOOT_FROM_IFB регистра INFO_WORD, то возможно ли загрузить в защищенный блок загрузочной памяти бутлоадер, который бы запускался всегда при старте МК, проверял нужно ли перепрошить в основную область загрузочной памяти программу, а затем, без сброса МК переходил к исполнению программы в основную область загрузочной памяти, начиная с адреса 0x0000 ?
Или для этого нужно чтобы исполняемая программа из защищенного блока после загрузки кода в основной блок, установила бит BOOT_FROM_IFB и сбросила МК, чтобы он запустился уже с начала основного блока? Или же бутлоадер, находясь в адресах с 0x0000 – 0x1FFF защищенного блока, может перейти к исполнению программы в основной блок только начиная с адреса 0x2000? Тогда память 0x0000 – 0x1FFF основного блока не будет являться частью исполняемой программы?

bkolbov
Сообщения: 204
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Flash память К1921ВК01Т

Сообщение bkolbov » 02 май 2017, 09:31

Здравствуйте!
steksor писал(а):
28 апр 2017, 14:37
1. Flash память. Полное стирание.

Каким образом произойдет стирание Flash памяти, если, согласно п.7.3 ТО на К1921ВК01Т, установить на ножку H2 лог. единицу и после сброса по JTAG или SWD подать команду записи значения 0x00000001 в регистр FLASH_FULL_ERASE ?
Произойдет стирание:
а) основного блока загрузочной Flash ?
б) информационного блока загрузочной Flash ?
в) основого блока пользовательской Flash ?
г) информационного блока пользовательской Flash ?
д) INFO_WORD и биты защиты страниц тоже обнуляться?
а)б)в)г)д) - да, произойдет. Сотрется полностью все.
steksor писал(а):
28 апр 2017, 14:37
2. Flash память. Защищенный блок.

Из защищенного (информационного) блока flash-памяти возможно чтение только при загрузке программы из него? То есть при выполнении программы из основной загрузочной памяти нельзя прочесть содержимое защищенного блока?
В ТО на К1921ВК01Т написано, что в защищенном блоке можно хранить важные данные. Тогда читать эти данные может только программа исполняемая из этого блока?
Да, читать любые данные из информационного блока основной flash-памяти возможно только при загрузке из него. При выполнении программы из основной загрузочной памяти нельзя прочесть содержимое защищенного блока.
steksor писал(а):
28 апр 2017, 14:37
3. Flash память. Загрузчик.

Т.к. загрузочная Flash память у К1921ВК01Т имеет два блока (основной и защищенный), которые имеют одинаковые начальные адреса (0x0000), исполнение кода из которых зависит от бита BOOT_FROM_IFB регистра INFO_WORD, то возможно ли загрузить в защищенный блок загрузочной памяти бутлоадер, который бы запускался всегда при старте МК, проверял нужно ли перепрошить в основную область загрузочной памяти программу, а затем, без сброса МК переходил к исполнению программы в основную область загрузочной памяти, начиная с адреса 0x0000 ?
Нет, так не получится.
steksor писал(а):
28 апр 2017, 14:37
Или для этого нужно чтобы исполняемая программа из защищенного блока после загрузки кода в основной блок, установила бит BOOT_FROM_IFB и сбросила МК, чтобы он запустился уже с начала основного блока? Или же бутлоадер, находясь в адресах с 0x0000 – 0x1FFF защищенного блока, может перейти к исполнению программы в основной блок только начиная с адреса 0x2000? Тогда память 0x0000 – 0x1FFF основного блока не будет являться частью исполняемой программы?
Да, основную исполняемую программу необходимо линковать с учетом того, что она будет начинать исполняться с адреса 0x00002000. Либо, как вы написали, можно устанавливать BOOT_FROM_IFB в конце работы бутлоадера и сбрасывать МК (только сброс по питанию или внешний сброс подойдут в этом случае), но при этом основная программа должна обратно записать нуль в этот бит, чтобы мк при старте всегда сперва заходил в бутлоадер.

Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

Re: Flash память К1921ВК01Т

Сообщение Роман » 25 фев 2019, 15:01

А как именно подать команду записи значения 0x00000001 в регистр FLASH_FULL_ERASE ?
Ошибка в инициализации привела к тому что подключаться отладчик перестал (что-то типа target not halted),
на плате от мехатроники легкосъёмной перемычки не предусмотрено - паять надо,
подал туда 3.3в, вроде появились признаки жизни:

$openocd -f interface/cmsis-dap.cfg -c "transport select swd" -f target/k1921vk01t.cfg -c "adapter_khz 5000"
Open On-Chip Debugger 0.10.0+dev-00409-g7b94ae9-dirty (2018-05-04-15:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
swd
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
cortex_m reset_config sysresetreq
adapter speed: 5000 kHz
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 5000 kHz
Info : SWD DPIDR 0x2ba01477
Info : k1921vk01t.cpu: hardware has 0 breakpoints, 0 watchpoints
Info : Listening on port 3333 for gdb connections

но смущает "Info : k1921vk01t.cpu: hardware has 0 breakpoints, 0 watchpoints",
при попытке подключится из gdb:
(gdb) target remote localhost:3333
в консоли openocd выводит следующее:

Info : accepting 'gdb' connection on tcp/3333
Warn : target was in unknown state when halt was requested
Info : Halt timed out, wake up GDB.
Error: timed out while waiting for target halted


Error: Userflash operation timeout
Исключение в операции с плавающей точкой (сделан дамп памяти)

при попытке повторить opencd выдаёт сообщения такого типа :

Polling target k1921vk01t.cpu failed, trying to reexamine
Error: Could not find MEM-AP to control the core
Examination failed, GDB will be halted. Polling again in 100ms
Polling target k1921vk01t.cpu failed, trying to reexamine
Error: Could not find MEM-AP to control the core
Examination failed, GDB will be halted. Polling again in 300ms
Info : SWD DPIDR 0x2ba01477
Polling target k1921vk01t.cpu failed, trying to reexamine
Info : k1921vk01t.cpu: hardware has 0 breakpoints, 0 watchpoints
Polling target k1921vk01t.cpu failed, trying to reexamine
Error: Could not find MEM-AP to control the core
Examination failed, GDB will be halted. Polling again in 100ms
Polling target k1921vk01t.cpu failed, trying to reexamine
Error: Could not find MEM-AP to control the core
Examination failed, GDB will be halted. Polling again in 300ms
Info : SWD DPIDR 0x2ba01477

Как оживить?

Аватара пользователя
Лашкевич
Сообщения: 183
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Flash память К1921ВК01Т

Сообщение Лашкевич » 25 фев 2019, 15:07

Припишите к openocd поманду
-c "niietcm4 service_mode_erase 0"
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

dav
Сообщения: 63
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Flash память К1921ВК01Т

Сообщение dav » 25 фев 2019, 15:11

Для перевода в нормальный режим работы контроллера (например, после некорректной конфигурации контроллера) необходимо осуществить процедуру Аварийного стирания всей Flash памяти контроллера(п. 7.3, страница 42 ТО на микроконтроллер 1921ВК01Т):

- Во время сброса микроконтроллера анализируется состояние вывода H2. Если вывод находится в состоянии логической единицы (подтянут к 3,3 В через токоограничивающий резистор), то загрузочная и пользовательская флеш-памяти (включая защищенный и информационный блоки) переводятся в режим, в котором чтение запрещено (при чтении возвращаются нули).
- Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание.

Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

Re: Flash память К1921ВК01Т

Сообщение Роман » 25 фев 2019, 15:16

Error: The 'service_mode_erase' command must be used after 'init'.
Попробовал -c "init niietcm4 service_mode_erase 0", выводopenocd:
Open On-Chip Debugger 0.10.0+dev-00409-g7b94ae9-dirty (2018-05-04-15:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
swd
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
cortex_m reset_config sysresetreq
dap init
flash init
init
mflash init
nand init
noinit
pld init
power_restore
srst_deasserted
target init
transport init

Оно?

Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

Re: Flash память К1921ВК01Т

Сообщение Роман » 25 фев 2019, 15:24

dav писал(а):
25 фев 2019, 15:11
- Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание.
Вопрос был про эту часть, я так понял что параметр -c "niietcm4 service_mode_erase 0" у openocd сделает это?

bkolbov
Сообщения: 204
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Flash память К1921ВК01Т

Сообщение bkolbov » 25 фев 2019, 15:25

Для каждой команды должен быть отдельно ключ -c:
-c "init" -c "niietcm4 service_mode_erase 0"
Вопрос был про эту часть, я так понял что параметр -c "niietcm4 service_mode_erase 0" у openocd сделает это?
Да, openocd это и выполняет.

Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

Re: Flash память К1921ВК01Т

Сообщение Роман » 25 фев 2019, 16:52

Пациент жив, спасибо:), (там на самом деле ничего паять не надо было - 1к никому не мешает).

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость