diff --git a/.vscode/settings.json b/.vscode/settings.json
index 44c3e63..277d677 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -213,7 +213,9 @@
"mutex": "cpp",
"nrf_atomic.h": "c",
"beep_ctrl.h": "c",
- "hardware_power_mgr.h": "c"
+ "hardware_power_mgr.h": "c",
+ "nrf_fstorage_sd.h": "c",
+ "nrf_fstorage.h": "c"
},
"files.encoding": "gbk"
}
\ No newline at end of file
diff --git a/README.md b/README.md
index 402ab2d..aa2c9c9 100644
--- a/README.md
+++ b/README.md
@@ -91,4 +91,8 @@ State
È«²¿Ê¹ÄÜ
+```
+
+```
+nrfjprog --readcode flash.hex
```
\ No newline at end of file
diff --git a/app/app.uvoptx b/app/app.uvoptx
index 8ef17b0..6ba3852 100644
--- a/app/app.uvoptx
+++ b/app/app.uvoptx
@@ -871,17 +871,29 @@
0
0
+
+ 7
+ 39
+ 1
+ 0
+ 0
+ 0
+ ..\sdk\modules\nrfx\hal\nrf_nvmc.c
+ nrf_nvmc.c
+ 0
+ 0
+
nRF_Libraries
- 1
+ 0
0
0
0
8
- 39
+ 40
1
0
0
@@ -893,7 +905,7 @@
8
- 40
+ 41
1
0
0
@@ -905,7 +917,7 @@
8
- 41
+ 42
1
0
0
@@ -917,7 +929,7 @@
8
- 42
+ 43
1
0
0
@@ -929,7 +941,7 @@
8
- 43
+ 44
1
0
0
@@ -941,7 +953,7 @@
8
- 44
+ 45
1
0
0
@@ -953,7 +965,7 @@
8
- 45
+ 46
1
0
0
@@ -965,7 +977,7 @@
8
- 46
+ 47
1
0
0
@@ -977,7 +989,7 @@
8
- 47
+ 48
1
0
0
@@ -989,7 +1001,7 @@
8
- 48
+ 49
1
0
0
@@ -1001,7 +1013,7 @@
8
- 49
+ 50
1
0
0
@@ -1013,7 +1025,7 @@
8
- 50
+ 51
1
0
0
@@ -1025,7 +1037,7 @@
8
- 51
+ 52
1
0
0
@@ -1037,7 +1049,7 @@
8
- 52
+ 53
1
0
0
@@ -1049,7 +1061,7 @@
8
- 53
+ 54
1
0
0
@@ -1061,7 +1073,7 @@
8
- 54
+ 55
1
0
0
@@ -1073,7 +1085,7 @@
8
- 55
+ 56
1
0
0
@@ -1085,7 +1097,7 @@
8
- 56
+ 57
1
0
0
@@ -1097,7 +1109,7 @@
8
- 57
+ 58
1
0
0
@@ -1109,7 +1121,7 @@
8
- 58
+ 59
1
0
0
@@ -1121,7 +1133,7 @@
8
- 59
+ 60
1
0
0
@@ -1133,7 +1145,7 @@
8
- 60
+ 61
1
0
0
@@ -1145,7 +1157,7 @@
8
- 61
+ 62
1
0
0
@@ -1157,7 +1169,7 @@
8
- 62
+ 63
1
0
0
@@ -1169,7 +1181,7 @@
8
- 63
+ 64
1
0
0
@@ -1181,7 +1193,7 @@
8
- 64
+ 65
1
0
0
@@ -1193,7 +1205,7 @@
8
- 65
+ 66
1
0
0
@@ -1213,7 +1225,7 @@
0
9
- 66
+ 67
1
0
0
@@ -1225,7 +1237,7 @@
9
- 67
+ 68
1
0
0
@@ -1237,7 +1249,7 @@
9
- 68
+ 69
1
0
0
@@ -1249,7 +1261,7 @@
9
- 69
+ 70
1
0
0
@@ -1261,7 +1273,7 @@
9
- 70
+ 71
1
0
0
@@ -1273,7 +1285,7 @@
9
- 71
+ 72
1
0
0
@@ -1293,7 +1305,7 @@
0
10
- 72
+ 73
1
0
0
@@ -1305,7 +1317,7 @@
10
- 73
+ 74
1
0
0
@@ -1317,7 +1329,7 @@
10
- 74
+ 75
1
0
0
@@ -1337,7 +1349,7 @@
0
11
- 75
+ 76
1
0
0
@@ -1349,7 +1361,7 @@
11
- 76
+ 77
1
0
0
@@ -1361,7 +1373,7 @@
11
- 77
+ 78
1
0
0
@@ -1381,7 +1393,7 @@
0
12
- 78
+ 79
1
0
0
@@ -1393,7 +1405,7 @@
12
- 79
+ 80
1
0
0
@@ -1405,7 +1417,7 @@
12
- 80
+ 81
1
0
0
@@ -1425,7 +1437,7 @@
0
13
- 81
+ 82
1
0
0
@@ -1437,7 +1449,7 @@
13
- 82
+ 83
1
0
0
@@ -1447,6 +1459,42 @@
0
0
+
+ 13
+ 84
+ 1
+ 0
+ 0
+ 0
+ ..\sdk\components\libraries\fstorage\nrf_fstorage.c
+ nrf_fstorage.c
+ 0
+ 0
+
+
+ 13
+ 85
+ 1
+ 0
+ 0
+ 0
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_nvmc.c
+ nrf_fstorage_nvmc.c
+ 0
+ 0
+
+
+ 13
+ 86
+ 1
+ 0
+ 0
+ 0
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_sd.c
+ nrf_fstorage_sd.c
+ 0
+ 0
+
@@ -1457,7 +1505,7 @@
0
14
- 83
+ 87
1
0
0
@@ -1469,7 +1517,7 @@
14
- 84
+ 88
1
0
0
@@ -1481,7 +1529,7 @@
14
- 85
+ 89
1
0
0
@@ -1493,7 +1541,7 @@
14
- 86
+ 90
1
0
0
@@ -1507,13 +1555,13 @@
app_service
- 1
+ 0
0
0
0
15
- 87
+ 91
1
0
0
@@ -1525,7 +1573,7 @@
15
- 88
+ 92
1
0
0
@@ -1537,7 +1585,7 @@
15
- 89
+ 93
1
0
0
@@ -1549,7 +1597,7 @@
15
- 90
+ 94
1
0
0
@@ -1561,7 +1609,7 @@
15
- 91
+ 95
1
0
0
@@ -1573,7 +1621,7 @@
15
- 92
+ 96
1
0
0
@@ -1585,7 +1633,7 @@
15
- 93
+ 97
1
0
0
@@ -1597,7 +1645,7 @@
15
- 94
+ 98
1
0
0
@@ -1609,7 +1657,7 @@
15
- 95
+ 99
1
0
0
@@ -1621,7 +1669,7 @@
15
- 96
+ 100
1
0
0
@@ -1633,7 +1681,7 @@
15
- 97
+ 101
1
0
0
@@ -1645,7 +1693,7 @@
15
- 98
+ 102
1
0
0
@@ -1657,7 +1705,7 @@
15
- 99
+ 103
1
0
0
@@ -1669,7 +1717,7 @@
15
- 100
+ 104
1
0
0
@@ -1681,7 +1729,7 @@
15
- 101
+ 105
1
0
0
@@ -1693,7 +1741,7 @@
15
- 102
+ 106
1
0
0
@@ -1705,7 +1753,7 @@
15
- 103
+ 107
1
0
0
@@ -1717,7 +1765,7 @@
15
- 104
+ 108
1
0
0
diff --git a/app/app.uvprojx b/app/app.uvprojx
index 5d84d0e..f5d9c88 100644
--- a/app/app.uvprojx
+++ b/app/app.uvprojx
@@ -1674,6 +1674,11 @@
1
..\sdk\modules\nrfx\drivers\src\nrfx_timer.c
+
+ nrf_nvmc.c
+ 1
+ ..\sdk\modules\nrfx\hal\nrf_nvmc.c
+
@@ -3760,6 +3765,21 @@
1
..\sdk\external\fatfs\src\ff.c
+
+ nrf_fstorage.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage.c
+
+
+ nrf_fstorage_nvmc.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_nvmc.c
+
+
+ nrf_fstorage_sd.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_sd.c
+
@@ -5558,6 +5578,11 @@
1
..\sdk\modules\nrfx\drivers\src\nrfx_timer.c
+
+ nrf_nvmc.c
+ 1
+ ..\sdk\modules\nrfx\hal\nrf_nvmc.c
+
@@ -7644,6 +7669,21 @@
1
..\sdk\external\fatfs\src\ff.c
+
+ nrf_fstorage.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage.c
+
+
+ nrf_fstorage_nvmc.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_nvmc.c
+
+
+ nrf_fstorage_sd.c
+ 1
+ ..\sdk\components\libraries\fstorage\nrf_fstorage_sd.c
+
diff --git a/app/config/sdk_config.h b/app/config/sdk_config.h
index 1a2e89b..e4ae577 100644
--- a/app/config/sdk_config.h
+++ b/app/config/sdk_config.h
@@ -9,5 +9,9 @@
// #define NRF_LOG_BACKEND_UART_BAUDRATE 121634816 // 400800 baud
#define NRF_LOG_BACKEND_UART_BAUDRATE 268435456 // 1000000 baud
+
+#define NRF_DFU_APP_DATA_AREA_SIZE 8192
+#define NRF_FSTORAGE_ENABLED 1
+
#include "libznordic/zsdk_config/zsdk_ble_slave_config.h"
diff --git a/app/src/app_basic_service/device_version_info_mgr.c b/app/src/app_basic_service/device_version_info_mgr.c
index 466f8b9..32bfeb6 100644
--- a/app/src/app_basic_service/device_version_info_mgr.c
+++ b/app/src/app_basic_service/device_version_info_mgr.c
@@ -1,9 +1,54 @@
#include "device_version_info_mgr.h"
#include "aproject_config/config.h"
+#include "nrf_fstorage.h"
+#include "nrf_fstorage_sd.h"
#include "zble_module.h"
//
#include "znordic.h"
+
+static void fstorage_evt_handler(nrf_fstorage_evt_t *p_evt) {
+ if (p_evt->result != NRF_SUCCESS) {
+ NRF_LOG_INFO("--> Event received: ERROR while executing an fstorage operation.");
+ return;
+ }
+
+ switch (p_evt->id) {
+ case NRF_FSTORAGE_EVT_WRITE_RESULT: {
+ NRF_LOG_INFO("--> Event received: wrote %d bytes at address 0x%x.", p_evt->len, p_evt->addr);
+ } break;
+
+ case NRF_FSTORAGE_EVT_ERASE_RESULT: {
+ NRF_LOG_INFO("--> Event received: erased %d page from address 0x%x.", p_evt->len, p_evt->addr);
+ } break;
+
+ default:
+ break;
+ }
+}
+
+NRF_FSTORAGE_DEF(nrf_fstorage_t fstorage) = {
+ /* Set a handler for fstorage events. */
+ .evt_handler = fstorage_evt_handler,
+};
+
+static void print_flash_info(nrf_fstorage_t *p_fstorage) {
+ NRF_LOG_INFO("========| flash info |========");
+ NRF_LOG_INFO("erase unit: \t%d bytes", p_fstorage->p_flash_info->erase_unit);
+ NRF_LOG_INFO("program unit: \t%d bytes", p_fstorage->p_flash_info->program_unit);
+ NRF_LOG_INFO("==============================");
+}
+
+void device_info_init() {
+ fstorage.start_addr = NRF_UICR->NRFFW[0] - NRF_DFU_APP_DATA_AREA_SIZE;
+ fstorage.end_addr = NRF_UICR->NRFFW[0];
+ nrf_fstorage_api_t *p_fs_api;
+ p_fs_api = &nrf_fstorage_sd;
+
+ APP_ERROR_CHECK(nrf_fstorage_init(&fstorage, p_fs_api, NULL));
+ print_flash_info(&fstorage);
+}
+
void device_info_read_sn(sn_t *sn) {
uint32_t lot = NRF_UICR->CUSTOMER[0];
uint32_t id = NRF_UICR->CUSTOMER[1];
@@ -26,4 +71,18 @@ const char *device_info_read_sn_str() {
uint16_t device_info_read_blestack_version(void) { return BLESTACK_VERSION; }
uint16_t device_info_read_bootloader_version(void) { return BOOTLOADER_VERSION; }
uint16_t device_info_read_firmware_version(void) { return FIRMWARE_VERSION; }
-uint16_t device_info_read_hardware_version(void) { return HARDWARE_VERSION; }
\ No newline at end of file
+uint16_t device_info_read_hardware_version(void) { return HARDWARE_VERSION; }
+
+void device_info_write_active_flag(bool val) {
+ uint32_t data;
+ nrf_fstorage_write(&fstorage, fstorage.start_addr, &data, sizeof(data), NULL);
+}
+bool device_info_get_active_flag() {
+ uint32_t data;
+ nrf_fstorage_read(&fstorage, fstorage.start_addr, &data, sizeof(data));
+ if (data != 0x12345678) {
+ return false;
+ } else {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/app_basic_service/device_version_info_mgr.h b/app/src/app_basic_service/device_version_info_mgr.h
index 00f9abb..f3e1da1 100644
--- a/app/src/app_basic_service/device_version_info_mgr.h
+++ b/app/src/app_basic_service/device_version_info_mgr.h
@@ -1,16 +1,20 @@
#pragma once
#include "znordic.h"
-
-
typedef struct {
uint8_t sn[14];
} sn_t;
+
+void device_info_init();
+
void device_info_read_sn(sn_t *sn);
const char *device_info_read_sn_str();
uint16_t device_info_read_blestack_version(void);
uint16_t device_info_read_bootloader_version(void);
uint16_t device_info_read_firmware_version(void);
-uint16_t device_info_read_hardware_version(void);
\ No newline at end of file
+uint16_t device_info_read_hardware_version(void);
+
+void device_info_write_active_flag(bool val);
+bool device_info_get_active_flag();
\ No newline at end of file
diff --git a/app/src/one_conduction_main.c b/app/src/one_conduction_main.c
index 3a3d7a3..2c45c73 100644
--- a/app/src/one_conduction_main.c
+++ b/app/src/one_conduction_main.c
@@ -15,6 +15,9 @@
#include "app_service/ecg_service/ecg_service.h"
#include "app_service/light_ctrl.h"
#include "zble_module.h"
+//
+#include "nrf_fstorage.h"
+#include "nrf_fstorage_sd.h"
/***********************************************************************************************************************
* GLOBAL *
@@ -282,7 +285,7 @@ void on_zapp_ebus_event(void* p_event_data, uint16_t event_size) {
*/
if (p_event->eventType == kappevent_battery_start_charge) {
zapp_state_machine_change_state(kstate_charging);
- } else if (!znordic_rtc_has_setted() && zapp_state_machine_haspassed_ms() >= 60000) {
+ } else if (!device_info_get_active_flag() && zapp_state_machine_haspassed_ms() >= 60000) {
ZLOGI_BLOCK("rtc not setted, power system off");
ZERROR_CHECK(sd_power_system_off());
}
@@ -336,10 +339,13 @@ void on_zapp_ebus_event(void* p_event_data, uint16_t event_size) {
}
void one_conduction_main() {
+ device_info_init();
+
sn_t sn;
device_info_read_sn(&sn);
- ZLOGI("one_conduction_main %s", sn.sn);
+ ZLOGI("one_conduction_main %s active:%d", sn.sn, device_info_get_active_flag());
ZLOG_FLUSH();
+
zapp_ebus_reg_event_listener(on_zapp_ebus_event);
zapp_state_machine_reg_state_change_listener(on_state_change);
zble_module_reglistener(on_zble_event);