Сброс FLASH-памяти

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

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

Ответить
ezlydnev
Сообщения: 10
Зарегистрирован: 11 фев 2021, 11:50
Предприятие: НИИИТ-РК

Сброс FLASH-памяти

Сообщение ezlydnev »

Контролер завис и не хочет работать.

Цитата в руководстве по эксплуатации.
"Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание."

Как можно это сделать в KEIL? Не могу понять что это за команды.
Аватара пользователя
Disona
Сообщения: 81
Зарегистрирован: 06 дек 2016, 11:18
Предприятие: НПФ Вектор
Откуда: Москва
Контактная информация:

Re: Сброс FLASH-памяти

Сообщение Disona »

Здравствуйте.

Вам, грубо говоря, нужно подключиться к контроллеру - начать отладочную сессию - и записать в память по адресу 0x80030164 значение "0x1".
Сам я с Кейлом никогда не работал и не знаю, как в нём правильно подключиться к контроллеру без последующей загрузки программы, но может быть вот эта ссылка будет полезной: https://www.keil.com/support/docs/3697.htm
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"
dav
Сообщения: 209
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Сброс FLASH-памяти

Сообщение dav »

Доброго времени суток!

В алгоритме программирования Flash, входящего в состав пака "NIIET.K1921VK01T_DFP.2.0.7.pack" реализована возможность очистки памяти микроконтроллера в режиме аварийного стирания. Для этого необходимо:
1) Подключить вывод H2 через токоограничивающий резистор 10кОм к +3.3В
2) Осуществить аппаратный сброс микроконтроллера
3) В IDE Keil выбрать пункт меню "Flash -> Erase"
Очистка памяти микроконтроллера в IDE Keil
Очистка памяти микроконтроллера в IDE Keil
Keil_ChipErase.JPG (25.58 КБ) 1141 просмотр
ezlydnev
Сообщения: 10
Зарегистрирован: 11 фев 2021, 11:50
Предприятие: НИИИТ-РК

Re: Сброс FLASH-памяти

Сообщение ezlydnev »

Спасибо большое за ответы. Сделал через 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 раза чаще. Но эффекта особо нет, мигают даже медленнее. С делителем мигают гораздо медленней чем просто от генератора т.е. реагируют на это.
Пытался разогнать, поменял коэффициенты и микроконтроллер завис. Значит слишком большая частота.
Подскажите почему такое может быть?

Код настройки:

Код: Выделить всё

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;
}
dav
Сообщения: 209
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Сброс FLASH-памяти

Сообщение dav »

Доброго времени суток!

Отдельный джампер по выводу 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;
Примеры, пакет интеграции для 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):

Код: Выделить всё

    NT_COMMON_REG->GPIODEN3_bit.PORTH |= (1 << 0);
    NT_COMMON_REG->GPIOPCTLH_bit.PIN0 = 1;
    NT_GPIOH->ALTFUNCSET = (1 << 0);
После этого на порт H0 будет передаваться сигнал частоты в 2 раза меньше частоты PLL.
Последний раз редактировалось dav 26 фев 2021, 10:18, всего редактировалось 2 раза.
Причина: уточнения
редактор
Сообщения: 27
Зарегистрирован: 08 ноя 2016, 09:10

Re: Сброс FLASH-памяти

Сообщение редактор »

ezlydnev писал(а): 25 фев 2021, 14:37 Контролер завис и не хочет работать.

Цитата в руководстве по эксплуатации.
"Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда записи значения 00000001h в регистр FLASH_FULL_ERASE (0x80030164), после чего будет активировано полное стирание."

Как можно это сделать в KEIL? Не могу понять что это за команды.
Подключиться к МК из пустого проекта без загрузки кода в МК, затем в окне Command ввести
*((int*)0x80030164)=1
Через окно Command мы из адреса регистра делаем указатель, а затем по этому указателю (си-подобный интерфейс) записываем нужное значение.
Вообще через это окно можно оперативно менять или просматривать переменные и регистры МК используя числовые адреса или имена
ezlydnev
Сообщения: 10
Зарегистрирован: 11 фев 2021, 11:50
Предприятие: НИИИТ-РК

Re: Сброс FLASH-памяти

Сообщение ezlydnev »

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;
Здравствуйте, при ваших настройках получается что параметр VCOFvco = 588 МГц, частота с выхода PLL 196 МГц. В документации максимальный предел VCOFvco 500 МГц. Это не повлияет на работоспособность микроконтроллера? Вы используете выход PLL деленый еще на 2 ?
Ответить

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