ListenReality
Участник-
Постов
19 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о ListenReality
-
Звание
Участник
- День рождения 20.09.1992
Информация
-
Город
Array
-
МК после сброса по WatchDog
ListenReality ответил ListenReality тема в MSP430
Спасибо всем за помощь. Впредь буду детальнее читать Help На всякий случай оставлю пример. Программа считает количество WatchDog'ов #pragma NOINIT (x ); int x; int main(void) { /*настройка сторожевого таймера*/ WDTCTL = WDTPW // ключ защиты //+ WDTNMI // 0 - Вход аппаратного сброса, 1 - вход прервания //+ WDTTMSEL // 0 - режим сторожевого таймера, 1 - интервальный таймер + WDTCNTCL // Обнуляем таймер + WDTSSEL; // 0 - тактовый сигнал от SMCLK, 1 - ACLK //+ WDTIS0; //+ WDTIS1; IE1 = WDTIE;// разрешаем прерывания от сторожевого таймера BCSCTL3 = LFXT1S_2;//задаем для ACLK источник тактирования VLO DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг x++; } else x=0; } -
МК после сброса по WatchDog
ListenReality ответил ListenReality тема в MSP430
Вы видимо не правильно поняли. 1) Включение МК по питанию(сигнал POR и PUC) 2) Сброс МК по WatchDog(только сигнал PUC). Программа начинает выполняться с начала, но есть бит, который указывает, что мы сбросились именно по WatchDog. if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг countWatchDog++; } Поставлю вопрос тогда так. Где и как мне объявить переменную countWatchDog, чтобы: 1) Если включились по питанию, countWatchDog=0; 2) Если сброс по WatchDog, то countWatchDog++; По сути нужно посчитать кол-во сбросов по WatchDog. Пробовал: Объявлял переменную за функцией main по-разному: int countWatchDog; static int countWatchDog; При этом main выглядит примерно так: int main(void) { /*настройка сторожевого таймера*/ WDTCTL = WDTPW // ключ защиты + WDTCNTCL // Обнуляем таймер + WDTSSEL; // 0 - тактовый сигнал от SMCLK, 1 - ACLK IE1 = WDTIE;// разрешаем прерывания от сторожевого таймера BCSCTL3 = LFXT1S_2;//задаем для ACLK источник тактирования VLO if((IFG1&WDTIFG)!=WDTIFG)//по питанию { countWatchDog=0; } if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг countWatchDog++; } } При этом в случае, когда "int countWatchDog;" переменная всегда = 0 В случае, когда "static int countWatchDog;" переменная всегда равна 0х261. И в отладчике, после прохождения строчки "countWatchDog=0;" - значение переменной не меняется. -
МК после сброса по WatchDog
ListenReality ответил ListenReality тема в MSP430
А можете подсказать как в CCS решить эту проблему ? -
МК после сброса по WatchDog
ListenReality ответил ListenReality тема в MSP430
mcheb, k155la3 Спасибо за ваши ответы. Не вижу файла "lnk430F149.xcl" или подобного для моего МК. Есть только "lnk_msp430f2012.cmd", но содержимое его не похоже на то, что писали вы. MEMORY { SFR : origin = 0x0000, length = 0x0010 PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0 PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100 RAM : origin = 0x0200, length = 0x0080 INFOA : origin = 0x10C0, length = 0x0040 INFOB : origin = 0x1080, length = 0x0040 INFOC : origin = 0x1040, length = 0x0040 INFOD : origin = 0x1000, length = 0x0040 FLASH : origin = 0xF800, length = 0x07E0 INT00 : origin = 0xFFE0, length = 0x0002 INT01 : origin = 0xFFE2, length = 0x0002 INT02 : origin = 0xFFE4, length = 0x0002 INT03 : origin = 0xFFE6, length = 0x0002 INT04 : origin = 0xFFE8, length = 0x0002 INT05 : origin = 0xFFEA, length = 0x0002 INT06 : origin = 0xFFEC, length = 0x0002 INT07 : origin = 0xFFEE, length = 0x0002 INT08 : origin = 0xFFF0, length = 0x0002 INT09 : origin = 0xFFF2, length = 0x0002 INT10 : origin = 0xFFF4, length = 0x0002 INT11 : origin = 0xFFF6, length = 0x0002 INT12 : origin = 0xFFF8, length = 0x0002 INT13 : origin = 0xFFFA, length = 0x0002 INT14 : origin = 0xFFFC, length = 0x0002 RESET : origin = 0xFFFE, length = 0x0002 } /****************************************************************************/ /* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */ /****************************************************************************/ SECTIONS { .bss : {} > RAM /* GLOBAL & STATIC VARS */ .data : {} > RAM /* GLOBAL & STATIC VARS */ .sysmem : {} > RAM /* DYNAMIC MEMORY ALLOCATION AREA */ .stack : {} > RAM (HIGH) /* SOFTWARE SYSTEM STACK */ .text : {} > FLASH /* CODE */ .cinit : {} > FLASH /* INITIALIZATION TABLES */ .const : {} > FLASH /* CONSTANT DATA */ .cio : {} > RAM /* C I/O BUFFER */ .pinit : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .init_array : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .mspabi.exidx : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .mspabi.extab : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */ .infoB : {} > INFOB .infoC : {} > INFOC .infoD : {} > INFOD /* MSP430 INTERRUPT VECTORS */ .int00 : {} > INT00 .int01 : {} > INT01 PORT1 : { * ( .int02 ) } > INT02 type = VECT_INIT PORT2 : { * ( .int03 ) } > INT03 type = VECT_INIT USI : { * ( .int04 ) } > INT04 type = VECT_INIT ADC10 : { * ( .int05 ) } > INT05 type = VECT_INIT .int06 : {} > INT06 .int07 : {} > INT07 TIMERA1 : { * ( .int08 ) } > INT08 type = VECT_INIT TIMERA0 : { * ( .int09 ) } > INT09 type = VECT_INIT WDT : { * ( .int10 ) } > INT10 type = VECT_INIT .int11 : {} > INT11 .int12 : {} > INT12 .int13 : {} > INT13 NMI : { * ( .int14 ) } > INT14 type = VECT_INIT .reset : {} > RESET /* MSP430 RESET VECTOR */ } -
МК после сброса по WatchDog
ListenReality опубликовал тема в MSP430
Всем привет. Проблема такая: Необходимо завести такую переменную, которая после сброса МК по WatchDog сохранит свое значение. Пробовал через static. Но видимо я чего-то глубоко не понимаю. Если переменную не инициализировать, то в ней рандомное значение, которое нельзя никак изменить. (А писать static int i=0 глупо, т.к. оно каждый раз будет обнуляться). Вообще возможно ли это? или МК после сброса по WatchDog затирает память? -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
Может кому пригодится. Проблема решена так: Приобрел MSP-FET оригинальный http://www.ti.com/tool/msp-fet Соединил все, как здесь: http://processors.wiki.ti.com/index.php ... pinout.JPG только R2 сделал перемычкой. Прожигаю с помощью CCSv6, через FET-Pro430 не пробовал еще(жалко жечь МК зря). Думаю, через FET-Pro430 тоже будет работать. -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
Но при этом, если схема полностью собрана(стоит R2 и соединены TEST/VPP с TEST/SBWTCK), то результат FAIL, как на скрине выше. В чем может быть причина ? Схема собрана не правильно - разультат "PASS", схема собрана правильно - результат "FAIL". -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
Note C в схеме: R2 = 0, а TEST/VPP не соединяется. Или я не так что-то понял ? Окно программы, если все-таки соединить TEST/VPP и TEST/SBWTCK. -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
Ребята, проблема не решена Поправьте меня, если что не так. Собираю следующую схему Только сопротивление R2 убираю и разрываю соединение TEST/VPP и TEST/SBWTCK. Подключаю к компу MSP-FET430UIF (правда китайская копия). Открываю программу FETPro430. Память МК читаю без проблем, зашиваю прошивку в Hex-виде. При попытка прожига перемычки программа выглядит так: Но фактически перемычка не пережигается. Пожалуйста, без троллинга, типа "твоя прошивка никому не нужна". -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
slavokhire5 МК msp430f2012, на сколько мне известно в нем нет BSL (если я правильно понял о чем вы говорите) -
Fet-Pro430
ListenReality ответил keks9357 тема в MSP430
на сколько мне известно JTAG только перемычкой отключается(хотя где-то читал, что все зависит от МК, и есть серии, где JTAG паролится) Меня интересует, BSL. На всех ли МК он есть? -
Бит защиты
ListenReality ответил ListenReality тема в MSP430
jcxz, Смешно Программу будет писать другой человек, мне просто поставили задачу научиться защищать прошивку от копирования. -
Прочитать код с контроллера
ListenReality ответил ListenReality тема в MSP430
Это все делал, IAR говорит, что устройство не найдено На сколько мне известно, есть просто Spy-by-Wire, а есть JTAG Spy-by-Wire. В некоторых утилитках их разделяют. Может и зря Проект будет делать другой человек, я лишь должен научиться защищать прошивку. http://electronix.ru/forum/lofiversion/index.php/t78846.html 6-той пост В английском не силен, даташиты на русском не встречал. Поэтому и лазию по форумам, собирая инфу. -
Прочитать код с контроллера
ListenReality ответил ListenReality тема в MSP430
Obam Есть то он есть, но программатор видеть отказывается. Возможно из-за конфликта библиотек с CCS, где то слышал что такое бывает. А в ССS найти подобную штучку немогу И у меня кстати вот так: -
Прочитать код с контроллера
ListenReality ответил ListenReality тема в MSP430
Спасибо, что подтвердили мои предположения. Рядом сидит коллега и говорит "Как это в одну сторону можно( Си->Hex), а в другую нельзя?". А у меня откуда то сложилось мнение, что если код откомпилирован, то с ним уже ничего не поделать (если правильно понимаю, в пример можно привести *.exe, обратно в Си же его не переведешь). E.V.G выше все написал :rolleyes: В общем после двухдневных танцов с бубном, библиотеками и разного рода утилитками, получилось считать прошивку МК с помощью "FET-Pro430". Остальные утилитки отказывались работать напрочь (пришел к выводу, что скорее всего конфликты библиотек, т.к. на ПК установлены CCSv6 и 2 IARa). Прошивку я сам у себя украл, а значит может украсть и кто-то другой. Теперь вопрос, который я уже задавал, но до конца так и не разобрался. Сейчас, если я пережгу у МК fuse, я потеряю возможность работы по JTAG(программирование, отладка и самое главное считывание прошивки), правильно? После этого смогу ли я прошивать по Spy-by-Wire? Смогу ли я прошивать по BSL, а главное считывать прошивку? Если да, то как защититься от такого считывания по BSL?