34
34
*/
35
35
/**************************************************************************/
36
36
37
+ #include <Arduino.h>
37
38
#include "utilities.h"
38
39
40
+ #include "nrf_sdm.h"
41
+ #include "nrf52/nrf_mbr.h"
42
+
43
+ static lookup_entry_t const sd_lookup_items [] =
44
+ {
45
+ { .key = 0x0088 , .data = "S132 2.0.1" },
46
+ };
47
+
48
+ static const lookup_table_t sd_lookup_table =
49
+ {
50
+ .count = sizeof (sd_lookup_items )/sizeof (lookup_entry_t ),
51
+ .items = sd_lookup_items
52
+ };
53
+
39
54
/******************************************************************************/
40
55
/*!
41
56
@brief Find the corresponding data from the key
@@ -51,3 +66,95 @@ void const * lookup_find(lookup_table_t const* p_table, uint32_t key)
51
66
52
67
return NULL ;
53
68
}
69
+ /**
70
+ * Format: SDname SDverion, bootloader version
71
+ * e.g
72
+ * "S132 2.0.1, 0.5.0"
73
+ * @return
74
+ */
75
+ const char * getFirmwareVersion (void )
76
+ {
77
+ static char fw_str [20 + 1 ] = { 0 };
78
+
79
+ // Skip if already created
80
+ if ( fw_str [0 ] == 0 )
81
+ {
82
+ uint32_t sd_id = SD_FWID_GET (MBR_SIZE ) & 0x0000ffff ;
83
+ char const * p_lookup = (char const * ) lookup_find (& sd_lookup_table , sd_id );
84
+
85
+ if (p_lookup )
86
+ {
87
+ sprintf (fw_str , "%s, %d.%d.%d" , p_lookup ,
88
+ U32_BYTE2 (bootloaderVersion ), U32_BYTE3 (bootloaderVersion ), U32_BYTE4 (bootloaderVersion ));
89
+ }else
90
+ {
91
+ // Unknown SD ID --> display ID
92
+ sprintf (fw_str , "0x%04X, %d.%d.%d" , (uint16_t ) sd_id ,
93
+ U32_BYTE2 (bootloaderVersion ), U32_BYTE3 (bootloaderVersion ), U32_BYTE4 (bootloaderVersion ));
94
+ }
95
+ }
96
+
97
+ return fw_str ;
98
+ }
99
+
100
+ const char * getMcuUniqueID (void )
101
+ {
102
+ static char serial_str [16 + 1 ] = { 0 };
103
+
104
+ // Skip if already created
105
+ if ( serial_str [0 ] == 0 )
106
+ {
107
+ sprintf (serial_str , "%08lX%08lX" , NRF_FICR -> DEVICEID [1 ], NRF_FICR -> DEVICEID [0 ]);
108
+ }
109
+
110
+ return serial_str ;
111
+ }
112
+
113
+ /*
114
+ * nrfjprog --family NRF52 --memrd 0x0000300C
115
+ *
116
+ SoftDevice | FWID | memory address |
117
+ --------------------|--------|----------------
118
+ S110 v5.2.1 | 0x0043 | 0x10001010 |
119
+ S110 v6.0.0 | 0x0049 | 0x10001010 |
120
+ S110 v6.2.1 | 0x0035 | 0x10001010 |
121
+ S110 v7.0.0 | 0x004F | 0x0000300C |
122
+ S110 v7.1.0 | 0x005A | 0x0000300C |
123
+ S110 v7.3.0 | 0x0063 | 0x0000300C |
124
+ S110 v8.0.0 | 0x0064 | 0x0000300C |
125
+ ----------------------------------------------
126
+ S120 v1.0.0 | 0x0055 | 0x0000300C |
127
+ S120 v1.0.1 | 0x0058 | 0x0000300C |
128
+ S120 v2.0.0-1.alpha | 0x005B | 0x0000300C |
129
+ S120 v2.0.0 | 0x0060 | 0x0000300C |
130
+ S120 v2.1.0 | 0x006B | 0x0000300C |
131
+ ----------------------------------------------
132
+ S130 v0.9.0-1.alpha | 0x005E | 0x0000300C |
133
+ S130 v1.0.0-3.alpha | 0x0066 | 0x0000300C |
134
+ S130 v1.0.0 | 0x0067 | 0x0000300C |
135
+ S130 v2.0.0 | 0x0080 | 0x0000300C |
136
+ S130 v2.0.1 | 0x0087 | 0x0000300C |
137
+ ----------------------------------------------
138
+ S210 v3.0.0 | 0x004B | 0x10001010 |
139
+ S210 v4.0.0 | 0x0057 | 0x0000300C |
140
+ ----------------------------------------------
141
+ S310 v1.0.0 | 0x004D | 0x10001010 |
142
+ S310 v2.0.0 | 0x005D | 0x0000300C |
143
+ S310 v2.0.1 | 0x005D | 0x0000300C |
144
+ S310 v3.0.0 | 0x0065 | 0x0000300C |
145
+ ----------------------------------------------
146
+ S132 v1.0.0-3.alpha | 0x006D | ? |
147
+ S132 v2.0.0-4.alpha | 0x0074 | ? |
148
+ S132 v2.0.0-7.alpha | 0x0079 | 0x0000300C |
149
+ S132 v2.0.0 | 0x0081 | 0x0000300C |
150
+ S132 v2.0.1 | 0x0088 | 0x0000300C |
151
+ ----------------------------------------------
152
+ S212 v0.6.0.alpha | 0x007F | 0x0000300C |
153
+ S212 v0.9.1.alpha | 0x0083 | 0x0000300C |
154
+ ----------------------------------------------
155
+ S332 v0.6.0.alpha | 0x007E | 0x0000300C |
156
+ S332 v0.9.1.alpha | 0x0082 | 0x0000300C |
157
+ ----------------------------------------------
158
+ Development/any | 0xFFFE
159
+ ----------------------------
160
+ */
0 commit comments