ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
1078205 Топик полностью
Гyдвин, волшебник (18.02.2021 19:25, просмотров: 419) ответил VLLV на MSP430: спустя 20 лет начала работы с ним и 5 лет окончания таки нужен загрузчик .
Обхожусь без трамплина (лень). Потому, естественно, без прерываний в загрузчике (радио, uart). Вот такая вот кривоватая, но действенная конструкция (заточено под G2553). Ну и за все время не было никаких проблем (> 10 тыс. девайсов). 
void clr_flash(void)
{
  char n;
unsigned char *ptrnum;
__disable_interrupt(); // на всякий пожарный... IFG1=0; /* clear interrupt flag1 */ FCTL2=0x0A542; /* select MCLK/3 for flash timing */ ptrnum=(unsigned char *) 0xD000; // адрес прикладной области FCTL3 = 0x0A500; /* Lock = 0 * //блокировка flash OFF */ for(n=0;n < 24;n++) // размер прикладной области 12 kb = 24 сегмента по 512 байт
{ FCTL1 = 0x0A502; /* ERASE = 1 //команда стирания */ *ptrnum=0; /* erase Flash segment */ __no_operation(); ptrnum+=0x200; // следующий 512 байт сегмент } ptrnum=(unsigned char *) 0x0FFFE; // запишем вектор сброса (переход на загрузчик 0xC000 ) FCTL1 = 0x0A540; /* WRT = 1 //команда записи */ *(ptrnum++)=0x00; __no_operation(); *(ptrnum)=0xc0; __no_operation();
FCTL3 = 0x0A518; /* Lock = 1 * //Блокировка flash ON */ }

Загрузчик находится в младших адресах flash. В этой функции стираю прикладную область flash посекторно, включая последний сектор с векторами. Сразу после этого пишу в вектор сброса адрес загрузчика. Критичная операция занимает очень малое количество времени (стирание последней страницы и запись вектора) А при загрузке пишу побайтно что угодно, включая вектора, но кроме последних 2 байт flash (вектор сброса). При окончании загрузки (и при старте в дальнейшем) проверяю КС прикладной области...

Тут же в коде тебе и "вспоминалка", как работать с flash MSP ;)