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);