Я пока упражняюсь с примером на базе Run_leds. Только добавил в platform/source/system_k1921vg015.c раздел для установленного у меня 8-мегагерцового кварца:
Код: Выделить всё
#if (HSECLK_VAL == 8000000)
RCU->PLLSYSCFG0 =( 7 << RCU_PLLSYSCFG0_PD1B_Pos) | //PD1B
( 7 << RCU_PLLSYSCFG0_PD1A_Pos) | //PD1A
( 1 << RCU_PLLSYSCFG0_PD0B_Pos) | //PD0B
( 3 << RCU_PLLSYSCFG0_PD0A_Pos) | //PD0A
( 1 << RCU_PLLSYSCFG0_REFDIV_Pos) | //refdiv
( 0 << RCU_PLLSYSCFG0_FOUTEN_Pos) | //fouten
( 0 << RCU_PLLSYSCFG0_DSMEN_Pos) | //dsmen
( 0 << RCU_PLLSYSCFG0_DACEN_Pos) | //dacen
( 3 << RCU_PLLSYSCFG0_BYP_Pos) | //bypass
( 1 << RCU_PLLSYSCFG0_PLLEN_Pos); //en
RCU->PLLSYSCFG1 = 0; //FRAC = 0
RCU->PLLSYSCFG2 = 50; //FBDIV
Сейчас попробовал со стиранием. Команда "k1921vg015 srv_erase" успешно стёрла память, но на результат последующей попытки выключения JTAG-а это не повлияло.
Попробовал зайти с другой стороны.
В руководстве пользователя в разделе 7.1 "Flash-память" написано:
Помимо основной области памяти (1 Мбайт), доступной как через глобальное адресное пространство, так и через регистры контроллера, существует дополнительная NVR область (две страницы по 4 Кбайт в диапазоне 0x0000 – 0x1FFF). В последней ячейке второй страницы NVR области располагается конфигурационное слово микроконтроллера CFGWORD.
Пробуем прочитать:
Код: Выделить всё
$ openocd -f connect_jlink_jtag.cfg -c "k1921vg015 read nvr 0x1FF0" -c "resume" -c "exit"
...
Read MFLASH nvr region:
addr = 0x1ff0, data = 0xffffffff
addr = 0x1ff4, data = 0xffffffff
addr = 0x1ff8, data = 0xffffffff
addr = 0x1ffc, data = 0xffffffff
Везде FF.
Ок, давайте запишем туда что-нибудь вручную.
Смотрим таблицу 7.3: бит 0 - защита основной памяти, бит 1 - защита области NVR, бит 2 - вкл/выкл JTAG. Попробуем сбросить все три:
Код: Выделить всё
$ openocd -f connect_jlink_jtag.cfg -c "k1921vg015 write nvr erase 0x1FF0 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFF8" -c "resume" -c "exit"
...
Write MFLASH nvr region (erase sector data):
addr = 0x1ff0, data = 0xffffffff,
addr = 0x1ff4, data = 0xffffffff,
addr = 0x1ff8, data = 0xffffffff,
addr = 0x1ffc, data = 0xfffffff8,
Please wait ...
done!
Отключаем питание у платы и программатора. Несколько секунд ждём. Для верности коротим цепь VAON на землю. Подключаем всё обратно и пробуем прочитать:
Код: Выделить всё
$ openocd -f connect_jlink_jtag.cfg -c "k1921vg015 read nvr 0x1FF0" -c "resume" -c "exit"
...
Read MFLASH nvr region:
addr = 0x1ff0, data = 0xffffffff
addr = 0x1ff4, data = 0xffffffff
addr = 0x1ff8, data = 0xffffffff
addr = 0x1ffc, data = 0xfffffff8
JTAG работает. Восьмёрка на месте.
Попытка записать во flash память прошивку проходит успешно.
В общем, призываю на помощь НИИЭТ.