deadcodder 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Есть существующий рабочий проект (at32uc3a3256) загрузчик в котором изначально не планировался, а теперь вот возникла такая необходимость. Подскажите, как прикрутить DFU загрузчик. Проблема, насколько я понимаю, избитая, но тем не менее не нашел решения. Прошиваю руками загрузчик - он работает, шьет (из AVR32 Studio) и благополучно затирается. Про trampoline знаю, но как его правильно добавить? Для полноты - asf v2.8.1, AVR32 Studio Core Version: 2.6.0.201009140840. Заранее благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
S17 1 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Не видел, что тема "AVR32" существует... Наверное, заданный вопрос уже не актуален, но пока он в "подвал" не ушёл, напишу, что знаю... DFU_BootLoader можно добавить к своей прошивке утилитой "srec_cat.exe" или за-инклудить бинарный образ в своём поекте в "трамплине". Утилита "srec_cat.exe": из своей прошивки беру адреса "-crop 0x80002000 0x80080000", добавляю DFU_BootLoader " dfu-bl/at32uc3a-isp-1.0.2.hex -intel" в адреса "-crop 0x80000000 0x80002000", к имени выходного файла добавляю "Дату". : If the input file is in Intel HEX format, if "%1" == "" ( echo Usage: gen_program_files+dfu+ms.cmd {hexfile} echo Make program files for: echo *_dfu.hex - for DFU programming ^(through DFU_BootLoader^) echo *_jtag.hex - for JTAG programming with "DFU_BootLoader" pause exit ) if "%~x1" neq ".hex" ( echo === Error: Input file "%1" must be ".hex"!!! pause exit ) if NOT EXIST %1 ( echo === Error: Input file "%1" is absent!!! pause exit ) SET FDATE=%~t1 SET FDATE=%FDATE:~8,2%%FDATE:~3,2%%FDATE:~0,2%_%FDATE:~11,2%%FDATE:~14,2% echo Convert the input Intel HEX file "%~nx1" to: srec_cat.exe ^ %1 -intel ^ -crop 0x80002000 0x80080000 ^ -o %~n1_dfu_%FDATE%.hex -intel echo ... "%~n1_dfu_%FDATE%.hex" for DFU_BootLoader srec_cat.exe ^ dfu-bl/at32uc3a-isp-1.0.2.hex -intel ^ -crop 0x80000000 0x80002000 ^ %1 -intel ^ -crop 0x80002000 0x80080000 ^ -o %~n1_jtag_%FDATE%.hex -intel echo ... "%~n1_jtag_%FDATE%.hex" for JTAG-Programming ^(with 'DFU_BootLoader'^) @echo on rename "%~nx1" "%~nx1.%FDATE%" @pause Мой "trampoline_uc3.S": #define PROGRAM_START_ADDRESS (AVR32_FLASH_ADDRESS + PROGRAM_START_OFFSET) #define PROGRAM_START_OFFSET 0x00008000 //! @{ //! \verbatim // This must be linked @ 0x80000000 if it is to be run upon reset. .section .reset, "ax", @progbits .global _isp .type _isp, @function _isp: // Include the ISP raw binary image. Точка отсчёта - из каталога "Debug" или "Release". .incbin "../src/asf/avr32/utils/startup/at32uc3a-isp-1.0.2.bin" .org 0x00002000 .global _trampoline .type _trampoline, @function _trampoline: // Jump to program start. rjmp program_start .org PROGRAM_START_OFFSET program_start: // Jump to the C runtime startup routine. lda.w pc, _stext // http://sourceware.org/binutils/docs/as/Section.html#Section .section .prog_version, "axS", @note //! \endverbatim //! @} В файл "трамплина" добавил загрузку битового образа DFU_BootLoader: at32uc3a-isp-1.0.2.bin. Его получил из "at32uc3a-isp-1.0.2.hex" утилитой "srec_cat.exe": echo ... convert the input Intel HEX file to %~n1.bin, srec_cat ^ ^( %1 -intel ^ -crop 0x80000000 0x80002000 ^ -fill 0x00 0x80000000 -max %1 -intel -crop 0x80000000 0x80002000 ^) ^ -offset -0x80000000 ^ -o %~n1.bin -binary В опции линкера добавить: "-Wl,-e,_trampoline" и поставить галку "Do not use standart start files". Про всякие BootLoader писал здесь: http://electronix.ru/forum/index.php?showtopic=101718 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prof2005 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Поделюсь своим опытом добавления кода DFU в проект на IAR'е. В настройках проекта указывается bin-образ загрузчика для линкера: Project Options\Linker\Config\Raw binary image, где заполняются поля: File - вводится имя файла; Symbol - имя объекта в проекте, например __DFU_ISP; Segment - имя сегмента, где располагается код, должен быть CODE; Align - выравнивание, равно 4. На этой же закладке указывается точка входа в код: Entry symbol имеет значение __trampoline В проект добавляется стартовый код из ASF с небольшой модификацией, файл trampoline_uc3.s82: #include "trampoline_uc3.h" RSEG SSTACK:DATA:NOROOT(2) // This must be linked @ 0x80000000 if it is to be run upon reset. RSEG RESET:CODE:NOROOT(1) PUBLIC __trampoline __trampoline: // Здесь был переход на собственнй код: //rjmp program_start //...теперь вставлен код бутлоадера DFU: EXTERN ?__DFU_ISP ORG PROGRAM_START_OFFSET program_start: // Initialize the stack pointer. lddpc sp, ??SPS // Jump to the C runtime startup routine. lddpc pc, ??cmain // Constant data area. ALIGN 2 ??SPS: DC32 SFE(SSTACK) & ~3 EXTERN ?main ??cmain: DC32 ?main END После данных операций, загрузчик будет шиться вместе с основной программой в процесс отладки, и также будет имплантирован в прошивку программы. Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prof2005 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба К сожалению, предыдущий пост оказался ошибочный. В реале, линкер вставлял код бинарника совсем не туда куда хотелось, а работало потому что код загрузчика уже был прописан ранее. После полного стирания чипа, разумеется, все перестало работать. Пришел к другому варианту инжектирования кода бинарника в код проекта, только пришлось использовать дополнительную утилиту конвертирования bin в массив данных asm. Сам же код trampoline_uc3.s82 выглядит следующим образом: #include "trampoline_uc3.h" RSEG SSTACK:DATA:NOROOT(2) // This must be linked @ 0x80000000 if it is to be run upon reset. RSEG RESET:CODE:NOROOT(1) PUBLIC __trampoline __trampoline: // Здесь был переход на собственнй код: //rjmp program_start //...теперь вставлен код бутлоадера DFU: #include "at32uc3a3-isp.s82" ORG PROGRAM_START_OFFSET program_start: // Initialize the stack pointer. lddpc sp, ??SPS // Jump to the C runtime startup routine. lddpc pc, ??cmain // Constant data area. ALIGN 2 ??SPS: DC32 SFE(SSTACK) & ~3 EXTERN ?main ??cmain: DC32 ?main END где файл at32uc3a3-isp.s82 получен путем конвертирования: bin2asm.exe at32uc3a3-isp.bin at32uc3a3-isp.s82 В настройках проекта для линкера также указывается точка входа в код: Entry symbol имеет значение __trampoline Желаю всем успехов! bin2asm.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться