реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> nRF52832 автоматическое дописывание стека во флешь IAR
Alex_Golubev
сообщение Aug 21 2018, 03:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877



Привет.
Толком не решил вопрос с записью стека во флешь память микроконтроллера nRF52832 с использованием IAR.
Вот в Keil насколько помню было два набора настроек (выбор targer) debug и softdevice. Вначале softdevice шился, потом можно было отладку юзать.
Но как сделать в IAR хз. Чтоб стек (.hex) сразу зашивался куда надо.
Подскажите как сделать?
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 21 2018, 10:17
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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 ?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 21 2018, 11:42
Сообщение #3


Профессионал
*****

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



Потому что в те далёкие времена S110 занимал 86539 (0x01520B) байт (у него это написано с первых же строк).

Сейчас (SDK 15) последний адрес S110 - 0x18647, для softdevice'а есть смысл отвести всю память перед application: from 0 to 0x18ffff для S110, from 0 to 0x25fff для s132


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 21 2018, 14:04
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 21 2018, 14:57
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



В любом 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.
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 21 2018, 15:56
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877



В общем сделал размер в два раза больше, чем показал jflash. Получился размер 0x00059C48. IAR перестал ругаться, собрал проект прошил, но не чего не работает. В начале флешь памяти ff.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 21 2018, 16:32
Сообщение #7


Профессионал
*****

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



Вопрос первый. Где вы взяли файл размером 0x2ce24 (183844) байта?
Вопрос второй. Вы точно уверены, что проект для S132 корректно заработает с S110 ? (должно работать, НО: надо править размещение application и, очевидно, нельзя трогать нереализованное в S110 API). Первое, как я вижу, не сделано.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 22 2018, 01:37
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 22 2018, 07:37
Сообщение #9


Профессионал
*****

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



Какой 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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 22 2018, 08:02
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877



Цитата
Какой ble_app_uart_pca10040_s132 ?!
Понял я это только после того, когда написал на форуме DEV ZONE sm.gif .
Сейчас буду пробовать с s132_nrf52_6.0.0_softdevice.hex.

Заранее уточню define region S132_region = mem:[from 0x00000000 to x]; вместо x кокой адрес написать?

Сообщение отредактировал Alex_Golubev - Aug 22 2018, 08:03
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 22 2018, 10:26
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877



Добил я IAR. На DEV ZONE направили меня на правильный путь sm.gif. Полностью очистил флешь и записал из IAR и все заработало. Воть sm.gif.
В общем куму надо:
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 бутлодер.
Можете подсказать с чего начать?
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 22 2018, 10:27
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Как всегда с примеров в SDK
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 22 2018, 10:47
Сообщение #13


Профессионал
*****

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



А это ничего, что ROM_region и S132_region перекрываются?
И вообще, откуда опять взялись эти цифирки "mem:[from 0x00000000 to 0x00049448]" ?

Вообще, для прояснения, я б начал с документации. Цифры там устарели (сейчас размер софтдевайса другой), но общий принцип никуда не делся.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Aug 22 2018, 10:56
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 22 2018, 11:44
Сообщение #15


Профессионал
*****

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



Цитата
Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ?

А эти цифры откуда?

Отложили бы вы всё, да денёк-другой полистали нордиковскую документацию. Метод тыка и слепого копипаста работает плохо...

MBR - это нордиковская штука, которая умеет: запускать application, запускать пользовательский бутлоадер (правда, я пока не разбирался, как этого добиться), а также копировать данные во флеш памяти (для организации обновления "на лету" через резервную область). Поставляется исключительно в бинарном виде.

В вышеупомянутом hex'е, действительно, "склеены" MBR + SoftDevice. Где об этом написано, я не помню.
Хорошо видно, если открыть файл в любой программе, которая умеет hex. Видно две области данных - одна стартует с нуля, вторая - с 0x1000.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 18:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01525 секунд с 7
ELECTRONIX ©2004-2016