Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Бутлоадер на мега8

Непрочитано 06.09.2014, 09:04  
svd71
Временная регистрация
 
Регистрация: 17.09.2009
Сообщений: 68
Сказал спасибо: 13
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
svd71 на пути к лучшему
По умолчанию Бутлоадер на мега8

Пытаюсь что либо писать во флэш и получаю чистую только значения FF.

Проект в архиве. Там же протеусовский проектик для теста. Фьюзы H-DA, L-D4.
В вызове функции записи boot_program_page указан адресс со здвигом. Экспериментальным путем установил (правда в симуляции), что пишет в адрес умноженный на 2. Поэтому и сдвиг сделал.
Пробовал и без сдвига на реальном кристалле - эффект тот же.
Где накосячил разобраться не могу.
Вложения:
Тип файла: rar m8sim.rar (63.2 Кб, 37 просмотров)
Реклама:
__________________
svd71 вне форума  
Непрочитано 06.09.2014, 13:40  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
ForcePoint на пути к лучшему
Стрелка Re: Бутлоадер на мега8

Сообщение от svd71 Посмотреть сообщение
Пытаюсь что либо писать во флэш и получаю чистую только значения FF.
Если используются прерывания - начните с раскомментирования этоих кусков в boot_program_page:
Код:
.....
        //uint8_t sreg;
        // Disable interrupts.
        //sreg = SREG;
        //cli();
.....
.....
        // Re-enable interrupts (if they were ever enabled).
        //SREG = sreg;
Почему - TFM. Инструкция работы с памятью программ (SPM) лимитирована по времени.

Кстати, что-то не вижу в исходниках реализацию функций boot_page_erase_safe, boot_page_fill_safe , boot_page_write_safe и boot_rww_enable ().

Сообщение от svd71 Посмотреть сообщение
В вызове функции записи boot_program_page указан адресс со здвигом. Экспериментальным путем установил (правда в симуляции), что пишет в адрес умноженный на 2. Поэтому и сдвиг сделал.
Пробовал и без сдвига на реальном кристалле - эффект тот же.
Где накосячил разобраться не могу.
А чего экспериментировать, если в документации на контроллер и в комментариях всё расписано, почему умножается на два.

P.S. Как вариант можете сравнить этот код с кодом начального загрузчика от AVR Butterfly - http://www.atmel.com/images/AVR109.zip.
ForcePoint вне форума  
Непрочитано 06.09.2014, 15:07  
svd71
Временная регистрация
 
Регистрация: 17.09.2009
Сообщений: 68
Сказал спасибо: 13
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
svd71 на пути к лучшему
По умолчанию Re: Бутлоадер на мега8

Уррра! Заработало!

1. Функции *_safe реализованы в хэдере */boot.h и их отличие от обычных, что перед этим они ждут установки флага SPMEN. Проще говоря у них тотже код, только пере вызовом добавлен boot_spm_busy_wait().

2. Это все оформленно в виде макросов, как и все остальные функции boot_*.

3. Документация к данному случаю не имеет никакого значения. После исправления косяка в виде размера переменной адреса (должна быть 32 бита) все заработало замечательно. Я написал, что адрес нужно ДЕЛИТЬ. Но после исправления работает и без деления.
__________________
svd71 вне форума  
Непрочитано 06.09.2014, 16:46  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Бутлоадер на мега8

Сообщение от svd71 Посмотреть сообщение
После исправления косяка в виде размера переменной адреса (должна быть 32 бита)
Это почему вдруг? На АВР всегда был 16-битный адрес, или я что-то пропустил?
niXto вне форума  
Непрочитано 06.09.2014, 22:58  
svd71
Временная регистрация
 
Регистрация: 17.09.2009
Сообщений: 68
Сказал спасибо: 13
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
svd71 на пути к лучшему
По умолчанию Re: Бутлоадер на мега8

я непросто так думал, а был уверен, что замена uint32_t на uint16 _t абсолютно никак не скажется - ведь регистр все равно 16ти разрядный. Тем более тесты показывали в симуляторах, что все идет по плану.

Подозреваю, что это какой-то косячек от avr-gcc. может быть что то связанное со знаковыми и беззнаковыми типами.
__________________
svd71 вне форума  
 

Метки
atmega8, bootloader, proteus, uart
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ШИМ, синусоида на Мега8? diglook Микроконтроллеры, АЦП, память и т.д 60 12.09.2016 11:46
Бутлоадер Attiny85, как? svad0 Микроконтроллеры, АЦП, память и т.д 12 06.12.2011 15:50
Мега8 + Акселерометр putmannn Микроконтроллеры, АЦП, память и т.д 2 29.11.2011 16:13
Бутлоадер в стиле "Спектрума" MasterMushi Микроконтроллеры, АЦП, память и т.д 66 28.01.2011 13:45
Бутлоадер Bf4 Микроконтроллеры, АЦП, память и т.д 5 17.12.2010 20:12


Часовой пояс GMT +4, время: 06:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.