Skip to content

Commit 0b1e0c3

Browse files
committed
application: installer: added verification dealys infrastructre
Added configurable infrastructure for delay NVM memory operation. These delay are needed for making detail testing of the instalation interrupts possible. Kconfig added: * CONFIG_APP_BM_INSTALLER_SELF_DELAYS: Enable optional installer verification delays (testing); * CONFIG_APP_BM_INSTALLER_POST_METADATA_INVALIDATION_DELAY_MS: Delay [ms] after metadata invalidation, before image copy; emits LOG_INF "V_DELAY_POST_METADATA_INVALIDATION" before the delay. * CONFIG_APP_BM_INSTALLER_INTER_IMAGE_CHUNK_COPY_DELAY_MS: Delay [ms] between image chunk copies; emits LOG_INF "V_DELAY_IMAGE_CHUNK_COPY" before the delay. * CONFIG_APP_BM_INSTALLER_NEXT_IMAGE_COPY_DELAY_MS: Delay [ms] before next image copy; emits LOG_INF "V_DELAY_NEXT_IMAGE_COPY" before the delay. * CONFIG_APP_BM_INSTALLER_PRIOR_METADATA_UPDATE_DELAY_MS: Delay [ms] after image copy, before metadata update; emits LOG_INF "V_DELAY_METADATA_UPDATE" before the delay. * CONFIG_APP_BM_INSTALLER_PRIOR_SELF_DESTRUCTION_DELAY_MS: Delay [ms] before clearing installer header; emits LOG_INF "V_DELAY_SELF_DESTRUCTION" before the delay. Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
1 parent 6fb08c6 commit 0b1e0c3

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

applications/installer/Kconfig

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (c) 2025 Nordic Semiconductor
2+
# Copyright (c) 2025 - 2026 Nordic Semiconductor
33
#
44
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
55
#
@@ -8,4 +8,43 @@ module = INSTALLER
88
module-str = installer
99
source "subsys/logging/Kconfig.template.log_config"
1010

11+
menuconfig APP_BM_INSTALLER_SELF_DELAYS
12+
bool "Installers verification delays [EXPERIMENTAL]"
13+
select EXPERIMENTAL
14+
help
15+
For testing purposes only.
16+
17+
if APP_BM_INSTALLER_SELF_DELAYS
18+
19+
config APP_BM_INSTALLER_POST_METADATA_INVALIDATION_DELAY_MS
20+
int "Delay after metadata invalidation [ms]"
21+
default 1000
22+
help
23+
The delay after metadata invalidation and before images copy.
24+
25+
config APP_BM_INSTALLER_INTER_IMAGE_CHUNK_COPY_DELAY_MS
26+
int "Delay between image chunks copies [ms]"
27+
default 200
28+
help
29+
The delay between image chunks copies.
30+
31+
config APP_BM_INSTALLER_NEXT_IMAGE_COPY_DELAY_MS
32+
int "Delay before next image copy [ms]"
33+
default 1000
34+
help
35+
The delay before next image copy.
36+
37+
config APP_BM_INSTALLER_PRIOR_METADATA_UPDATE_DELAY_MS
38+
int "Delay before metadata update [ms]"
39+
default 1000
40+
help
41+
The delay after images copy and before metadata update.
42+
43+
config APP_BM_INSTALLER_PRIOR_SELF_DESTRUCTION_DELAY_MS
44+
int "Delay before self destruction [ms]"
45+
default 1000
46+
help
47+
The delay after metadata update and before self destruction.
48+
endif
49+
1150
source "Kconfig.zephyr"

applications/installer/src/main.c

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025 Nordic Semiconductor ASA
2+
* Copyright (c) 2025 - 2026 Nordic Semiconductor
33
*
44
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
55
*/
@@ -15,6 +15,16 @@
1515

1616
LOG_MODULE_REGISTER(installer, CONFIG_INSTALLER_LOG_LEVEL);
1717

18+
#if defined(CONFIG_APP_BM_INSTALLER_SELF_DELAYS)
19+
#define VERIFICATION_DELAY(x, msg) do { \
20+
LOG_INF(msg); \
21+
log_flush(); \
22+
k_busy_wait((x) * USEC_PER_MSEC); \
23+
} while (0)
24+
#else
25+
#define VERIFICATION_DELAY(x, msg)
26+
#endif /* CONFIG_APP_BM_INSTALLER_SELF_DELAYS */
27+
1828
#define IMAGE_DATA_SIZE 64
1929
#define IMAGE_DATA_ARRAY_SIZE 32
2030
#define EXPECTED_HEADER { 0x92, 0x11, 0xf2, 0xe9 }
@@ -138,6 +148,10 @@ int main(void)
138148
}
139149
}
140150

151+
/* Delay for reliability verification purpose */
152+
VERIFICATION_DELAY(CONFIG_APP_BM_INSTALLER_POST_METADATA_INVALIDATION_DELAY_MS,
153+
"V_DELAY_POST_METADATA_INVALIDATION");
154+
141155
memset(&replacement_metadata.padding, 0xff, BM_INSTALLS_PADDING_SIZE);
142156

143157
while (i < CONFIG_BM_INSTALL_IMAGES) {
@@ -198,11 +212,24 @@ int main(void)
198212
pos += process_size;
199213
read_pos += process_size;
200214
write_pos += process_size;
215+
216+
/* Delay for reliability verification purpose */
217+
VERIFICATION_DELAY(CONFIG_APP_BM_INSTALLER_INTER_IMAGE_CHUNK_COPY_DELAY_MS,
218+
"V_DELAY_IMAGE_CHUNK_COPY");
201219
}
202220

203221
++i;
222+
223+
if (i < CONFIG_BM_INSTALL_IMAGES) {
224+
VERIFICATION_DELAY(CONFIG_APP_BM_INSTALLER_NEXT_IMAGE_COPY_DELAY_MS,
225+
"V_DELAY_NEXT_IMAGE_COPY");
226+
}
204227
}
205228

229+
/* Delay for reliability verification purpose */
230+
VERIFICATION_DELAY(CONFIG_APP_BM_INSTALLER_PRIOR_METADATA_UPDATE_DELAY_MS,
231+
"V_DELAY_METADATA_UPDATE");
232+
206233
/* Write new metadata, after updating checksum */
207234
replacement_metadata.checksum = crc32_ieee((const uint8_t *)&replacement_metadata,
208235
(sizeof(struct bm_installs) -
@@ -217,6 +244,11 @@ int main(void)
217244

218245
erase_header:
219246
/* Erase header of installer image to boot back into firmware loader image */
247+
248+
/* Delay for reliability verification purpose */
249+
VERIFICATION_DELAY(CONFIG_APP_BM_INSTALLER_PRIOR_SELF_DESTRUCTION_DELAY_MS,
250+
"V_DELAY_SELF_DESTRUCTION");
251+
220252
#if defined(CONFIG_FLASH_HAS_EXPLICIT_ERASE)
221253
memset(erase_buffer, 0, sizeof(erase_buffer));
222254
rc = flash_area_write(&fa_installer, 0, erase_buffer, CONFIG_ROM_START_OFFSET);
@@ -227,7 +259,7 @@ int main(void)
227259
if (rc) {
228260
LOG_ERR("Clear installer header failed: %d", rc);
229261
} else {
230-
LOG_ERR("Clear installer header OK");
262+
LOG_INF("Clear installer header OK");
231263
}
232264

233265
log_flush();

0 commit comments

Comments
 (0)