Контролер завис и не хочет работать.
Цитата в руководстве по эксплуатации.
"Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание."
Как можно это сделать в KEIL? Не могу понять что это за команды.
Сброс FLASH-памяти
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
- Disona
- Сообщения: 81
- Зарегистрирован: 06 дек 2016, 11:18
- Предприятие: НПФ Вектор
- Откуда: Москва
- Контактная информация:
Re: Сброс FLASH-памяти
Здравствуйте.
Вам, грубо говоря, нужно подключиться к контроллеру - начать отладочную сессию - и записать в память по адресу 0x80030164 значение "0x1".
Сам я с Кейлом никогда не работал и не знаю, как в нём правильно подключиться к контроллеру без последующей загрузки программы, но может быть вот эта ссылка будет полезной: https://www.keil.com/support/docs/3697.htm
Вам, грубо говоря, нужно подключиться к контроллеру - начать отладочную сессию - и записать в память по адресу 0x80030164 значение "0x1".
Сам я с Кейлом никогда не работал и не знаю, как в нём правильно подключиться к контроллеру без последующей загрузки программы, но может быть вот эта ссылка будет полезной: https://www.keil.com/support/docs/3697.htm
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"
ООО "НПФ Вектор"
-
- Сообщения: 209
- Зарегистрирован: 14 дек 2015, 09:21
- Предприятие: АО НИИЭТ
- Откуда: АО НИИЭТ, Воронеж
Re: Сброс FLASH-памяти
Доброго времени суток!
В алгоритме программирования Flash, входящего в состав пака "NIIET.K1921VK01T_DFP.2.0.7.pack" реализована возможность очистки памяти микроконтроллера в режиме аварийного стирания. Для этого необходимо:
1) Подключить вывод H2 через токоограничивающий резистор 10кОм к +3.3В
2) Осуществить аппаратный сброс микроконтроллера
3) В IDE Keil выбрать пункт меню "Flash -> Erase"
В алгоритме программирования Flash, входящего в состав пака "NIIET.K1921VK01T_DFP.2.0.7.pack" реализована возможность очистки памяти микроконтроллера в режиме аварийного стирания. Для этого необходимо:
1) Подключить вывод H2 через токоограничивающий резистор 10кОм к +3.3В
2) Осуществить аппаратный сброс микроконтроллера
3) В IDE Keil выбрать пункт меню "Flash -> Erase"
Re: Сброс FLASH-памяти
Спасибо большое за ответы. Сделал через VECTOR IDE, батник который в комплекте OPENCD идет помог восстановить контролер.
Работаю с платой мехатроники и пришлось отпаять на плате на резистор подтягивающий к земле, который шел на контакт H2 и потом припаять его назад. Считаю это недостаток платы, ведь можно сделать перемычку или dip switch какой-нибудь для удобства.
Получается контакт H2 как общего входа/вывода нельзя использовать, ведь он влияет на загрузку?
Но проблема из-за которой я окирпичил микроконтроллер так и не решилась.
Хотел разогнать до 100 МГц.
Fin = 24 МГц генератор.
Посчитал коэффициенты:
NF = 33
NR = 2
NO = 4 (регистр OD)
без делителя PLL_DIV.
В итоге получится Fvco = 99 МГц. Fref = 6 МГц. VCOFvco = 396 МГц.
Настроил и проверил на мигании светодиодов. Ожидал, что будут мигать в 4 раза чаще. Но эффекта особо нет, мигают даже медленнее. С делителем мигают гораздо медленней чем просто от генератора т.е. реагируют на это.
Пытался разогнать, поменял коэффициенты и микроконтроллер завис. Значит слишком большая частота.
Подскажите почему такое может быть?
Код настройки:
Код работы программы:
Работаю с платой мехатроники и пришлось отпаять на плате на резистор подтягивающий к земле, который шел на контакт H2 и потом припаять его назад. Считаю это недостаток платы, ведь можно сделать перемычку или dip switch какой-нибудь для удобства.
Получается контакт H2 как общего входа/вывода нельзя использовать, ведь он влияет на загрузку?
Но проблема из-за которой я окирпичил микроконтроллер так и не решилась.
Хотел разогнать до 100 МГц.
Fin = 24 МГц генератор.
Посчитал коэффициенты:
NF = 33
NR = 2
NO = 4 (регистр OD)
без делителя PLL_DIV.
В итоге получится Fvco = 99 МГц. Fref = 6 МГц. VCOFvco = 396 МГц.
Настроил и проверил на мигании светодиодов. Ожидал, что будут мигать в 4 раза чаще. Но эффекта особо нет, мигают даже медленнее. С делителем мигают гораздо медленней чем просто от генератора т.е. реагируют на это.
Пытался разогнать, поменял коэффициенты и микроконтроллер завис. Значит слишком большая частота.
Подскажите почему такое может быть?
Код настройки:
Код: Выделить всё
void RCC_init()
{
// Fin = 24 MGz
// NF = 33
// NR = 2
// NO = 4
// FVco = 99 MGz
NT_BOOTFLASH->T_ACC = 6; // ZADERKA PAMAYTI
NT_COMMON_REG->PLL_CTRL_bit.REFSEL = 0;//0 - XI_OSC (KVARC) ISTOCHNIK TAKTIROVANYA DLYA PLL
NT_COMMON_REG->PLL_CTRL_bit.PLL_DIV = 0;// DELYTELb pll N = 2*(PLL_DIV+1) delytelb na vyhode PLL
NT_COMMON_REG->PLL_OD = 3;// delyteli vnytri PLL_OD (0 - 0; 1,2 - 1/2; 3 - 1/4)
NT_COMMON_REG->PLL_NF = 31; // NF = PLL_NF+2 (PLL_NF: 0..255)
NT_COMMON_REG->PLL_NR = 0; // NR = PLL_NR+2
delay(10000000);
// Perevod MK na stabilnyy chastoty
NT_COMMON_REG->SYS_CLK = 3;// 3 - PLL bez delytelya, 4 - c delytelem PLL_DIV.
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != 3) {}// zhdem poka ne pereydet na chastoty pll
}
Код: Выделить всё
int main()
{
periph_init();
RCC_init();
delay(10);
while (1) {
NT_GPIOC ->DATAOUT ^= 0x3F00;
delay(25000000);
NT_GPIOC ->DATAOUT ^= 0x3F00;
delay(25000000);
};
return 0;
}
-
- Сообщения: 209
- Зарегистрирован: 14 дек 2015, 09:21
- Предприятие: АО НИИЭТ
- Откуда: АО НИИЭТ, Воронеж
Re: Сброс FLASH-памяти
Доброго времени суток!
Отдельный джампер по выводу H2 для проведения аварийного стирания предусмотрен на нашей плате макетно-отладочной (АО "НИИЭТ"), на плате LDM-SYSTEMS и MotorControlBoard-К1921ВК01Т версии 2 (НПФ Вектор) (при разработке платы они согласовывали с нами схему электрическую принципиальную).
Для запуска PLL на 100МГц от кварцевого резонатора 24МГц в наших примерах используем следующие настройки:
Примеры, пакет интеграции для Keil, файлы для интеграции мк в IAR, можно скачать с репозитория (K1921VKx_SDK).
Ссылка для загрузки актуальной версии K1921VKx_SDK: https://bitbucket.org/niietcm4/k1921vkx ... v1.6.0.zip
K1921VKx SDK - это набор программных средств разработки для микроконтроллеров НИИЭТ:
- К1921ВК035
- К1921ВК028
- К1921ВК01Т
Во всех примерах программ (из K1921VKx SDK) в файле "system_K1921VK01T.c" в зависимости от дефайна OSECLK_VAL, определенного в настройках проекта осуществляется настройка PLL на максимальную частоту 100МГц. Для кварцевого резонатора 24МГц достаточно в настройках проекта определить OSECLK_VAL=24000000.
Проконтролировать, на какой частоте PLL работает микроконтроллер возможно после настройки альтернативной функции порта H0 (PLLdiv2):
После этого на порт H0 будет передаваться сигнал частоты в 2 раза меньше частоты PLL.
Отдельный джампер по выводу H2 для проведения аварийного стирания предусмотрен на нашей плате макетно-отладочной (АО "НИИЭТ"), на плате LDM-SYSTEMS и MotorControlBoard-К1921ВК01Т версии 2 (НПФ Вектор) (при разработке платы они согласовывали с нами схему электрическую принципиальную).
Для запуска PLL на 100МГц от кварцевого резонатора 24МГц в наших примерах используем следующие настройки:
Код: Выделить всё
NT_COMMON_REG->PLL_OD = 3;
NT_COMMON_REG->PLL_NF = 98;
NT_COMMON_REG->PLL_NR = 4;
Ссылка для загрузки актуальной версии K1921VKx_SDK: https://bitbucket.org/niietcm4/k1921vkx ... v1.6.0.zip
K1921VKx SDK - это набор программных средств разработки для микроконтроллеров НИИЭТ:
- К1921ВК035
- К1921ВК028
- К1921ВК01Т
Во всех примерах программ (из K1921VKx SDK) в файле "system_K1921VK01T.c" в зависимости от дефайна OSECLK_VAL, определенного в настройках проекта осуществляется настройка PLL на максимальную частоту 100МГц. Для кварцевого резонатора 24МГц достаточно в настройках проекта определить OSECLK_VAL=24000000.
Проконтролировать, на какой частоте PLL работает микроконтроллер возможно после настройки альтернативной функции порта H0 (PLLdiv2):
Код: Выделить всё
NT_COMMON_REG->GPIODEN3_bit.PORTH |= (1 << 0);
NT_COMMON_REG->GPIOPCTLH_bit.PIN0 = 1;
NT_GPIOH->ALTFUNCSET = (1 << 0);
Последний раз редактировалось dav 26 фев 2021, 10:18, всего редактировалось 2 раза.
Причина: уточнения
Причина: уточнения
Re: Сброс FLASH-памяти
Подключиться к МК из пустого проекта без загрузки кода в МК, затем в окне Command ввестиezlydnev писал(а): ↑25 фев 2021, 14:37 Контролер завис и не хочет работать.
Цитата в руководстве по эксплуатации.
"Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание."
Как можно это сделать в KEIL? Не могу понять что это за команды.
*((int*)0x80030164)=1
Через окно Command мы из адреса регистра делаем указатель, а затем по этому указателю (си-подобный интерфейс) записываем нужное значение.
Вообще через это окно можно оперативно менять или просматривать переменные и регистры МК используя числовые адреса или имена
Re: Сброс FLASH-памяти
Здравствуйте, при ваших настройках получается что параметр VCOFvco = 588 МГц, частота с выхода PLL 196 МГц. В документации максимальный предел VCOFvco 500 МГц. Это не повлияет на работоспособность микроконтроллера? Вы используете выход PLL деленый еще на 2 ?dav писал(а): ↑26 фев 2021, 10:17
Для запуска PLL на 100МГц от кварцевого резонатора 24МГц в наших примерах используем следующие настройки:Код: Выделить всё
NT_COMMON_REG->PLL_OD = 3; NT_COMMON_REG->PLL_NF = 98; NT_COMMON_REG->PLL_NR = 4;