Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с контрольной суммой!
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Sergio66
Добрый день!

Вот такая проблема...
М32. Bootloader из атмеловского Appnote.
Прикладная программа грузится нормально. Но... если сразу после программирования прикладной секции начать вычисление контрольной суммы (код вычисления КС находится в бут секции), то по всем адресам прикладной секции программа считывает и суммирует 0xff. Если перед вычислением КС микросхему сбросить и принудительно (в AVRStudio) установить программный счетчик на ф-ю вычисления КС, то все нормально считается и суммируется. КС в этом случае совпадает. (Все BLB в 0).
Т.о. у меня получается, что я не могу считать реальное значение апп секции не сделав сброс микросхемы... Без отладчика программа также не хочет вычислять правильно. Постоянно циклится (если КС не совпала, то повторяю программирование). Хотя, если провести аппаратный сброс, то загруженная прикладная программа выполняется правильно. Т.е. она записана БЕЗ ошибок.
Кто нибудь сталкивался с такой проблемой?
Сергей Борщ
Цитата(Sergio66 @ Nov 18 2009, 14:19) *
Кто нибудь сталкивался с такой проблемой?
Читайте про rww и nrww секции. После записи нужно включить rww секцию битом RWWSRE (это по даташиту на мегу 16, у 32 может быть другое название).
Sergio66
Цитата(Сергей Борщ @ Nov 18 2009, 15:58) *
Читайте про rww и nrww секции. После записи нужно включить rww секцию битом RWWSRE (это по даташиту на мегу 16, у 32 может быть другое название).

Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.

Цитата(Sergio66 @ Nov 18 2009, 17:09) *
Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.

ТОчнее происходит так...
Если в отладчике поставить точку останова на строке asm("CLI");, потом продолжить выполнени, то все нормально. Доступ к секции разрешен, и все считается...
Но, если точку останова поставить после кода разрешения, то ничего не работает.
Без отладчика - также не идет...

Цитата(Sergio66 @ Nov 18 2009, 17:27) *
Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.


ТОчнее происходит так...
Если в отладчике поставить точку останова на строке asm("CLI");, потом продолжить выполнени, то все нормально. Доступ к секции разрешен, и все считается...
Но, если точку останова поставить после кода разрешения, то ничего не работает.
Без отладчика - также не идет...


Разобрался...
вот такой код работает...
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & RWWSB);
while(SPMCR & SPMEN);
SPMCR = (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");


вот этой строки не хватало...
while(SPMCR & RWWSB);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.