Flash память К1921ВК01Т
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Flash память К1921ВК01Т
Несколько вопросов по работе с 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 основного блока не будет являться частью исполняемой программы?
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 основного блока не будет являться частью исполняемой программы?
Re: Flash память К1921ВК01Т
Здравствуйте!
а)б)в)г)д) - да, произойдет. Сотрется полностью все.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 и биты защиты страниц тоже обнуляться?
Да, читать любые данные из информационного блока основной flash-памяти возможно только при загрузке из него. При выполнении программы из основной загрузочной памяти нельзя прочесть содержимое защищенного блока.steksor писал(а): ↑28 апр 2017, 14:37 2. Flash память. Защищенный блок.
Из защищенного (информационного) блока flash-памяти возможно чтение только при загрузке программы из него? То есть при выполнении программы из основной загрузочной памяти нельзя прочесть содержимое защищенного блока?
В ТО на К1921ВК01Т написано, что в защищенном блоке можно хранить важные данные. Тогда читать эти данные может только программа исполняемая из этого блока?
Нет, так не получится.steksor писал(а): ↑28 апр 2017, 14:37 3. Flash память. Загрузчик.
Т.к. загрузочная Flash память у К1921ВК01Т имеет два блока (основной и защищенный), которые имеют одинаковые начальные адреса (0x0000), исполнение кода из которых зависит от бита BOOT_FROM_IFB регистра INFO_WORD, то возможно ли загрузить в защищенный блок загрузочной памяти бутлоадер, который бы запускался всегда при старте МК, проверял нужно ли перепрошить в основную область загрузочной памяти программу, а затем, без сброса МК переходил к исполнению программы в основную область загрузочной памяти, начиная с адреса 0x0000 ?
Да, основную исполняемую программу необходимо линковать с учетом того, что она будет начинать исполняться с адреса 0x00002000. Либо, как вы написали, можно устанавливать BOOT_FROM_IFB в конце работы бутлоадера и сбрасывать МК (только сброс по питанию или внешний сброс подойдут в этом случае), но при этом основная программа должна обратно записать нуль в этот бит, чтобы мк при старте всегда сперва заходил в бутлоадер.steksor писал(а): ↑28 апр 2017, 14:37 Или для этого нужно чтобы исполняемая программа из защищенного блока после загрузки кода в основной блок, установила бит BOOT_FROM_IFB и сбросила МК, чтобы он запустился уже с начала основного блока? Или же бутлоадер, находясь в адресах с 0x0000 – 0x1FFF защищенного блока, может перейти к исполнению программы в основной блок только начиная с адреса 0x2000? Тогда память 0x0000 – 0x1FFF основного блока не будет являться частью исполняемой программы?
Re: Flash память К1921ВК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
кортекс_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/ТМС = 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
Как оживить?
Ошибка в инициализации привела к тому что подключаться отладчик перестал (что-то типа 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
кортекс_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/ТМС = 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
Как оживить?
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: Flash память К1921ВК01Т
Припишите к openocd поманду
-c "niietcm4 service_mode_erase 0"
-c "niietcm4 service_mode_erase 0"
-
- Сообщения: 208
- Зарегистрирован: 14 дек 2015, 09:21
- Предприятие: АО НИИЭТ
- Откуда: АО НИИЭТ, Воронеж
Re: Flash память К1921ВК01Т
Для перевода в нормальный режим работы контроллера (например, после некорректной конфигурации контроллера) необходимо осуществить процедуру Аварийного стирания всей Flash памяти контроллера(п. 7.3, страница 42 ТО на микроконтроллер 1921ВК01Т):
- Во время сброса микроконтроллера анализируется состояние вывода H2. Если вывод находится в состоянии логической единицы (подтянут к 3,3 В через токоограничивающий резистор), то загрузочная и пользовательская флеш-памяти (включая защищенный и информационный блоки) переводятся в режим, в котором чтение запрещено (при чтении возвращаются нули).
- Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание.
- Во время сброса микроконтроллера анализируется состояние вывода H2. Если вывод находится в состоянии логической единицы (подтянут к 3,3 В через токоограничивающий резистор), то загрузочная и пользовательская флеш-памяти (включая защищенный и информационный блоки) переводятся в режим, в котором чтение запрещено (при чтении возвращаются нули).
- Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание.
Re: Flash память К1921ВК01Т
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
кортекс_m reset_config sysresetreq
dap init
flash init
init
mflash init
nand init
noinit
pld init
power_restore
srst_deasserted
target init
transport 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
кортекс_m reset_config sysresetreq
dap init
flash init
init
mflash init
nand init
noinit
pld init
power_restore
srst_deasserted
target init
transport init
Оно?
Re: Flash память К1921ВК01Т
Вопрос был про эту часть, я так понял что параметр -c "niietcm4 service_mode_erase 0" у openocd сделает это?
Re: Flash память К1921ВК01Т
Для каждой команды должен быть отдельно ключ -c:
-c "init" -c "niietcm4 service_mode_erase 0"
-c "init" -c "niietcm4 service_mode_erase 0"
Да, openocd это и выполняет.Вопрос был про эту часть, я так понял что параметр -c "niietcm4 service_mode_erase 0" у openocd сделает это?
Re: Flash память К1921ВК01Т
Пациент жив, спасибо:), (там на самом деле ничего паять не надо было - 1к никому не мешает).