ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
142188 Топик полностью
desh (15.12.2008 17:30, просмотров: 308) ответил Ксения на А я понимала этот смысл так, что Boot Lock Bits (BLB0/BLB1 фузы) блокируют загрузку во flash, а не так, что SPM команда из Application section никогда не работает. Если это так, то у меня появляется сразу куча новых проблем, решения которых я пока не
А зачем Вам шить область бута? пусть там будит самый необходимый и отлаженный функционал. У меня была задача осуществлять удаленное обновление прошивки некоего модуля на ATmega128. Каналы и протоколы могут быть разные их реализация и уже заложены в основной прошивке. Так как программная паять занята примерно на треть я разбил ее на три логические части. в первой храниться основная программа, во второй загружаемая и в третьей бутлоадер. Бутлоадер является отдельным проектом определенными по заданным адресам функциями и занимается проверкой контрольных сумм, перезаписью в случае необходдимости основной части на загруженную, и сохранением данных полученных основной программой в области загружаемой. бут к проекту линкуется как RAW файл, а его интерфей для основной программы определен так в отдельном заголовочном файле в таком виде /* Функция void erase_flash() осуществляет полное стирание области памяти, в которой храниться обновляющая прошивка. Эту функцию необходимо вызывать перед началом загрузки новой версии */ inline void erase_flash() { (*((void(*)())0x0FFE0))(); } /* Функция unsigned char write_page(USHORT page, UCHAR* data) осуществляет запись страницы памяти в область FLASH памяти контроллера предназначенной для хранения обновляющей прошивки. Значение переменной page может принимать значение от 0(PAGE_MIN) до 495(PAGE_MAX) адресуя таким образом 62 кБ памяти. Если значение page привысит допустимый диапазан, то функция вернет ILLEGAL_PAGE. В случае успеха функция вернет NO_ERRROR. */ inline unsigned char write_page(unsigned short page, unsigned char* data) { return (*((unsigned char(*)(unsigned short, unsigned char*))0x0FFE2))(page, data); } /* Функция void restart_device() осуществляет сброс устройства. после сброса управление получает boot loader */ inline void restart_device() { (*((void(*)())0x0FFE4))(); } /* Функция unsigned char chek_crc() проверяет CRC обновляющей прошивки в случае успеха возвращает NO_ERRROR иначе ILLEGAL_CRC */ inline unsigned char chek_crc() { return (*((unsigned char(*)())0x0FFE6))(); } /* Функция unsigned short get_info(unsigned char field) возвращает значение соответствующего поля необходимой структуры или FIELD_NOT_FOUND если структура не найдена */ inline unsigned short get_info(unsigned char field) { return (*((unsigned short(*)())0x0FFE8))(field); } Если будут вопросы - пишите на е-майл desh#front.ru