|
nRF52832 автоматическое дописывание стека во флешь IAR |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 19)
|
Aug 21 2018, 10:17
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Полазил по Dev zone, нашел https://devzone.nordicsemi.com/f/nordic ... -1-for-arm , человек поднимает как раз мою тему. Но из прочитанного не ясно от куда взялся адрес define region S110_region = mem:[from 0x00000000 to 0x00015FFF]; , а именно 0x00015FFF. Почему 0x00015FFF ?
|
|
|
|
|
Aug 21 2018, 14:04
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Цитата from 0 to 0x25fff для s132 Сделал настройки linker на рис. Настройки .icf CODE /*###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).
Сообщение отредактировал Alex_Golubev - Aug 21 2018, 14:05
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 22 2018, 01:37
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Цитата Где вы взяли файл размером 0x2ce24 (183844) байта? С помощью hex2bin переделал ble_app_uart_pca10040_s132.hex в .bin. Посмотрел размер файла с помощью jflash получилось 183844 байта. Умножил на два и получил размер 0x00059C48. Цитата Вопрос второй. Вы точно уверены, что проект для S132 корректно заработает с S110 Я подключил проект S132,а S110 просто взял название с форума DEV ZONE. Или я не понял вашего вопроса?
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 01:50
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 22 2018, 08:02
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Цитата Какой ble_app_uart_pca10040_s132 ?! Понял я это только после того, когда написал на форуме DEV ZONE  . Сейчас буду пробовать с s132_nrf52_6.0.0_softdevice.hex. Заранее уточню define region S132_region = mem:[from 0x00000000 to x]; вместо x кокой адрес написать?
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 08:03
|
|
|
|
|
Aug 22 2018, 10:26
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Добил я IAR. На DEV ZONE направили меня на правильный путь  . Полностью очистил флешь и записал из IAR и все заработало. Воть  . В общем куму надо: CODE /*###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 бутлодер. Можете подсказать с чего начать?
|
|
|
|
|
Aug 22 2018, 10:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
А это ничего, что ROM_region и S132_region перекрываются? И вообще, откуда опять взялись эти цифирки "mem:[from 0x00000000 to 0x00049448]" ? Вообще, для прояснения, я б начал с документации. Цифры там устарели (сейчас размер софтдевайса другой), но общий принцип никуда не делся.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 22 2018, 10:56
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Цитата А это ничего, что 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). CODE /*###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.
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 11:15
|
|
|
|
|
Aug 22 2018, 11:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ? А эти цифры откуда? Отложили бы вы всё, да денёк-другой полистали нордиковскую документацию. Метод тыка и слепого копипаста работает плохо... MBR - это нордиковская штука, которая умеет: запускать application, запускать пользовательский бутлоадер (правда, я пока не разбирался, как этого добиться), а также копировать данные во флеш памяти (для организации обновления "на лету" через резервную область). Поставляется исключительно в бинарном виде. В вышеупомянутом hex'е, действительно, "склеены" MBR + SoftDevice. Где об этом написано, я не помню. Хорошо видно, если открыть файл в любой программе, которая умеет hex. Видно две области данных - одна стартует с нуля, вторая - с 0x1000.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 22 2018, 14:25
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Не собираются у меня примеры бута Код Fatal Error[Pe1696]: cannot open source file "uECC.h" C:\Users\Алексей\Desktop\nordic\nRF5_SDK_15.0.0_a53641a\components\libraries\crypto\backend\micro_ecc\micro_ecc_backend_ecc.h 52 В общем все как всегда  . Посмотрел в функции main очень мало строг кода. Код uint32_t ret_val;
// Protect MBR and bootloader code from being overwritten. ret_val = nrf_bootloader_flash_protect(0, MBR_SIZE, false); APP_ERROR_CHECK(ret_val); ret_val = nrf_bootloader_flash_protect(BOOTLOADER_START_ADDR, BOOTLOADER_SIZE, false); APP_ERROR_CHECK(ret_val);
(void) NRF_LOG_INIT(app_timer_cnt_get); NRF_LOG_DEFAULT_BACKENDS_INIT();
NRF_LOG_INFO("Inside main");
ret_val = nrf_bootloader_init(dfu_observer); APP_ERROR_CHECK(ret_val);
// Either there was no DFU functionality enabled in this project or the DFU module detected // no ongoing DFU operation and found a valid main application. // Boot the main application. nrf_bootloader_app_start();
// Should never be reached. NRF_LOG_INFO("After main"); Тут может быть даже собирать не надо. Можно так разобраться с функциями. Вот функция nrf_bootloader_flash_protect(0, MBR_SIZE, false); как понимаю нужна для защиты от стирания области памяти MBR. nrf_bootloader_flash_protect(BOOTLOADER_START_ADDR, BOOTLOADER_SIZE, false); тоже самое. nrf_bootloader_init(dfu_observer); инициализация бута. и потом они зачем то еще и стартуют nrf_bootloader_app_start(); хотя стар есть nrf_bootloader_init(). А вот обработчиков запуска перепрошивки не нашел.
|
|
|
|
|
Aug 23 2018, 14:55
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Я установил MinGW, получил консоль. Нашел рекомендации на DEV ZONE https://devzone.nordicsemi.com/f/nordic-q-a...micro-ecc-issue. Ссылка на DEV ZONE на gitHab оказалось битой, посчитал что по этой ссылки должно быть вот это https://github.com/kmackay/micro-ecc. Install version 4.9-2015-q3-update of the GCC compiler toolchain for ARM не стал устанавливать не понял для чего нужно. В папке micro-ecc есть nrf52hf_iar и nrf52nf_iar в чем отличие? консоль выдала ошибку.
Сообщение отредактировал Alex_Golubev - Aug 23 2018, 15:21
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 26 2018, 16:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(x893 @ Aug 22 2018, 16:55)  Опыт применения есть? У нордика всё по полочкам разложено, куча пользователей, техподдержка, а тут самому грабли собирать... Цитата(Alex_Golubev @ Aug 22 2018, 16:39)  esaulenka можно попросить вас дать пример с комментариями бута? Нет их у меня. Я и сам осваиваю этот чип. Пример собрал, но даже запускать не пробовал. По первому впечатлению - пообщаемся с коллегами, и выкинем бОльшую часть криптографии. То, что будет уже не стандартный DFU, не очень пугает - всё равно своё приложение писать... Цитата(Alex_Golubev @ Aug 23 2018, 17:55)  Ну, как минимум, надо было сделать cd /каталог/до/нужного/Makefile Цитата(Alex_Golubev @ Aug 23 2018, 17:55)  GCC compiler toolchain for ARM не стал устанавливать не понял для чего нужно. Нужно для того, чтобы собрать uecc из исходников (у них ассемблерный кусок только для gcc-шного ассемблера). Я, собственно, так и сделал - но я всё gcc собираю. Вам, насколько я понимаю, нужно было - uEcc.h и проч. заголовки с гитхаба положить в нужном месте - проследить, чтобы линкер подхватил скомпилированную заботливым нордиком библиотеку (те самые файлы *.a / *.lib в каталогах nrf52xx_iar) Цитата(Alex_Golubev @ Aug 23 2018, 17:55)  В папке micro-ecc есть nrf52hf_iar и nrf52nf_iar в чем отличие? Гугл знает!.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|