Alex_Golubev 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Привет. Толком не решил вопрос с записью стека во флешь память микроконтроллера nRF52832 с использованием IAR. Вот в Keil насколько помню было два набора настроек (выбор targer) debug и softdevice. Вначале softdevice шился, потом можно было отладку юзать. Но как сделать в IAR хз. Чтоб стек (.hex) сразу зашивался куда надо. Подскажите как сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Полазил по Dev zone, нашел https://devzone.nordicsemi.com/f/nordic ... -1-for-arm , человек поднимает как раз мою тему. Но из прочитанного не ясно от куда взялся адрес define region S110_region = mem:[from 0x00000000 to 0x00015FFF]; , а именно 0x00015FFF. Почему 0x00015FFF ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Потому что в те далёкие времена S110 занимал 86539 (0x01520B) байт (у него это написано с первых же строк). Сейчас (SDK 15) последний адрес S110 - 0x18647, для softdevice'а есть смысл отвести всю память перед application: from 0 to 0x18ffff для S110, from 0 to 0x25fff для s132 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 21 августа, 2018 Опубликовано 21 августа, 2018 (изменено) · Жалоба from 0 to 0x25fff для s132 Сделал настройки linker на рис. Настройки .icf /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region S110_region = mem:[from 0x00000000 to 0x25fff]; "S110_Firmware": place in S110_region { section .s110_section }; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { }; initialize by copy { readwrite }; do not initialize { section .noinit }; keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; Iar выдал ошибку unable to allocate space for sections/blocks with a total estimated minimum size of 0x2ce24 bytes (max align 0x4) in <[0x00000000-0x00025fff]> (total uncommitted space 0x26000). Изменено 21 августа, 2018 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 41 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба В любом SD есть файл (пример) s132_nrf51822_5.0.0_release-notes.pdf В начале написано сколько флэш и рам надо оставить. The combined MBR and SoftDevice memory requirements for this version are as follows: Flash: 140 kB (0x23000 bytes). RAM: 5.18 kB (0x14b8 bytes). This is the minimum required memory with the BLE stack enabled. The actual requirements depend on the configuration chosen at sd_ble_enable() time. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба В общем сделал размер в два раза больше, чем показал jflash. Получился размер 0x00059C48. IAR перестал ругаться, собрал проект прошил, но не чего не работает. В начале флешь памяти ff. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Вопрос первый. Где вы взяли файл размером 0x2ce24 (183844) байта? Вопрос второй. Вы точно уверены, что проект для S132 корректно заработает с S110 ? (должно работать, НО: надо править размещение application и, очевидно, нельзя трогать нереализованное в S110 API). Первое, как я вижу, не сделано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 22 августа, 2018 Опубликовано 22 августа, 2018 (изменено) · Жалоба Где вы взяли файл размером 0x2ce24 (183844) байта? С помощью hex2bin переделал ble_app_uart_pca10040_s132.hex в .bin. Посмотрел размер файла с помощью jflash получилось 183844 байта. Умножил на два и получил размер 0x00059C48. Вопрос второй. Вы точно уверены, что проект для S132 корректно заработает с S110 Я подключил проект S132,а S110 просто взял название с форума DEV ZONE. Или я не понял вашего вопроса? Изменено 22 августа, 2018 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Какой ble_app_uart_pca10040_s132 ?! Вы туда что хотите положить? Softdevice? Вот и кладите софтдевайс. Вот этот: nRF5_SDK_15.0.0_a53641a\components\softdevice\s112\hex\s112_nrf52_6.0.0_softdevice.hex UPD. Точнее, вот этот: nRF5_SDK_15.0.0_a53641a\components\softdevice\s132\hex\s132_nrf52_6.0.0_softdevice.hex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 22 августа, 2018 Опубликовано 22 августа, 2018 (изменено) · Жалоба Какой ble_app_uart_pca10040_s132 ?! Понял я это только после того, когда написал на форуме DEV ZONE :) . Сейчас буду пробовать с s132_nrf52_6.0.0_softdevice.hex. Заранее уточню define region S132_region = mem:[from 0x00000000 to x]; вместо x кокой адрес написать? Изменено 22 августа, 2018 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Добил я IAR. На DEV ZONE направили меня на правильный путь :). Полностью очистил флешь и записал из IAR и все заработало. Воть :). В общем куму надо: /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region S132_region = mem:[from 0x00000000 to 0x00049448]; "S132_Firmware": place in S132_region { section .s132_section }; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { }; initialize by copy { readwrite }; do not initialize { section .noinit }; keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; Конечно есть у меня вопросы, но думаю нужно немного подождать чтобы мысли структурировались. Теперь квест II бутлодер. Можете подсказать с чего начать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 41 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Как всегда с примеров в SDK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба А это ничего, что ROM_region и S132_region перекрываются? И вообще, откуда опять взялись эти цифирки "mem:[from 0x00000000 to 0x00049448]" ? Вообще, для прояснения, я б начал с документации. Цифры там устарели (сейчас размер софтдевайса другой), но общий принцип никуда не делся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 22 августа, 2018 Опубликовано 22 августа, 2018 (изменено) · Жалоба А это ничего, что ROM_region и S132_region перекрываются? Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ? Если по этой ссылки https://infocenter.nordicsemi.com/index.jsp...dfu_memory.html то область должна быть SoftDevice 0x0000 1000 - 0x0002 6000 (148 kB). /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region S132_region = mem:[from 0x00000000 to 0x00026000]; "S132_Firmware": place in S132_region { section .s132_section }; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { }; initialize by copy { readwrite }; do not initialize { section .noinit }; keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; А вот что за область памяти Master Boot Record (MBR) мне не ясно. И если написать define region S132_region = mem:[from 0x00001000 to 0x00026000]; То программа снова не работает. Может Master Boot Record (MBR) уже включена в SoftDevice .Hex. Изменено 22 августа, 2018 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ? А эти цифры откуда? Отложили бы вы всё, да денёк-другой полистали нордиковскую документацию. Метод тыка и слепого копипаста работает плохо... MBR - это нордиковская штука, которая умеет: запускать application, запускать пользовательский бутлоадер (правда, я пока не разбирался, как этого добиться), а также копировать данные во флеш памяти (для организации обновления "на лету" через резервную область). Поставляется исключительно в бинарном виде. В вышеупомянутом hex'е, действительно, "склеены" MBR + SoftDevice. Где об этом написано, я не помню. Хорошо видно, если открыть файл в любой программе, которая умеет hex. Видно две области данных - одна стартует с нуля, вторая - с 0x1000. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться