ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
798125
Nikolay_Po (29.11.2017 16:40 - 16:52, просмотров: 4882)
Здравствуйте! Не могу победить ATSAM4S16C. Отладка всегда стартует с ROM 0x00800000 (ROM-bootloader). Вход ERASE, который выполняет стирание всего чипа после RESET, через 4.7К посадил на землю. На нём низкий уровень при старте. Пробовал IDE Eclipse и Atollic TrueStudio, пробовал проект демо-платы Xplained из ASF, пробовал проект с нуля Atollic - результат один. Компилируется успешно. Связь с чипом OpenOCD через CMSIS-DAP-отладчик есть. Соединение IDE с GDB-сервером есть. Правда, штатная загрузка образа вообще не срабатывает ни в одной, ни в другой среде. Пришлось включить загрузку в скрипт запуска отладки или грузить вручную с telnet-консоли. Попытка запуска выглядит примерно так:
./openocd -f /interface/cmsis-dap.cfg -c"transport select swd" -f /target/at91sam4sXX.cfgOpen On-Chip Debugger 0.10.0+dev-00207-g4109263-dirty (2017-11-18-23:30) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html swd adapter speed: 500 kHz adapter_nsrst_delay: 100 cortex_m reset_config sysresetreq Info : CMSIS-DAP: SWD Supported Info : CMSIS-DAP: JTAG Supported Info : CMSIS-DAP: Interface Initialised (SWD) Info : CMSIS-DAP: FW Version = 1.10 Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 0 Info : CMSIS-DAP: Interface ready Info : clock speed 500 kHz Info : SWD DPIDR 0x2ba01477 Info : sam4.cpu: hardware has 6 breakpoints, 4 watchpoints Info : accepting 'telnet' connection on tcp/4444 target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x0080004c msp: 0x20000800 ** Programming Started ** auto erase enabled Info : sam4 does not auto-erase while programming (Erasing relevant sectors) Info : sam4 First: 0x00000000 Last: 0x00000000 Info : Erasing sector: 0x00000000 wrote 8192 bytes from file /home/nikolaypo/Atollic/TrueSTUDIO/ARM_workspace_8.0/sam4s_run_test/Debug/sam4s_run_test.hex in 1.738829s (4.601 KiB/s) ** Programming Finished ** ** Verify Started ** verified 520 bytes in 0.203942s (2.490 KiB/s) ** Verified OK ** Info : accepting 'gdb' connection on tcp/3333 target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x0080004c msp: 0x20000800
Скрипт интерфейса CMSIS-DAP такой:
# script for ATMEL sam4, a Cortex-M4 chip # source [find target/at91sam4XXX.cfg] set _FLASHNAME $_CHIPNAME.flash flash bank $_FLASHNAME at91sam4 0x00400000 0 1 1 $_TARGETNAME gdb_flash_program enable $_TARGETNAME configure -event gdb-attach { reset init }
Команду reset init на событие gdb-attach пришлось добавить, иначе на момент подключения GDB чип оставался в работе и на попытки внедрения точек останова не откликался. На приведённом выше логе виден останов в коде загрузчика ROM. FLASH начинается с 0x00400000 и программа должна размещаться где-то здесь. Но как я ни бьюсь, запуска из FLASH не происходит. Точка останова на или внутри main() не срабатывает. Если ставлю точку останова на адресе в ROM, то останов происходит штатно. Работает пошаговая отладка, если выбрать Instuction Stepping Mode. Короче, всё работает, кроме того, чтобы запустить программу из FLASH. Пробовал вручную изменить программный счётчик на 0x00400000, но программа опять вылетает на загрузчик ROM. Во вложении файлы листинга, карты памяти, скрипт компоновщика и исполняемый файл. ЧЯДНТ? P.S. Вообще, со стороны OpenOCD всё выглядит адекватным. Вот отклик на запрос info:
> at91sam4 info CKGR_MOR: [0x400e0420] -> 0x00000028 MOSCXTEN: 0 [0x0000] (main xtal enabled: NO) MOSCXTBY: 0 [0x0000] (main osc bypass: NO) MOSCRCEN: 1 [0x0001] (onchip RC-OSC enabled: YES) MOSCRCF: 2 [0x0002] (onchip RC-OSC freq: 12 MHz) MOSCXTST: 0 [0x0000] (startup clks, time= 0.000000 uSecs) MOSCSEL: 0 [0x0000] (mainosc source: internal RC) CFDEN: 0 [0x0000] (clock failure enabled: NO) CKGR_MCFR: [0x400e0424] -> 0x00011b45 MAINFRDY: 1 [0x0001] (main ready: YES) MAINF: 6981 [0x1b45] (14.297 Mhz (32.768khz slowclk) CKGR_PLLAR: [0x400e0428] -> 0x08073f01 DIVA: 1 [0x0001] MULA: 7 [0x0007] PLLA Freq: 114.377 MHz CKGR_UCKR: [0x400e041c] -> 0x00000000 PMC_FSMR: [0x400e0470] -> 0x00000000 PMC_FSPR: [0x400e0474] -> 0x00000000 PMC_IMR: [0x400e046c] -> 0x00000000 PMC_MCKR: [0x400e0430] -> 0x00000012 CSS: 2 [0x0002] plla (114.377 Mhz) PRES: 1 [0x0001] (clock/2) Result CPU Freq: 57.188 PMC_PCK0: [0x400e0440] -> 0x00000000 PMC_PCK1: [0x400e0444] -> 0x00000000 PMC_PCK2: [0x400e0448] -> 0x00000000 PMC_PCSR: [0x400e0418] -> 0x00000100 PMC_SCSR: [0x400e0408] -> 0x00000001 PMC_SR: [0x400e0468] -> 0x0002000a CHIPID_CIDR: [0x400e0740] -> 0x28ac0ce0 Version: 0 [0x0000] EPROC: 7 [0x0007] Cortex-M4 NVPSIZE: 12 [0x000c] 1024K bytes NVPSIZE2: 0 [0x0000] none SRAMSIZE: 12 [0x000c] 128K Bytes ARCH: 138 [0x008a] ATSAM3S/SAM4S xC Series (100-pin version) NVPTYP: 2 [0x0002] embedded flash memory EXTID: 0 [0x0000] (exists: NO) CHIPID_EXID: [0x400e0744] -> 0x00000000 rc-osc: 12.000 MHz mainosc: 14.297 MHz plla: 114.377 MHz cpu-freq: 57.188 MHz mclk-freq: 57.188 MHz UniqueId: 0x53323100 0x3153344c 0x32303232 0x34363030
Может, не поднимается сконфигурированный в программе тактовый генератор и срабатывает исключение по останову генератора? После чего исполнение передаётся загрузчику в ПЗУ?