<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/76511/adding-usb-capability-to-secure-dfu-ble-bootloader</link><description>Hi, 
 
 I&amp;#39;d like to add the capability to perform secure DFU over USB with the secure DFU BLE bootloader as a baseline. What needs to be done to achieve this? In addition to adding the USB transport, do I need to add USB CDC in the bootloader to be able</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 03 Jan 2024 05:48:17 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/76511/adding-usb-capability-to-secure-dfu-ble-bootloader" /><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/462394?ContentTypeID=1</link><pubDate>Wed, 03 Jan 2024 05:48:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:935621c7-e254-447a-b069-cb3a28e3d407</guid><dc:creator>sne_333</dc:creator><description>&lt;p&gt;Hi &lt;a href="https://devzone.nordicsemi.com/members/yesheng"&gt;yesheng&lt;/a&gt;&amp;nbsp;Thank you so much for your code. What changes would be needed on the application firmware to select whether device has to enter in USB or BLE bootloader mode?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/356169?ContentTypeID=1</link><pubDate>Fri, 04 Mar 2022 02:59:31 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f809c394-b8b2-4b15-9283-90f2e3f493ad</guid><dc:creator>yesheng</dc:creator><description>&lt;p&gt;Oh, I think I get it to work. I combined the BLE and USB DFU examples together with minimal changes. Hope this could save other people&amp;#39;s time.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/pca10056_5F00_s140_5F00_ble_5F00_usb.tar.gz"&gt;devzone.nordicsemi.com/.../pca10056_5F00_s140_5F00_ble_5F00_usb.tar.gz&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/355966?ContentTypeID=1</link><pubDate>Thu, 03 Mar 2022 09:30:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3cd7d7c5-ce89-4281-bb51-e899cb85bb5c</guid><dc:creator>yesheng</dc:creator><description>&lt;p&gt;Hi EvDog,&lt;/p&gt;
&lt;p&gt;I&amp;#39;d like to do the same thing. Could you share your final patches?&lt;/p&gt;
&lt;p&gt;Much appreciate!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319094?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 08:41:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fe7fb3cc-d1fb-4a12-90f5-b38a6a076683</guid><dc:creator>EvDog</dc:creator><description>&lt;p&gt;OK thanks.&amp;nbsp; nRF connect reports 41200 bytes, so if I use &lt;/p&gt;
&lt;p&gt;MEMORY&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; FLASH (rx) : ORIGIN = 0xF3000, LENGTH = 0xA0F0&lt;br /&gt;&amp;nbsp; RAM (rwx) :&amp;nbsp; ORIGIN = 0x20005978, LENGTH = 0x3a688&lt;br /&gt;&amp;nbsp; uicr_bootloader_start_address (r) : ORIGIN = 0x10001014, LENGTH = 0x4&lt;br /&gt;&amp;nbsp; bootloader_settings_page (r) : ORIGIN = 0x000FF000, LENGTH = 0x1000&lt;br /&gt;&amp;nbsp; uicr_mbr_params_page (r) : ORIGIN = 0x10001018, LENGTH = 0x4&lt;br /&gt;&amp;nbsp; mbr_params_page (r) : ORIGIN = 0x000FE000, LENGTH = 0x1000&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;it compiles and links.&amp;nbsp; I will test tomorrow and provide a finalised patch.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319091?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 08:33:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:972947cc-919a-48c6-a5c9-a886d6883750</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user="EvDog"]How to I determine the size of the bootloader?[/quote]
&lt;p&gt;You can often see it by the output of your IDE/toolchain, but the simplest is probably to take the hex file and add it to &lt;a href="https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_nc_programmer%2FUG%2Fnrf_connect_programmer%2Fncp_introduction.html"&gt;nRF Connect Programmer&lt;/a&gt;. Then you can easily see where it ends. (It might show up a multiple regions, then take the last/highest address of the last/highest region. The sizes is then the end address - start address).&lt;/p&gt;
[quote user="EvDog"]Regarding the two empty pages, is that saying that flash start + length must be at least two pages lower than the total flash available?[/quote]
&lt;p&gt;Yes, correct.&lt;/p&gt;
[quote user="EvDog"]So for a nRF52840 the max address is 0x10000 so the bootloader must end at 0xFE000[/quote]
&lt;p&gt;Yes, it must end before 0xFE000.&lt;/p&gt;
[quote user="EvDog"]And regarding RAM, since I have not modified the base BLE example, does this mean RAM is unchanged?[/quote]
&lt;p&gt;Yes, that is correct. It will not change in this case.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319087?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 08:10:31 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7c2bb4fb-b062-431d-9a30-a7bd0519962f</guid><dc:creator>EvDog</dc:creator><description>&lt;p&gt;And regarding RAM, since I have not modified the base BLE example, does this mean RAM is unchanged?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319075?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 07:38:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ce912f95-d316-4849-822a-fad46476838b</guid><dc:creator>EvDog</dc:creator><description>&lt;p&gt;Hi Einar,&lt;/p&gt;
&lt;p&gt;How to I determine the size of the bootloader?&amp;nbsp; If I adjust the start and length so it builds and links I get&lt;/p&gt;
&lt;p&gt;Linking target: _build/nrf52840_xxaa_s140.out&lt;br /&gt;&amp;nbsp;&amp;nbsp; text&amp;nbsp;&amp;nbsp;&amp;nbsp; data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bss&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hex filename&lt;br /&gt;&amp;nbsp; 41008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; 29404&amp;nbsp;&amp;nbsp; 70612&amp;nbsp;&amp;nbsp; 113d4 _build/nrf52840_xxaa_s140.out&lt;/p&gt;
&lt;p&gt;Regarding the two empty pages, is that saying that flash start + length must be at least two pages lower than the total flash available?&lt;/p&gt;
&lt;p&gt;So for a nRF52840 the max address is 0x10000 so the bootloader must end at 0xFE000 (0x10000 - 0x2000)?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MEMORY&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; FLASH (rx) : ORIGIN = 0xF3000, LENGTH = 0xFE000-0xF3000&lt;br /&gt;&amp;nbsp; RAM (rwx) :&amp;nbsp; ORIGIN = 0x20005978, LENGTH = 0x3a688&lt;br /&gt;&amp;nbsp; uicr_bootloader_start_address (r) : ORIGIN = 0x10001014, LENGTH = 0x4&lt;br /&gt;&amp;nbsp; bootloader_settings_page (r) : ORIGIN = 0x000FF000, LENGTH = 0x1000&lt;br /&gt;&amp;nbsp; uicr_mbr_params_page (r) : ORIGIN = 0x10001018, LENGTH = 0x4&lt;br /&gt;&amp;nbsp; mbr_params_page (r) : ORIGIN = 0x000FE000, LENGTH = 0x1000&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319069?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 07:27:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5c45ab08-9d64-4546-9ce3-7b9b38904cb0</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user="EvDog"]1. -DMBR_PRESENT is defined in pca10056_usb - does this also need to be defined in pca10056_s140_ble_usb?[/quote]
&lt;p&gt;&amp;nbsp;No. For BLE project you should have&amp;nbsp;-DSOFTDEVICE_PRESENT (and the SoftDevice includes the MBR).&lt;/p&gt;
[quote user="EvDog"]2. How to I work out the adjustments required to the linker script?[/quote]
&lt;p&gt;For size you should adjust the flash start address of your bootloader down (lower number) and the size up with some pages until it fits. Note that the start address must be a multiple of the page size (0x1000). The easiest way is to move it significantly down (so that it will certainly fit, check the size of the bootloader you built), and then potentially move the start address up again. Note that there should be two unused pages at the end of the flash, after the end of the bootloader, which is used for MBR params and bootloader settings.&lt;/p&gt;
&lt;p&gt;Regarding RAM that depends on the SoftDevice configuration. Here the approach is a bit different. If you change the SoftDevice configuration so that it&amp;#39;s RAM usage increases, you must increase the RAM start address of the bootloader and decrease the size. See &lt;a href="https://devzone.nordicsemi.com/nordic/short-range-guides/b/getting-started/posts/adjustment-of-ram-and-flash-memory"&gt;Adjustment of RAM and Flash memory&lt;/a&gt;&amp;nbsp;for details.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319050?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 02:51:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0296f5a0-6e47-4fae-8a9e-68640518f328</guid><dc:creator>EvDog</dc:creator><description>&lt;p&gt;Included below is my patch attempt using pca10056_s140_ble as the base by copying it to pca10056_s140_ble_usb then performing a diff vs pca10056_usb (SDK 17.0.2).&lt;/p&gt;
&lt;p&gt;A few questions:&lt;/p&gt;
&lt;p&gt;1. -DMBR_PRESENT is defined in pca10056_usb - does this also need to be defined in pca10056_s140_ble_usb?&lt;/p&gt;
&lt;p&gt;2. How to I work out the adjustments required to the linker script? I get:&lt;/p&gt;
&lt;p&gt;section `.text&amp;#39; will not fit in region `FLASH&amp;#39;&lt;br /&gt;region FLASH overflowed with .data and user data&lt;br /&gt;section .mbr_params_page VMA [00000000000fe000,00000000000fefff] overlaps section .text VMA [00000000000f8000,0000000000101f87]&lt;br /&gt;region `FLASH&amp;#39; overflowed by 16428 bytes&lt;/p&gt;
&lt;p&gt;using an unchanged script from pca10056_s140_ble with&lt;/p&gt;
&lt;p&gt;MEMORY&lt;br /&gt;{&lt;br /&gt; FLASH (rx) : ORIGIN = 0xf8000, LENGTH = 0x6000&lt;br /&gt; RAM (rwx) : ORIGIN = 0x20005978, LENGTH = 0x3a688&lt;br /&gt; uicr_bootloader_start_address (r) : ORIGIN = 0x10001014, LENGTH = 0x4&lt;br /&gt; bootloader_settings_page (r) : ORIGIN = 0x000FF000, LENGTH = 0x1000&lt;br /&gt; uicr_mbr_params_page (r) : ORIGIN = 0x10001018, LENGTH = 0x4&lt;br /&gt; mbr_params_page (r) : ORIGIN = 0x000FE000, LENGTH = 0x1000&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="diff"&gt;--- pca10056_s140_ble/armgcc/Makefile	2021-07-08 11:47:28.563510900 +1000
+++ pca10056_s140_ble_usb/armgcc/Makefile	2021-07-08 12:38:09.803510900 +1000
@@ -11,10 +11,16 @@
 # Source files common to all targets
 SRC_FILES += \
   $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \
+  $(SDK_ROOT)/components/libraries/bootloader/serial_dfu/nrf_dfu_serial_usb.c \
   $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \
   $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \
   $(SDK_ROOT)/components/libraries/util/app_error_weak.c \
   $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \
+  $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \
+  $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \
+  $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \
+  $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \
+  $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \
   $(SDK_ROOT)/components/libraries/util/app_util_platform.c \
   $(SDK_ROOT)/components/libraries/crc32/crc32.c \
   $(SDK_ROOT)/components/libraries/mem_manager/mem_manager.c \
@@ -32,6 +38,9 @@
   $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \
   $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \
   $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \
+  $(SDK_ROOT)/components/libraries/slip/slip.c \
+  $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \
+  $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_power.c \
   $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \
   $(SDK_ROOT)/components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_ecc.c \
   $(SDK_ROOT)/components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_ecdsa.c \
@@ -44,6 +53,10 @@
   $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \
   $(SDK_ROOT)/modules/nrfx/hal/nrf_nvmc.c \
   $(SDK_ROOT)/modules/nrfx/soc/nrfx_atomic.c \
+  $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \
+  $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \
+  $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_systick.c \
+  $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_usbd.c \
   $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecc.c \
   $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecdsa.c \
   $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_hash.c \
@@ -77,6 +90,8 @@
   $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_utils.c \
   $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_validation.c \
   $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_ver_validation.c \
+  $(SDK_ROOT)/components/libraries/bootloader/serial_dfu/nrf_dfu_serial.c \
+  $(SDK_ROOT)/external/utf_converter/utf.c \
   $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c \
   $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecc.c \
   $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c \
@@ -87,6 +102,7 @@
 
 # Include folders common to all targets
 INC_FOLDERS += \
+  $(SDK_ROOT)/modules/nrfx/drivers/include \
   $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc \
   $(SDK_ROOT)/components/libraries/memobj \
   $(SDK_ROOT)/components/softdevice/s140/headers/nrf52 \
@@ -98,6 +114,7 @@
   $(SDK_ROOT)/modules/nrfx \
   $(SDK_ROOT)/external/nrf_oberon/include \
   $(SDK_ROOT)/components/libraries/crypto/backend/oberon \
+  $(SDK_ROOT)/external/utf_converter \
   $(SDK_ROOT)/components/libraries/crypto/backend/cifra \
   $(SDK_ROOT)/components/libraries/atomic \
   $(SDK_ROOT)/integration/nrfx \
@@ -105,8 +122,12 @@
   $(SDK_ROOT)/external/nrf_cc310/include \
   $(SDK_ROOT)/components/libraries/log/src \
   $(SDK_ROOT)/components/libraries/bootloader/dfu \
+  $(SDK_ROOT)/components/libraries/bootloader/serial_dfu \
   $(SDK_ROOT)/components/ble/common \
+  $(SDK_ROOT)/components/libraries/usbd/class/cdc \
+  $(SDK_ROOT)/components/libraries/usbd \
   $(SDK_ROOT)/components/libraries/delay \
+  $(SDK_ROOT)/integration/nrfx/legacy \
   $(SDK_ROOT)/components/libraries/svc \
   $(SDK_ROOT)/components/libraries/stack_info \
   $(SDK_ROOT)/components/libraries/crypto/backend/nrf_hw \
@@ -122,10 +143,12 @@
   ../config \
   $(SDK_ROOT)/components/libraries/crypto/backend/optiga \
   $(SDK_ROOT)/components/libraries/scheduler \
+  $(SDK_ROOT)/components/libraries/slip \
   $(SDK_ROOT)/external/nrf_cc310_bl/include \
   $(SDK_ROOT)/modules/nrfx/hal \
   $(SDK_ROOT)/external/fprintf \
   $(SDK_ROOT)/components/toolchain/cmsis/include \
+  $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \
   $(SDK_ROOT)/components/libraries/balloc \
   $(SDK_ROOT)/components/libraries/atomic_fifo \
   $(PROJ_DIR) \
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;--- pca10056_s140_ble/config/sdk_config.h	2021-07-08 12:23:49.483510900 +1000
+++ pca10056_s140_ble_usb/config/sdk_config.h	2021-07-08 12:22:38.793510900 +1000
@@ -1175,7 +1175,7 @@
 // &amp;lt;i&amp;gt; This reduced feature set is used by the BLE transport to reduce flash usage.
 
 #ifndef NRF_DFU_PROTOCOL_REDUCED
-#define NRF_DFU_PROTOCOL_REDUCED 1
+#define NRF_DFU_PROTOCOL_REDUCED 0
 #endif
 
 // &amp;lt;q&amp;gt; NRF_DFU_PROTOCOL_VERSION_MSG  - Protocol version message support.
@@ -1246,6 +1246,343 @@
 // &amp;lt;/h&amp;gt;
 //==========================================================
 
+// &amp;lt;h&amp;gt; nRF_Drivers
+
+//==========================================================
+// &amp;lt;e&amp;gt; NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver
+//==========================================================
+#ifndef NRFX_CLOCK_ENABLED
+#define NRFX_CLOCK_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; NRFX_CLOCK_CONFIG_LF_SRC  - LF Clock Source
+
+// &amp;lt;0=&amp;gt; RC
+// &amp;lt;1=&amp;gt; XTAL
+// &amp;lt;2=&amp;gt; Synth
+// &amp;lt;131073=&amp;gt; External Low Swing
+// &amp;lt;196609=&amp;gt; External Full Swing
+
+#ifndef NRFX_CLOCK_CONFIG_LF_SRC
+#define NRFX_CLOCK_CONFIG_LF_SRC 1
+#endif
+
+// &amp;lt;o&amp;gt; NRFX_CLOCK_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY
+#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;e&amp;gt; NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module.
+//==========================================================
+#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED
+#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0
+#endif
+// &amp;lt;o&amp;gt; NRFX_CLOCK_CONFIG_LOG_LEVEL  - Default Severity level
+
+// &amp;lt;0=&amp;gt; Off
+// &amp;lt;1=&amp;gt; Error
+// &amp;lt;2=&amp;gt; Warning
+// &amp;lt;3=&amp;gt; Info
+// &amp;lt;4=&amp;gt; Debug
+
+#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL
+#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3
+#endif
+
+// &amp;lt;o&amp;gt; NRFX_CLOCK_CONFIG_INFO_COLOR  - ANSI escape code prefix.
+
+// &amp;lt;0=&amp;gt; Default
+// &amp;lt;1=&amp;gt; Black
+// &amp;lt;2=&amp;gt; Red
+// &amp;lt;3=&amp;gt; Green
+// &amp;lt;4=&amp;gt; Yellow
+// &amp;lt;5=&amp;gt; Blue
+// &amp;lt;6=&amp;gt; Magenta
+// &amp;lt;7=&amp;gt; Cyan
+// &amp;lt;8=&amp;gt; White
+
+#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR
+#define NRFX_CLOCK_CONFIG_INFO_COLOR 0
+#endif
+
+// &amp;lt;o&amp;gt; NRFX_CLOCK_CONFIG_DEBUG_COLOR  - ANSI escape code prefix.
+
+// &amp;lt;0=&amp;gt; Default
+// &amp;lt;1=&amp;gt; Black
+// &amp;lt;2=&amp;gt; Red
+// &amp;lt;3=&amp;gt; Green
+// &amp;lt;4=&amp;gt; Yellow
+// &amp;lt;5=&amp;gt; Blue
+// &amp;lt;6=&amp;gt; Magenta
+// &amp;lt;7=&amp;gt; Cyan
+// &amp;lt;8=&amp;gt; White
+
+#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR
+#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver
+//==========================================================
+#ifndef NRFX_POWER_ENABLED
+#define NRFX_POWER_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; NRFX_POWER_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef NRFX_POWER_CONFIG_IRQ_PRIORITY
+#define NRFX_POWER_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;q&amp;gt; NRFX_POWER_CONFIG_DEFAULT_DCDCEN  - The default configuration of main DCDC regulator
+
+// &amp;lt;i&amp;gt; This settings means only that components for DCDC regulator are installed and it can be enabled.
+
+#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN
+#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0
+#endif
+
+// &amp;lt;q&amp;gt; NRFX_POWER_CONFIG_DEFAULT_DCDCENHV  - The default configuration of High Voltage DCDC regulator
+
+// &amp;lt;i&amp;gt; This settings means only that components for DCDC regulator are installed and it can be enabled.
+
+#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV
+#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;q&amp;gt; NRFX_SYSTICK_ENABLED  - nrfx_systick - ARM(R) SysTick driver
+
+#ifndef NRFX_SYSTICK_ENABLED
+#define NRFX_SYSTICK_ENABLED 1
+#endif
+
+// &amp;lt;e&amp;gt; NRFX_USBD_ENABLED - nrfx_usbd - USBD peripheral driver
+//==========================================================
+#ifndef NRFX_USBD_ENABLED
+#define NRFX_USBD_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; NRFX_USBD_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef NRFX_USBD_CONFIG_IRQ_PRIORITY
+#define NRFX_USBD_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;o&amp;gt; NRFX_USBD_CONFIG_DMASCHEDULER_MODE  - USBD DMA scheduler working scheme
+
+// &amp;lt;0=&amp;gt; Prioritized access
+// &amp;lt;1=&amp;gt; Round Robin
+
+#ifndef NRFX_USBD_CONFIG_DMASCHEDULER_MODE
+#define NRFX_USBD_CONFIG_DMASCHEDULER_MODE 0
+#endif
+
+// &amp;lt;q&amp;gt; NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST  - Give priority to isochronous transfers
+
+// &amp;lt;i&amp;gt; This option gives priority to isochronous transfers.
+// &amp;lt;i&amp;gt; Enabling it assures that isochronous transfers are always processed,
+// &amp;lt;i&amp;gt; even if multiple other transfers are pending.
+// &amp;lt;i&amp;gt; Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm
+// &amp;lt;i&amp;gt; function is called, so the option is independent of the algorithm chosen.
+
+#ifndef NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST
+#define NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1
+#endif
+
+// &amp;lt;q&amp;gt; NRFX_USBD_CONFIG_ISO_IN_ZLP  - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready
+
+// &amp;lt;i&amp;gt; If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent.
+// &amp;lt;i&amp;gt; Else, there will be no response.
+
+#ifndef NRFX_USBD_CONFIG_ISO_IN_ZLP
+#define NRFX_USBD_CONFIG_ISO_IN_ZLP 0
+#endif
+
+// &amp;lt;q&amp;gt; NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211  - Use workaround for anomaly 211
+
+// &amp;lt;i&amp;gt; If set, workaround for anomaly 211 will be enabled.
+// &amp;lt;i&amp;gt; Anomaly 211 - Device remains in SUSPEND too long when host resumes
+// &amp;lt;i&amp;gt; bus activity (sending SOF packets) without a RESUME condition.
+
+#ifndef NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211
+#define NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 0
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer
+//==========================================================
+#ifndef NRF_CLOCK_ENABLED
+#define NRF_CLOCK_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; CLOCK_CONFIG_LF_SRC  - LF Clock Source
+
+// &amp;lt;0=&amp;gt; RC
+// &amp;lt;1=&amp;gt; XTAL
+// &amp;lt;2=&amp;gt; Synth
+// &amp;lt;131073=&amp;gt; External Low Swing
+// &amp;lt;196609=&amp;gt; External Full Swing
+
+#ifndef CLOCK_CONFIG_LF_SRC
+#define CLOCK_CONFIG_LF_SRC 1
+#endif
+
+// &amp;lt;q&amp;gt; CLOCK_CONFIG_LF_CAL_ENABLED  - Calibration enable for LF Clock Source
+
+#ifndef CLOCK_CONFIG_LF_CAL_ENABLED
+#define CLOCK_CONFIG_LF_CAL_ENABLED 0
+#endif
+
+// &amp;lt;o&amp;gt; CLOCK_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;i&amp;gt; Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef CLOCK_CONFIG_IRQ_PRIORITY
+#define CLOCK_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer
+//==========================================================
+#ifndef POWER_ENABLED
+#define POWER_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; POWER_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;i&amp;gt; Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef POWER_CONFIG_IRQ_PRIORITY
+#define POWER_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;q&amp;gt; POWER_CONFIG_DEFAULT_DCDCEN  - The default configuration of main DCDC regulator
+
+// &amp;lt;i&amp;gt; This settings means only that components for DCDC regulator are installed and it can be enabled.
+
+#ifndef POWER_CONFIG_DEFAULT_DCDCEN
+#define POWER_CONFIG_DEFAULT_DCDCEN 0
+#endif
+
+// &amp;lt;q&amp;gt; POWER_CONFIG_DEFAULT_DCDCENHV  - The default configuration of High Voltage DCDC regulator
+
+// &amp;lt;i&amp;gt; This settings means only that components for DCDC regulator are installed and it can be enabled.
+
+#ifndef POWER_CONFIG_DEFAULT_DCDCENHV
+#define POWER_CONFIG_DEFAULT_DCDCENHV 0
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;q&amp;gt; SYSTICK_ENABLED  - nrf_drv_systick - ARM(R) SysTick driver - legacy layer
+
+#ifndef SYSTICK_ENABLED
+#define SYSTICK_ENABLED 1
+#endif
+
+// &amp;lt;e&amp;gt; USBD_ENABLED - nrf_drv_usbd - Software Component
+//==========================================================
+#ifndef USBD_ENABLED
+#define USBD_ENABLED 1
+#endif
+// &amp;lt;o&amp;gt; USBD_CONFIG_IRQ_PRIORITY  - Interrupt priority
+
+// &amp;lt;i&amp;gt; Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice
+// &amp;lt;0=&amp;gt; 0 (highest)
+// &amp;lt;1=&amp;gt; 1
+// &amp;lt;2=&amp;gt; 2
+// &amp;lt;3=&amp;gt; 3
+// &amp;lt;4=&amp;gt; 4
+// &amp;lt;5=&amp;gt; 5
+// &amp;lt;6=&amp;gt; 6
+// &amp;lt;7=&amp;gt; 7
+
+#ifndef USBD_CONFIG_IRQ_PRIORITY
+#define USBD_CONFIG_IRQ_PRIORITY 6
+#endif
+
+// &amp;lt;o&amp;gt; USBD_CONFIG_DMASCHEDULER_MODE  - USBD SMA scheduler working scheme
+
+// &amp;lt;0=&amp;gt; Prioritized access
+// &amp;lt;1=&amp;gt; Round Robin
+
+#ifndef USBD_CONFIG_DMASCHEDULER_MODE
+#define USBD_CONFIG_DMASCHEDULER_MODE 0
+#endif
+
+// &amp;lt;q&amp;gt; USBD_CONFIG_DMASCHEDULER_ISO_BOOST  - Give priority to isochronous transfers
+
+// &amp;lt;i&amp;gt; This option gives priority to isochronous transfers.
+// &amp;lt;i&amp;gt; Enabling it assures that isochronous transfers are always processed,
+// &amp;lt;i&amp;gt; even if multiple other transfers are pending.
+// &amp;lt;i&amp;gt; Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm
+// &amp;lt;i&amp;gt; function is called, so the option is independent of the algorithm chosen.
+
+#ifndef USBD_CONFIG_DMASCHEDULER_ISO_BOOST
+#define USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1
+#endif
+
+// &amp;lt;q&amp;gt; USBD_CONFIG_ISO_IN_ZLP  - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready
+
+// &amp;lt;i&amp;gt; If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent.
+// &amp;lt;i&amp;gt; Else, there will be no response.
+// &amp;lt;i&amp;gt; NOTE: This option does not work on Engineering A chip.
+
+#ifndef USBD_CONFIG_ISO_IN_ZLP
+#define USBD_CONFIG_ISO_IN_ZLP 0
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;/h&amp;gt;
+//==========================================================
+
 // &amp;lt;h&amp;gt; nRF_Libraries
 
 //==========================================================
@@ -1268,6 +1605,261 @@
 
 // &amp;lt;/e&amp;gt;
 
+// &amp;lt;e&amp;gt; APP_USBD_ENABLED - app_usbd - USB Device library
+//==========================================================
+#ifndef APP_USBD_ENABLED
+#define APP_USBD_ENABLED 1
+#endif
+// &amp;lt;s&amp;gt; APP_USBD_VID - Vendor ID.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/
+#ifndef APP_USBD_VID
+#define APP_USBD_VID 0x1915
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_PID - Product ID.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Selected Product ID
+#ifndef APP_USBD_PID
+#define APP_USBD_PID 0x521F
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_DEVICE_VER_MAJOR - Major device version  &amp;lt;0-99&amp;gt;
+
+// &amp;lt;i&amp;gt; Major device version, will be converted automatically to BCD notation. Use just decimal values.
+
+#ifndef APP_USBD_DEVICE_VER_MAJOR
+#define APP_USBD_DEVICE_VER_MAJOR 1
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_DEVICE_VER_MINOR - Minor device version  &amp;lt;0-9&amp;gt;
+
+// &amp;lt;i&amp;gt; Minor device version, will be converted automatically to BCD notation. Use just decimal values.
+
+#ifndef APP_USBD_DEVICE_VER_MINOR
+#define APP_USBD_DEVICE_VER_MINOR 0
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_DEVICE_VER_SUB - Sub-minor device version  &amp;lt;0-9&amp;gt;
+
+// &amp;lt;i&amp;gt; Sub-minor device version, will be converted automatically to BCD notation. Use just decimal values.
+
+#ifndef APP_USBD_DEVICE_VER_SUB
+#define APP_USBD_DEVICE_VER_SUB 0
+#endif
+
+// &amp;lt;q&amp;gt; APP_USBD_CONFIG_SELF_POWERED  - Self-powered device, as opposed to bus-powered.
+
+#ifndef APP_USBD_CONFIG_SELF_POWERED
+#define APP_USBD_CONFIG_SELF_POWERED 1
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps.  &amp;lt;0-500&amp;gt;
+
+#ifndef APP_USBD_CONFIG_MAX_POWER
+#define APP_USBD_CONFIG_MAX_POWER 100
+#endif
+
+// &amp;lt;q&amp;gt; APP_USBD_CONFIG_POWER_EVENTS_PROCESS  - Process power events.
+
+// &amp;lt;i&amp;gt; Enable processing power events in USB event handler.
+
+#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS
+#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1
+#endif
+
+// &amp;lt;e&amp;gt; APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue.
+
+// &amp;lt;i&amp;gt; This is the default configuration when all the events are placed into internal queue.
+// &amp;lt;i&amp;gt; Disable it when an external queue is used like app_scheduler or if you wish to process all events inside interrupts.
+// &amp;lt;i&amp;gt; Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context.
+// &amp;lt;i&amp;gt; Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable, and disable.
+//==========================================================
+#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE
+#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 0
+#endif
+// &amp;lt;o&amp;gt; APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of the event queue.  &amp;lt;16-64&amp;gt;
+
+// &amp;lt;i&amp;gt; The size of the queue for the events that would be processed in the main loop.
+
+#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE
+#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_CONFIG_SOF_HANDLING_MODE  - Change SOF events handling mode.
+
+// &amp;lt;i&amp;gt; Normal queue   - SOF events are pushed normally into the event queue.
+// &amp;lt;i&amp;gt; Compress queue - SOF events are counted and binded with other events or executed when the queue is empty.
+// &amp;lt;i&amp;gt;                  This prevents the queue from filling up with SOF events.
+// &amp;lt;i&amp;gt; Interrupt      - SOF events are processed in interrupt.
+// &amp;lt;0=&amp;gt; Normal queue
+// &amp;lt;1=&amp;gt; Compress queue
+// &amp;lt;2=&amp;gt; Interrupt
+
+#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE
+#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;q&amp;gt; APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE  - Provide a function that generates timestamps for logs based on the current SOF.
+
+// &amp;lt;i&amp;gt; The function app_usbd_sof_timestamp_get is implemented if the logger is enabled.
+// &amp;lt;i&amp;gt; Use it when initializing the logger.
+// &amp;lt;i&amp;gt; SOF processing is always enabled when this configuration parameter is active.
+// &amp;lt;i&amp;gt; Note: This option is configured outside of APP_USBD_CONFIG_LOG_ENABLED.
+// &amp;lt;i&amp;gt; This means that it works even if the logging in this very module is disabled.
+
+#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE
+#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0
+#endif
+
+// &amp;lt;o&amp;gt; APP_USBD_CONFIG_DESC_STRING_SIZE - Maximum size of the NULL-terminated string of the string descriptor.  &amp;lt;31-254&amp;gt;
+
+// &amp;lt;i&amp;gt; 31 characters can be stored in the internal USB buffer used for transfers.
+// &amp;lt;i&amp;gt; Any value higher than 31 creates an additional buffer just for descriptor strings.
+
+#ifndef APP_USBD_CONFIG_DESC_STRING_SIZE
+#define APP_USBD_CONFIG_DESC_STRING_SIZE 31
+#endif
+
+// &amp;lt;q&amp;gt; APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED  - Enable UTF8 conversion.
+
+// &amp;lt;i&amp;gt; Enable UTF8-encoded characters. In normal processing, only ASCII characters are available.
+
+#ifndef APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED
+#define APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED 0
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_STRINGS_LANGIDS - Supported languages identifiers.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Comma-separated list of supported languages.
+#ifndef APP_USBD_STRINGS_LANGIDS
+#define APP_USBD_STRINGS_LANGIDS APP_USBD_LANG_AND_SUBLANG(APP_USBD_LANG_ENGLISH, APP_USBD_SUBLANG_ENGLISH_US)
+#endif
+
+// &amp;lt;e&amp;gt; APP_USBD_STRING_ID_MANUFACTURER - Define manufacturer string ID.
+
+// &amp;lt;i&amp;gt; Setting ID to 0 disables the string.
+//==========================================================
+#ifndef APP_USBD_STRING_ID_MANUFACTURER
+#define APP_USBD_STRING_ID_MANUFACTURER 1
+#endif
+// &amp;lt;q&amp;gt; APP_USBD_STRINGS_MANUFACTURER_EXTERN  - Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by macro or declared as a global variable.
+
+#ifndef APP_USBD_STRINGS_MANUFACTURER_EXTERN
+#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_STRINGS_MANUFACTURER - String descriptor for the manufacturer name.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Comma-separated list of manufacturer names for each defined language.
+// &amp;lt;i&amp;gt; Use @ref APP_USBD_STRING_DESC macro to create string descriptor from a NULL-terminated string.
+// &amp;lt;i&amp;gt; Use @ref APP_USBD_STRING_RAW8_DESC macro to create string descriptor from comma-separated uint8_t values.
+// &amp;lt;i&amp;gt; Use @ref APP_USBD_STRING_RAW16_DESC macro to create string descriptor from comma-separated uint16_t values.
+// &amp;lt;i&amp;gt; Alternatively, configure the macro to point to any internal variable pointer that already contains the descriptor.
+// &amp;lt;i&amp;gt; Setting string to NULL disables that string.
+// &amp;lt;i&amp;gt; The order of manufacturer names must be the same like in @ref APP_USBD_STRINGS_LANGIDS.
+#ifndef APP_USBD_STRINGS_MANUFACTURER
+#define APP_USBD_STRINGS_MANUFACTURER APP_USBD_STRING_DESC(&amp;quot;Nordic Semiconductor&amp;quot;)
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; APP_USBD_STRING_ID_PRODUCT - Define product string ID.
+
+// &amp;lt;i&amp;gt; Setting ID to 0 disables the string.
+//==========================================================
+#ifndef APP_USBD_STRING_ID_PRODUCT
+#define APP_USBD_STRING_ID_PRODUCT 2
+#endif
+// &amp;lt;q&amp;gt; APP_USBD_STRINGS_PRODUCT_EXTERN  - Define whether @ref APP_USBD_STRINGS_PRODUCT is created by macro or declared as a global variable.
+
+#ifndef APP_USBD_STRINGS_PRODUCT_EXTERN
+#define APP_USBD_STRINGS_PRODUCT_EXTERN 0
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_STRINGS_PRODUCT - String descriptor for the product name.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; List of product names that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER.
+#ifndef APP_USBD_STRINGS_PRODUCT
+#define APP_USBD_STRINGS_PRODUCT APP_USBD_STRING_DESC(&amp;quot;Secure DFU Bootloader&amp;quot;)
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; APP_USBD_STRING_ID_SERIAL - Define serial number string ID.
+
+// &amp;lt;i&amp;gt; Setting ID to 0 disables the string.
+//==========================================================
+#ifndef APP_USBD_STRING_ID_SERIAL
+#define APP_USBD_STRING_ID_SERIAL 3
+#endif
+// &amp;lt;q&amp;gt; APP_USBD_STRING_SERIAL_EXTERN  - Define whether @ref APP_USBD_STRING_SERIAL is created by macro or declared as a global variable.
+
+#ifndef APP_USBD_STRING_SERIAL_EXTERN
+#define APP_USBD_STRING_SERIAL_EXTERN 1
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_STRING_SERIAL - String descriptor for the serial number.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Serial number that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER.
+#ifndef APP_USBD_STRING_SERIAL
+#define APP_USBD_STRING_SERIAL g_extern_serial_number
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;e&amp;gt; APP_USBD_STRING_ID_CONFIGURATION - Define configuration string ID.
+
+// &amp;lt;i&amp;gt; Setting ID to 0 disables the string.
+//==========================================================
+#ifndef APP_USBD_STRING_ID_CONFIGURATION
+#define APP_USBD_STRING_ID_CONFIGURATION 4
+#endif
+// &amp;lt;q&amp;gt; APP_USBD_STRING_CONFIGURATION_EXTERN  - Define whether @ref APP_USBD_STRINGS_CONFIGURATION is created by macro or declared as global variable.
+
+#ifndef APP_USBD_STRING_CONFIGURATION_EXTERN
+#define APP_USBD_STRING_CONFIGURATION_EXTERN 0
+#endif
+
+// &amp;lt;s&amp;gt; APP_USBD_STRINGS_CONFIGURATION - String descriptor for the device configuration.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; Configuration string that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER.
+#ifndef APP_USBD_STRINGS_CONFIGURATION
+#define APP_USBD_STRINGS_CONFIGURATION APP_USBD_STRING_DESC(&amp;quot;Default configuration&amp;quot;)
+#endif
+
+// &amp;lt;/e&amp;gt;
+
+// &amp;lt;s&amp;gt; APP_USBD_STRINGS_USER - Default values for user strings.
+
+// &amp;lt;i&amp;gt; Note: This value is not editable in Configuration Wizard.
+// &amp;lt;i&amp;gt; This value stores all application specific user strings with the default initialization.
+// &amp;lt;i&amp;gt; The setup is done by X-macros.
+// &amp;lt;i&amp;gt; Expected macro parameters:
+// &amp;lt;i&amp;gt; @code
+// &amp;lt;i&amp;gt; X(mnemonic, [=str_idx], ...)
+// &amp;lt;i&amp;gt; @endcode
+// &amp;lt;i&amp;gt; - @c mnemonic: Mnemonic of the string descriptor that would be added to
+// &amp;lt;i&amp;gt;                @ref app_usbd_string_desc_idx_t enumerator.
+// &amp;lt;i&amp;gt; - @c str_idx : String index value, can be set or left empty.
+// &amp;lt;i&amp;gt;                For example, WinUSB driver requires descriptor to be present on 0xEE index.
+// &amp;lt;i&amp;gt;                Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...)))
+// &amp;lt;i&amp;gt; - @c ...     : List of string descriptors for each defined language.
+#ifndef APP_USBD_STRINGS_USER
+#define APP_USBD_STRINGS_USER X(APP_USER_1, , APP_USBD_STRING_DESC(&amp;quot;User 1&amp;quot;))
+#endif
+
+// &amp;lt;/e&amp;gt;
+
 // &amp;lt;q&amp;gt; CRC32_ENABLED  - crc32 - CRC32 calculation routines
 
 #ifndef CRC32_ENABLED
@@ -1566,6 +2158,33 @@
 #define NRF_STRERROR_ENABLED 1
 #endif
 
+// &amp;lt;q&amp;gt; SLIP_ENABLED  - slip - SLIP encoding and decoding
+
+#ifndef SLIP_ENABLED
+#define SLIP_ENABLED 1
+#endif
+
+// &amp;lt;h&amp;gt; app_usbd_cdc_acm - USB CDC ACM class
+
+//==========================================================
+// &amp;lt;q&amp;gt; APP_USBD_CDC_ACM_ENABLED  - Enabling USBD CDC ACM Class library
+
+#ifndef APP_USBD_CDC_ACM_ENABLED
+#define APP_USBD_CDC_ACM_ENABLED 1
+#endif
+
+// &amp;lt;q&amp;gt; APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE  - Send ZLP on write with same size as endpoint
+
+// &amp;lt;i&amp;gt; If enabled, CDC ACM class will automatically send a zero length packet after transfer which has the same size as endpoint.
+// &amp;lt;i&amp;gt; This may limit throughput if a lot of binary data is sent, but in terminal mode operation it makes sure that the data is always displayed right after it is sent.
+
+#ifndef APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE
+#define APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE 1
+#endif
+
+// &amp;lt;/h&amp;gt;
+//==========================================================
+
 // &amp;lt;h&amp;gt; nrf_fprintf - fprintf function.
 
 //==========================================================
@@ -4545,6 +5164,18 @@
 // &amp;lt;/h&amp;gt;
 //==========================================================
 
+// &amp;lt;h&amp;gt; nRF_USB_DFU
+
+//==========================================================
+// &amp;lt;o&amp;gt; NRF_DFU_SERIAL_USB_RX_BUFFERS - nrf_dfu_serial_usb - USB DFU transport
+// &amp;lt;i&amp;gt; Number of buffers depends on flash access vs.
+// &amp;lt;i&amp;gt; transport throughtput. If value is too low it may lead
+// &amp;lt;i&amp;gt; to received packets being dropped.
+
+#ifndef NRF_DFU_SERIAL_USB_RX_BUFFERS
+#define NRF_DFU_SERIAL_USB_RX_BUFFERS 3
+#endif
+
 // &amp;lt;h&amp;gt; nRF_SoftDevice
 
 //==========================================================
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/319043?ContentTypeID=1</link><pubDate>Thu, 08 Jul 2021 00:45:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8207d04d-b667-45f8-af86-5dceef60d80d</guid><dc:creator>EvDog</dc:creator><description>&lt;p&gt;Hi mablabs&lt;/p&gt;
&lt;p&gt;Are you are to provide a patch file of your working project?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/318426?ContentTypeID=1</link><pubDate>Fri, 02 Jul 2021 11:45:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:123672d3-aef8-4a09-8e99-9e8a7066090e</guid><dc:creator>mablabs</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Thanks for your help. I figured out the problem. It looks like it was important to have the relevant sections for BLE in the appropriate locations in the linker script.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/318388?ContentTypeID=1</link><pubDate>Fri, 02 Jul 2021 09:48:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:155ad169-4ff3-4583-866e-613dd18262f2</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;That is up to you, really, as it is a continuation of the same effort (to combine BLE+USB bootloader). There is not much to go on though. Where do you get the GATT ERROR?&amp;nbsp;What did you find by debugging? Also, what is your full sdk_config.h now?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/318256?ContentTypeID=1</link><pubDate>Thu, 01 Jul 2021 13:50:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:46e5a4cc-7f68-421c-b7fe-0bbf1e0479d3</guid><dc:creator>mablabs</dc:creator><description>&lt;p&gt;Hi Einar,&lt;/p&gt;
&lt;p&gt;Thanks for the response. I was able to create a bootloader that looks to support both USB and BLE. I was able to perform a DFU using USB and the application comes up. However, when I perform a DFU over BLE, I get a &amp;quot;GATT ERROR&amp;quot;. Should I create another thread for that error?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/318013?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 13:58:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bbb0e590-b561-4b6f-b088-c52e7cc4b20d</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user="mablabs"]By the bootloader start address, do you mean the &amp;quot;&lt;span&gt;uicr_bootloader_start_address&amp;quot;?&lt;/span&gt;[/quote]
&lt;p&gt;No. That is the address where the bootloader start address is placed, and that happens automatically during the build. I mean the start address of the bootloader, which is what you set in your linker configuration, in the exact same way as you set the start address of your application. Specifically, in this line FLASH ORIGIN is where you set the start address:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;  FLASH (rx) : ORIGIN =...&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I did not spot this before, but you also have this set to a odd value. note that this must always be page aligned (so it must be a multiple of 0x1000).&lt;/p&gt;
[quote user="mablabs"]How did you determine that&amp;nbsp;it&amp;#39;s the bootloader that needs to be moved down (since the error isn&amp;#39;t descriptive)?[/quote]
&lt;p&gt;That may have been a wrong assumption, I was thinking that you were building the bootloader project? If you are, then that is what needs to move, as the message tells you that it cannot fit whatever you are building in the flash region you have specified in the linker script.&lt;/p&gt;
[quote user="mablabs"]By &amp;quot;down&amp;quot;, do you mean to increase the value of the origin?&amp;nbsp;[/quote]
&lt;p&gt;No, I mean decrease the value. With a lower start address you can increase the size (the end address is given by the physically available flash memory). Note that you must ensure that you do not move it so far down that it overlaps with your application and also leave room for potential application data in the flash area between the application itself and the bootloader (if any)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317992?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 13:13:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b854943f-7a24-4d22-bcf1-a7da2624d63b</guid><dc:creator>mablabs</dc:creator><description>&lt;p&gt;Thanks for the response.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;By the bootloader start address, do you mean the &amp;quot;&lt;span&gt;uicr_bootloader_start_address&amp;quot;? &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;How did you determine that&amp;nbsp;it&amp;#39;s the bootloader that needs to be moved down (since the error isn&amp;#39;t descriptive)?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;By &amp;quot;down&amp;quot;, do you mean to increase the value of the origin?&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317984?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 12:55:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:70a46508-f215-4496-bf0b-780a1faa3ada</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;It looks like you still need to move the bootloader start address down a bit (say 0x2000 down). See &lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/48142/dfu-bootloader----region-flash-overflowed"&gt;this thread&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317980?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 12:48:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e053bd14-8b0b-4341-9948-6db2219f9d4c</guid><dc:creator>mablabs</dc:creator><description>&lt;p&gt;Thanks for the response. I was able to modify the FLASH regions in the linker script in the following manner to eliminate the overflow by 284 bytes and the overlap in the sections, but still get the following error (which is not too descriptive):&lt;/p&gt;
&lt;p&gt;&amp;quot;region FLASH overflowed with .data and user data&amp;quot;&lt;/p&gt;
&lt;p&gt;/* Linker script to configure memory regions. */&lt;/p&gt;
&lt;p&gt;SEARCH_DIR(.)&lt;br /&gt;GROUP(-lgcc -lc -lnosys)&lt;/p&gt;
&lt;p&gt;MEMORY&lt;br /&gt;{&lt;br /&gt; FLASH (rx) : ORIGIN = 0xf3ed8, LENGTH = 0xa128&lt;br /&gt; RAM (rwx) : ORIGIN = 0x20000008, LENGTH = 0x3fff8&lt;br /&gt; uicr_bootloader_start_address (r) : ORIGIN = 0x10001014, LENGTH = 0x4&lt;br /&gt; bootloader_settings_page (r) : ORIGIN = 0x000FF000, LENGTH = 0x1000&lt;br /&gt; uicr_mbr_params_page (r) : ORIGIN = 0x10001018, LENGTH = 0x4&lt;br /&gt; mbr_params_page (r) : ORIGIN = 0x000FE000, LENGTH = 0x1000&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;SECTIONS&lt;br /&gt;{&lt;br /&gt; . = ALIGN(4);&lt;br /&gt; .uicr_bootloader_start_address :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_uicr_bootloader_start_address = .);&lt;br /&gt; KEEP(*(SORT(.uicr_bootloader_start_address*)))&lt;br /&gt; PROVIDE(__stop_uicr_bootloader_start_address = .);&lt;br /&gt; } &amp;gt; uicr_bootloader_start_address&lt;br /&gt; . = ALIGN(4);&lt;br /&gt; .bootloader_settings_page(NOLOAD) :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_bootloader_settings_page = .);&lt;br /&gt; KEEP(*(SORT(.bootloader_settings_page*)))&lt;br /&gt; PROVIDE(__stop_bootloader_settings_page = .);&lt;br /&gt; } &amp;gt; bootloader_settings_page&lt;br /&gt; . = ALIGN(4);&lt;br /&gt; .uicr_mbr_params_page :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_uicr_mbr_params_page = .);&lt;br /&gt; KEEP(*(SORT(.uicr_mbr_params_page*)))&lt;br /&gt; PROVIDE(__stop_uicr_mbr_params_page = .);&lt;br /&gt; } &amp;gt; uicr_mbr_params_page&lt;br /&gt; . = ALIGN(4);&lt;br /&gt; .mbr_params_page(NOLOAD) :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_mbr_params_page = .);&lt;br /&gt; KEEP(*(SORT(.mbr_params_page*)))&lt;br /&gt; PROVIDE(__stop_mbr_params_page = .);&lt;br /&gt; } &amp;gt; mbr_params_page&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;SECTIONS&lt;br /&gt;{&lt;br /&gt; . = ALIGN(4);&lt;br /&gt; .mem_section_dummy_ram :&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt; .fs_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_fs_data = .);&lt;br /&gt; KEEP(*(.fs_data))&lt;br /&gt; PROVIDE(__stop_fs_data = .);&lt;br /&gt; } &amp;gt; RAM&lt;br /&gt; .log_dynamic_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_log_dynamic_data = .);&lt;br /&gt; KEEP(*(SORT(.log_dynamic_data*)))&lt;br /&gt; PROVIDE(__stop_log_dynamic_data = .);&lt;br /&gt; } &amp;gt; RAM&lt;br /&gt; .log_filter_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_log_filter_data = .);&lt;br /&gt; KEEP(*(SORT(.log_filter_data*)))&lt;br /&gt; PROVIDE(__stop_log_filter_data = .);&lt;br /&gt; } &amp;gt; RAM&lt;/p&gt;
&lt;p&gt;} INSERT AFTER .data;&lt;/p&gt;
&lt;p&gt;SECTIONS&lt;br /&gt;{&lt;br /&gt; .mem_section_dummy_rom :&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt; .crypto_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_crypto_data = .);&lt;br /&gt; KEEP(*(SORT(.crypto_data*)))&lt;br /&gt; PROVIDE(__stop_crypto_data = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .dfu_trans :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_dfu_trans = .);&lt;br /&gt; KEEP(*(SORT(.dfu_trans*)))&lt;br /&gt; PROVIDE(__stop_dfu_trans = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .svc_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_svc_data = .);&lt;br /&gt; KEEP(*(.svc_data))&lt;br /&gt; PROVIDE(__stop_svc_data = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .nrf_queue :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_nrf_queue = .);&lt;br /&gt; KEEP(*(.nrf_queue))&lt;br /&gt; PROVIDE(__stop_nrf_queue = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .log_const_data :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_log_const_data = .);&lt;br /&gt; KEEP(*(SORT(.log_const_data*)))&lt;br /&gt; PROVIDE(__stop_log_const_data = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .nrf_balloc :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_nrf_balloc = .);&lt;br /&gt; KEEP(*(.nrf_balloc))&lt;br /&gt; PROVIDE(__stop_nrf_balloc = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .sdh_ble_observers :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_sdh_ble_observers = .);&lt;br /&gt; KEEP(*(SORT(.sdh_ble_observers*)))&lt;br /&gt; PROVIDE(__stop_sdh_ble_observers = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .log_backends :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_log_backends = .);&lt;br /&gt; KEEP(*(SORT(.log_backends*)))&lt;br /&gt; PROVIDE(__stop_log_backends = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .sdh_req_observers :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_sdh_req_observers = .);&lt;br /&gt; KEEP(*(SORT(.sdh_req_observers*)))&lt;br /&gt; PROVIDE(__stop_sdh_req_observers = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .sdh_state_observers :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_sdh_state_observers = .);&lt;br /&gt; KEEP(*(SORT(.sdh_state_observers*)))&lt;br /&gt; PROVIDE(__stop_sdh_state_observers = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .sdh_stack_observers :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_sdh_stack_observers = .);&lt;br /&gt; KEEP(*(SORT(.sdh_stack_observers*)))&lt;br /&gt; PROVIDE(__stop_sdh_stack_observers = .);&lt;br /&gt; } &amp;gt; FLASH&lt;br /&gt; .sdh_soc_observers :&lt;br /&gt; {&lt;br /&gt; PROVIDE(__start_sdh_soc_observers = .);&lt;br /&gt; KEEP(*(SORT(.sdh_soc_observers*)))&lt;br /&gt; PROVIDE(__stop_sdh_soc_observers = .);&lt;br /&gt; } &amp;gt; FLASH&lt;/p&gt;
&lt;p&gt;} INSERT AFTER .text&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;INCLUDE &amp;quot;nrf_common.ld&amp;quot;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317851?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 07:20:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:90bb0f5d-35ec-452a-a95e-27cdbe1d4622</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;I am not sure what you refer to there? The size of the bootloader depends on how much you include. When you add more features, the size typically increases. As the bootloader is located at the end of the flash (with two free pages above it for MBR params and BL Settings), that means that you need to move down the start address. There is no generic way to know how much when you add stuff without building and seeing.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317848?ContentTypeID=1</link><pubDate>Wed, 30 Jun 2021 07:18:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e7853bd2-a088-4c78-82e8-10d37f8addcc</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user="mablabs"]To get a combined USB + BLE DFU secure bootloader, I took the USB example as a baseline [/quote]
&lt;p&gt;I think it would be easier to take the BLE bootloader as baseline, just because that would probably have you doing fewer modifications. But both will work as long as you get all you need from both. If you use the USB project as stating point, remember to add all the SoftDevice and BLE related files and includes to the Makefile, and also defines such as&amp;nbsp;SOFTDEVICE_PRESENT instead of&amp;nbsp;MBR_PRESENT, get S140, etc.&lt;/p&gt;
[quote user="mablabs"]Could you advise on how the best way to resolve these issues?[/quote]
&lt;p&gt;Regarding flash size that will increase when you need to fit both the USB and BLE transport, so you need to move down the start address and increase the size. When you use GCC and Makefile, that means adjusting this line in the linker script:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;  FLASH (rx) : ORIGIN = 0xf8000, LENGTH = 0x6000&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Lower the start address and increase the length so that everything fits, and you have two free pages above (for MBR params and bootloader settings).&lt;/p&gt;
[quote user="mablabs"]What&amp;#39;s the best way to attach the resulting sdk_config.h, Makefile, and linker script, so you can better assist?[/quote]
&lt;p&gt;Use Insert -&amp;gt; Image/video/file, click the &amp;quot;Upload&amp;quot; text, select the file and click the OK button after it has been uploaded. Do this for every file, or zip all files together and upload the zip.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317807?ContentTypeID=1</link><pubDate>Tue, 29 Jun 2021 20:29:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:11a626d4-0863-47a5-b677-83417c545740</guid><dc:creator>mablabs</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;To get a combined USB + BLE DFU secure bootloader, I took the USB example as a baseline and merged sdk_config.h, the Makefile, and the linker script from the BLE example. However, it looks like there are conflicts in the linker script and there&amp;#39;s not enough room in Flash:&lt;/p&gt;
&lt;p&gt;_build/nrf52840_xxaa.out section `.text&amp;#39; will not fit in region `FLASH&amp;#39;&lt;br /&gt;region FLASH overflowed with .data and user data&lt;br /&gt;section .mbr_params_page VMA [00000000000fe000,00000000000fefff] overlaps section .text VMA [00000000000f4000,00000000000fe077]&lt;br /&gt;section .crypto_data VMA [00000000000fe078,00000000000fe07f] overlaps section .mbr_params_page VMA [00000000000fe000,00000000000fefff]&lt;br /&gt;region `FLASH&amp;#39; overflowed by 284 bytes&lt;/p&gt;
&lt;p&gt;Could you advise on how the best way to resolve these issues? What&amp;#39;s the best way to attach the resulting sdk_config.h, Makefile, and linker script, so you can better assist?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/317804?ContentTypeID=1</link><pubDate>Tue, 29 Jun 2021 20:00:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0fb16b7a-4e97-4a8c-9f65-553e02788977</guid><dc:creator>tSeggerCoor</dc:creator><description>&lt;p&gt;Hi, where can I find information on the size and start addresses, either documentation on them or their physical location in the bootloaders?&lt;/p&gt;
&lt;p&gt;Thank you&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adding USB capability to secure DFU BLE bootloader</title><link>https://devzone.nordicsemi.com/thread/316282?ContentTypeID=1</link><pubDate>Mon, 21 Jun 2021 13:29:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:01243fc6-01ee-4c17-86a9-309ebbf4cd06</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The open USB bootloader have everything needed to be a secure bootloader (and in fact by default it do require signature on bootloader updates). The only change that is needed in order to also require signature verification on application and SoftDevice updates is to set&amp;nbsp;NRF_DFU_REQUIRE_SIGNED_APP_UPDATE to 1 in the bootlaoder&amp;#39;s sdk_config.h. So if all you need is the USB transport, then take the example and make this change.&lt;/p&gt;
&lt;p&gt;If you want to combine USB with BLE, then you should take one of the examples and add includes, configuration, etc from the other, as well as adjust size and start address (there are quite a few things to resolve so it is a bit of work but not a huge task). Essentially all you need to add a transport is to add the required files, and then it will automatically be initialized and work out of the box. You do not need to do anything else to support for the USB CDC, as that is all part of the USB transport implementation.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>