15
15
import itertools
16
16
import binascii
17
17
import intelhex
18
+ from tools .config import Config
18
19
19
20
FIB_BASE = 0x2000
20
21
FLASH_BASE = 0x3000
21
22
FW_REV = 0x01000100
23
+ TRIM_BASE = 0x2800
24
+
22
25
def ranges (i ):
23
26
for _ , b in itertools .groupby (enumerate (i ), lambda x_y : x_y [1 ] - x_y [0 ]):
24
27
b = list (b )
@@ -51,7 +54,7 @@ def add_fib_at_start(arginput):
51
54
end = max (max (start_end_pairs ))
52
55
53
56
assert start >= FLASH_BASE , ("Error - start 0x%x less than begining of user\
54
- flash area" % start )
57
+ flash area" % start )
55
58
# Compute checksum over the range (don't include data at location of crc)
56
59
size = end - start + 1
57
60
data = input_hex_file .tobinarray (start = start , size = size )
@@ -62,7 +65,7 @@ def add_fib_at_start(arginput):
62
65
checksum = (start + size + crc32 + fw_rev ) & 0xFFFFFFFF
63
66
64
67
print ("Writing FIB: base 0x%08X, size 0x%08X, crc32 0x%08X, fw rev 0x%08X,\
65
- checksum 0x%08X" % (start , size , crc32 , fw_rev , checksum ))
68
+ checksum 0x%08X" % (start , size , crc32 , fw_rev , checksum ))
66
69
67
70
#expected initial values used by daplink to validate that it is a valid bin
68
71
#file added as dummy values in this file because the fib area preceeds the
@@ -80,18 +83,20 @@ def add_fib_at_start(arginput):
80
83
81
84
#expected fib structure
82
85
#typedef struct fib{
83
- #uint32_t base; /**< Base offset of firmware, indicating what flash the
84
- # firmware is in. (will never be 0x11111111) */
85
- #uint32_t size; /**< Size of the firmware */
86
- #uint32_t crc; /**< CRC32 for firmware correctness check */
87
- #uint32_t rev; /**< Revision number */
88
- #uint32_t checksum; /**< Check-sum of information block */
86
+ #uint32_t base; /**< Base offset of firmware, indicating what flash the
87
+ # firmware is in. (will never be 0x11111111) */
88
+ #uint32_t size; /**< Size of the firmware */
89
+ #uint32_t crc; /**< CRC32 for firmware correctness check */
90
+ #uint32_t rev; /**< Revision number */
91
+ #uint32_t checksum; /**< Check-sum of information block */
89
92
#}fib_t, *fib_pt;
90
93
91
94
fib_start = FIB_BASE
92
95
dummy_fib_size = 20
93
96
fib_size = 20
97
+ trim_size = 24
94
98
user_code_start = FLASH_BASE
99
+ trim_area_start = TRIM_BASE
95
100
96
101
# Write FIB to the file in little endian
97
102
output_hex_file [fib_start + 0 ] = (dummy_sp >> 0 ) & 0xFF
@@ -146,7 +151,60 @@ def add_fib_at_start(arginput):
146
151
output_hex_file [fib_start + 39 ] = (checksum >> 24 ) & 0xFF
147
152
148
153
#pad the rest of the file
149
- for i in range (fib_start + dummy_fib_size + fib_size , user_code_start ):
154
+ for i in range (fib_start + dummy_fib_size + fib_size , trim_area_start ):
155
+ output_hex_file [i ] = 0xFF
156
+
157
+ # Read in configuration data from the config parameter in targets.json
158
+ configData = Config ('NCS36510' )
159
+ paramData = configData .get_target_config_data ()
160
+ for v in paramData .values ():
161
+ if (v .name == "target.mac-addr-high" ):
162
+ mac_addr_high = int (v .value , 16 )
163
+ elif (v .name == "target.mac-addr-low" ):
164
+ mac_addr_low = int (v .value ,16 )
165
+ elif (v .name == "target.32KHz-clk-trim" ):
166
+ clk_32k_trim = int (v .value ,16 )
167
+ elif (v .name == "target.32MHz-clk-trim" ):
168
+ clk_32m_trim = int (v .value ,16 )
169
+ elif (v .name == "target.rssi-trim" ):
170
+ rssi = int (v .value ,16 )
171
+ elif (v .name == "target.txtune-trim" ):
172
+ txtune = int (v .value ,16 )
173
+ else :
174
+ print ("Not a valid param" )
175
+
176
+ output_hex_file [trim_area_start + 0 ] = mac_addr_low & 0xFF
177
+ output_hex_file [trim_area_start + 1 ] = (mac_addr_low >> 8 ) & 0xFF
178
+ output_hex_file [trim_area_start + 2 ] = (mac_addr_low >> 16 ) & 0xFF
179
+ output_hex_file [trim_area_start + 3 ] = (mac_addr_low >> 24 ) & 0xFF
180
+
181
+ output_hex_file [trim_area_start + 4 ] = mac_addr_high & 0xFF
182
+ output_hex_file [trim_area_start + 5 ] = (mac_addr_high >> 8 ) & 0xFF
183
+ output_hex_file [trim_area_start + 6 ] = (mac_addr_high >> 16 ) & 0xFF
184
+ output_hex_file [trim_area_start + 7 ] = (mac_addr_high >> 24 ) & 0xFF
185
+
186
+ output_hex_file [trim_area_start + 8 ] = clk_32k_trim & 0xFF
187
+ output_hex_file [trim_area_start + 9 ] = (clk_32k_trim >> 8 ) & 0xFF
188
+ output_hex_file [trim_area_start + 10 ] = (clk_32k_trim >> 16 ) & 0xFF
189
+ output_hex_file [trim_area_start + 11 ] = (clk_32k_trim >> 24 ) & 0xFF
190
+
191
+ output_hex_file [trim_area_start + 12 ] = clk_32m_trim & 0xFF
192
+ output_hex_file [trim_area_start + 13 ] = (clk_32m_trim >> 8 ) & 0xFF
193
+ output_hex_file [trim_area_start + 14 ] = (clk_32m_trim >> 16 ) & 0xFF
194
+ output_hex_file [trim_area_start + 15 ] = (clk_32m_trim >> 24 ) & 0xFF
195
+
196
+ output_hex_file [trim_area_start + 16 ] = rssi & 0xFF
197
+ output_hex_file [trim_area_start + 17 ] = (rssi >> 8 ) & 0xFF
198
+ output_hex_file [trim_area_start + 18 ] = (rssi >> 16 ) & 0xFF
199
+ output_hex_file [trim_area_start + 19 ] = (rssi >> 24 ) & 0xFF
200
+
201
+ output_hex_file [trim_area_start + 20 ] = txtune & 0xFF
202
+ output_hex_file [trim_area_start + 21 ] = (txtune >> 8 ) & 0xFF
203
+ output_hex_file [trim_area_start + 22 ] = (txtune >> 16 ) & 0xFF
204
+ output_hex_file [trim_area_start + 23 ] = (txtune >> 24 ) & 0xFF
205
+
206
+ # pad the rest of the area with 0xFF
207
+ for i in range (trim_area_start + trim_size , user_code_start ):
150
208
output_hex_file [i ] = 0xFF
151
209
152
210
#merge two hex files
@@ -155,4 +213,3 @@ def add_fib_at_start(arginput):
155
213
# Write out file(s)
156
214
output_hex_file .tofile (file_name_hex , 'hex' )
157
215
output_hex_file .tofile (file_name_bin , 'bin' )
158
-
0 commit comments