Contiki 2.5
token-manufacturing.h
Go to the documentation of this file.
1 /** @file hal/micro/cortexm3/token-manufacturing.h
2  * @brief Definitions for manufacturing tokens.
3  *
4  * This file should not be included directly. It is accessed by the other
5  * token files.
6  *
7  * Please see hal/micro/token.h for a full explanation of the tokens.
8  *
9  * The tokens listed below are the manufacturing tokens.
10  *
11  * Since this file contains both the typedefs and the token defs, there are
12  * two \#defines used to select which one is needed when this file is included.
13  * \#define DEFINETYPES is used to select the type definitions and
14  * \#define DEFINETOKENS is used to select the token definitions.
15  * Refer to token.h and token.c to see how these are used.
16  *
17  * <!--(C) COPYRIGHT 2010 STMicroelectronics. All rights reserved. -->
18  */
19 
20 /**
21  * @name Convenience Macros
22  * @brief The following convenience macros are used to simplify the definition
23  * process for commonly specified parameters to the basic TOKEN_DEF macro.
24  * Please see hal/micro/token.h for a more complete explanation.
25  *@{
26  */
27 #define DEFINE_MFG_TOKEN(name, type, address, ...) \
28  TOKEN_NEXT_ADDRESS(name,(address)) \
29  TOKEN_MFG(name, CREATOR_##name, 0, 0, type, 1, __VA_ARGS__)
30 /** @} END Convenience Macros */
31 
32 //////////////////////////////////////////////////////////////////////////////
33 // MANUFACTURING DATA
34 // *the addresses of these tokens must not change*
35 
36 
37 // MANUFACTURING CREATORS
38 // The creator codes are here in one list instead of next to their token
39 // definitions so comparision of the codes is easier. The only requirement
40 // on these creator definitions is that they all must be unique. A favorite
41 // method for picking creator codes is to use two ASCII characters in order
42 // to make the codes more memorable. Also, the msb of Stack and Manufacturing
43 // token creator codes is always 1, while the msb of Application token creator
44 // codes is always 0. This distinction allows Application tokens
45 // to freely use the lower 15 bits for creator codes without the risk of
46 // duplicating a Stack or Manufacturing token creator code.
47 //--- Fixed Information Block ---
48 #define CREATOR_MFG_CHIP_DATA 0xC344 // msb+'C'+'D'
49 #define CREATOR_MFG_PART_DATA 0xF064 // msb+'p'+'d'
50 #define CREATOR_MFG_TESTER_DATA 0xF464 // msb+'t'+'d'
51 #define CREATOR_MFG_ST_EUI_64 0xE545 // msb+'e'+'E'
52 #define CREATOR_MFG_ANALOG_TRIM_NORMAL 0xF46E // msb+'t'+'n'
53 #define CREATOR_MFG_ANALOG_TRIM_BOOST 0xF442 // msb+'t'+'B'
54 #define CREATOR_MFG_ANALOG_TRIM_BOTH 0xF462 // msb+'t'+'b'
55 #define CREATOR_MFG_REG_TRIM 0xF274 // msb+'r'+'t'
56 #define CREATOR_MFG_1V8_REG_VOLTAGE 0xF276 // msb+'r'+'v'
57 #define CREATOR_MFG_VREF_VOLTAGE 0xF676 // msb+'v'+'v'
58 #define CREATOR_MFG_TEMP_CAL 0xF463 // msb+'t'+'c'
59 #define CREATOR_MFG_FIB_VERSION 0xFF09
60 #define CREATOR_MFG_FIB_CHECKSUM 0xE663 // msb+'f'+'c'
61 #define CREATOR_MFG_FIB_OBS 0xE66F // msb+'f'+'o'
62 //--- Customer Information Block ---
63 #define CREATOR_MFG_CIB_OBS 0xE36F // msb+'c'+'o'
64 #define CREATOR_MFG_CUSTOM_VERSION 0xC356
65 #define CREATOR_MFG_CUSTOM_EUI_64 0xE345
66 #define CREATOR_MFG_STRING 0xED73
67 #define CREATOR_MFG_BOARD_NAME 0xC24E // msb+'B'+'N' (Board Name)
68 #define CREATOR_MFG_EUI_64 0xB634
69 #define CREATOR_MFG_MANUF_ID 0xC944 // msb+'I'+'D' (Id)
70 #define CREATOR_MFG_PHY_CONFIG 0xD043 // msb+'P'+'C' (Phy Config)
71 #define CREATOR_MFG_BOOTLOAD_AES_KEY 0xC24B // msb+'B'+'K' (Bootloader Key)
72 #define CREATOR_MFG_EZSP_STORAGE 0xCD53
73 #define CREATOR_MFG_ASH_CONFIG 0xC143 // msb+'A'+'C' (ASH Config)
74 #define CREATOR_MFG_CBKE_DATA 0xC342 // msb+'C'+'B' (CBke)
75 #define CREATOR_MFG_INSTALLATION_CODE 0xC943 // msb+'I'+'C' (Installation Code)
76 #define CREATOR_MFG_OSC24M_BIAS_TRIM 0xB254 // msb+'2'+'T' (2[4mHz] Trim)
77 
78 // The master defines indicating the verions number these definitions work with.
79 #define CURRENT_MFG_TOKEN_VERSION 0x01FE //MSB is version, LSB is complement
80 #define CURRENT_MFG_CUSTOM_VERSION 0x01FE //MSB is version, LSB is complement
81 
82 
83 #ifndef __MFG_TYPES_DEFINED__
84 #define __MFG_TYPES_DEFINED__
85 //--- Fixed Information Block ---
86 typedef int8u tokTypeMfgChipData[24];
87 typedef int8u tokTypeMfgPartData[6];
88 typedef int8u tokTypeMfgTesterData[6];
89 typedef int8u tokTypeMfgStEui64[8];
90 typedef struct {
91  int16u iffilterL;
92  int16u lna;
93  int16u ifamp;
94  int16u rxadcH;
95  int16u prescalar;
96  int16u phdet;
97  int16u vco;
98  int16u loopfilter;
99  int16u pa;
100  int16u iqmixer;
101 } tokTypeMfgAnalogueTrim;
102 typedef struct {
103  int16u iffilterH;
104  int16u biasmaster;
105  int16u moddac;
106  int16u auxadc;
107  int16u caladc;
108 } tokTypeMfgAnalogueTrimBoth;
109 typedef struct {
110  int8u regTrim1V2;
111  int8u regTrim1V8;
112 } tokTypeMfgRegTrim;
113 typedef int16u tokTypeMfgRegVoltage1V8;
114 typedef int16u tokTypeMfgAdcVrefVoltage;
115 typedef int16u tokTypeMfgTempCal;
116 typedef int16u tokTypeMfgFibVersion;
117 typedef int16u tokTypeMfgFibChecksum;
118 typedef struct {
119  int16u ob2;
120  int16u ob3;
121  int16u ob0;
122  int16u ob1;
123 } tokTypeMfgFibObs;
124 //--- Customer Information Block ---
125 typedef struct {
126  int16u ob0;
127  int16u ob1;
128  int16u ob2;
129  int16u ob3;
130  int16u ob4;
131  int16u ob5;
132  int16u ob6;
133  int16u ob7;
134 } tokTypeMfgCibObs;
135 typedef int16u tokTypeMfgCustomVersion;
136 typedef int8u tokTypeMfgCustomEui64[8];
137 typedef int8u tokTypeMfgString[16];
138 typedef int8u tokTypeMfgBoardName[16];
139 typedef int16u tokTypeMfgManufId;
140 typedef int16u tokTypeMfgPhyConfig;
141 typedef int8u tokTypeMfgBootloadAesKey[16];
142 typedef int8u tokTypeMfgEui64[8];
143 typedef int8u tokTypeMfgEzspStorage[8];
144 typedef int16u tokTypeMfgAshConfig;
145 typedef struct {
146  int8u certificate[48];
147  int8u caPublicKey[22];
148  int8u privateKey[21];
149  // The bottom flag bit is 1 for uninitialized, 0 for initialized.
150  // The other flag bits should be set to 0 at initialization.
151  int8u flags;
152 } tokTypeMfgCbkeData;
153 typedef struct {
154  // The bottom flag bit is 1 for uninitialized, 0 for initialized.
155  // Bits 1 and 2 give the size of the value string:
156  // 0 = 6 bytes, 1 = 8 bytes, 2 = 12 bytes, 3 = 16 bytes.
157  // The other flag bits should be set to 0 at initialization.
158  // Special flags support. Due to a bug in the way some customers
159  // had programmed the flags field, we will also examine the upper
160  // bits 9 and 10 for the size field. Those bits are also reserved.
161  int16u flags;
162  int8u value[16];
163  int16u crc;
164 } tokTypeMfgInstallationCode;
165 typedef int16u tokTypeMfgOsc24mBiasTrim;
166 #endif //__MFG_TYPES_DEFINED__
167 
168 
169 #ifdef DEFINETOKENS
170 //The Manufacturing tokens need to be stored at well-defined locations.
171 //None of these addresses should ever change without extremely great care.
172 //All locations are OR'ed with DATA_BIG_INFO_BASE to make a full 32bit address.
173 //--- Fixed Information Block ---
174 // FIB Bootloader 0x0000 //1918 bytes
175 #define MFG_CHIP_DATA_LOCATION 0x077E // 24 bytes
176 #define MFG_PART_DATA_LOCATION 0x0796 // 6 bytes
177 #define MFG_TESTER_DATA_LOCATION 0x079C // 6 bytes
178 #define MFG_ST_EUI_64_LOCATION 0x07A2 // 8 bytes
179 #define MFG_ANALOG_TRIM_NORMAL_LOCATION 0x07AA // 20 bytes
180 #define MFG_ANALOG_TRIM_BOOST_LOCATION 0x07BE // 20 bytes
181 #define MFG_ANALOG_TRIM_BOTH_LOCATION 0x07D2 // 10 bytes
182 #define MFG_REG_TRIM_LOCATION 0x07DC // 2 bytes
183 #define MFG_1V8_REG_VOLTAGE_LOCATION 0x07DE // 2 bytes
184 #define MFG_VREF_VOLTAGE_LOCATION 0x07E0 // 2 bytes
185 #define MFG_TEMP_CAL_LOCATION 0x07E2 // 2 bytes
186 //reserved 0x07E4 // 16 bytes
187 #define MFG_FIB_VERSION_LOCATION 0x07F4 // 2 bytes
188 #define MFG_FIB_CHECKSUM_LOCATION 0x07F6 // 2 bytes
189 #define MFG_FIB_OBS_LOCATION 0x07F8 // 8 bytes
190 //--- Customer Information Block ---
191 #define MFG_CIB_OBS_LOCATION 0x0800 // 16 bytes
192 #define MFG_CUSTOM_VERSION_LOCATION 0x0810 // 2 bytes
193 #define MFG_CUSTOM_EUI_64_LOCATION 0x0812 // 8 bytes
194 #define MFG_STRING_LOCATION 0x081A // 16 bytes
195 #define MFG_BOARD_NAME_LOCATION 0x082A // 16 bytes
196 #define MFG_MANUF_ID_LOCATION 0x083A // 2 bytes
197 #define MFG_PHY_CONFIG_LOCATION 0x083C // 2 bytes
198 #define MFG_BOOTLOAD_AES_KEY_LOCATION 0x083E // 16 bytes
199 #define MFG_EZSP_STORAGE_LOCATION 0x084E // 8 bytes
200 #define MFG_ASH_CONFIG_LOCATION 0x0856 // 40 bytes
201 #define MFG_CBKE_DATA_LOCATION 0x087E // 92 bytes
202 #define MFG_INSTALLATION_CODE_LOCATION 0x08DA // 20 bytes
203 #define MFG_OSC24M_BIAS_TRIM_LOCATION 0x08EE // 2 bytes
204 // unused 0x08F0 //1808 bytes
205 //--- Virtual MFG Tokens ---
206 #define MFG_EUI_64_LOCATION 0x8000 // Special Trigger - see token.c
207 
208 // Define the size of indexed token array
209 #define MFG_ASH_CONFIG_ARRAY_SIZE 20
210 
211 #ifndef TOKEN_NEXT_ADDRESS
212  #define TOKEN_NEXT_ADDRESS(region, address)
213 #endif
214 
215 
216 // NOTE: because of their special handling, the manufacturing tokens
217 // cannot use the convenience macros in their definitions, so the full
218 // definitions are present here.
219 //--- Fixed Information Block ---
220 TOKEN_NEXT_ADDRESS(MFG_CHIP_DATA_ADDR,MFG_CHIP_DATA_LOCATION)
221 TOKEN_MFG(MFG_CHIP_DATA, CREATOR_MFG_CHIP_DATA,
222  0, 0, tokTypeMfgChipData, 1,
223  {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
224  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
225  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF})
226 
227 TOKEN_NEXT_ADDRESS(MFG_PART_DATA_ADDR,MFG_PART_DATA_LOCATION)
228 TOKEN_MFG(MFG_PART_DATA, CREATOR_MFG_PART_DATA,
229  0, 0, tokTypeMfgPartData, 1,
230  {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF})
231 
232 TOKEN_NEXT_ADDRESS(MFG_TESTER_DATA_ADDR,MFG_TESTER_DATA_LOCATION)
233 TOKEN_MFG(MFG_TESTER_DATA, CREATOR_MFG_TESTER_DATA,
234  0, 0, tokTypeMfgTesterData, 1,
235  {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF})
236 
237 TOKEN_NEXT_ADDRESS(MFG_ST_EUI_64_ADDR,MFG_ST_EUI_64_LOCATION)
238 TOKEN_MFG(MFG_ST_EUI_64, CREATOR_MFG_ST_EUI_64,
239  0, 0, tokTypeMfgStEui64, 1,
240  {3,0,0,0,0,0,0,3})
241 
242 TOKEN_NEXT_ADDRESS(MFG_ANALOG_TRIM_NORMAL_ADDR,MFG_ANALOG_TRIM_NORMAL_LOCATION)
243 TOKEN_MFG(MFG_ANALOG_TRIM_NORMAL, CREATOR_MFG_ANALOG_TRIM_NORMAL,
244  0, 0, tokTypeMfgAnalogueTrim, 1,
245  {0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
246  0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF})
247 
248 TOKEN_NEXT_ADDRESS(MFG_ANALOG_TRIM_BOOST_ADDR,MFG_ANALOG_TRIM_BOOST_LOCATION)
249 TOKEN_MFG(MFG_ANALOG_TRIM_BOOST, CREATOR_MFG_ANALOG_TRIM_BOOST,
250  0, 0, tokTypeMfgAnalogueTrim, 1,
251  {0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
252  0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF})
253 
254 TOKEN_NEXT_ADDRESS(MFG_ANALOG_TRIM_BOTH_ADDR,MFG_ANALOG_TRIM_BOTH_LOCATION)
255 TOKEN_MFG(MFG_ANALOG_TRIM_BOTH, CREATOR_MFG_ANALOG_TRIM_BOTH,
256  0, 0, tokTypeMfgAnalogueTrimBoth, 1,
257  {0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF})
258 
259 TOKEN_NEXT_ADDRESS(MFG_REG_TRIM_ADDR,MFG_REG_TRIM_LOCATION)
260 TOKEN_MFG(MFG_REG_TRIM, CREATOR_MFG_REG_TRIM,
261  0, 0, tokTypeMfgRegTrim, 1,
262  {0xFF, 0xFF})
263 
264 TOKEN_NEXT_ADDRESS(MFG_1V8_REG_VOLTAGE_ADDR,MFG_1V8_REG_VOLTAGE_LOCATION)
265 TOKEN_MFG(MFG_1V8_REG_VOLTAGE, CREATOR_MFG_1V8_REG_VOLTAGE,
266  0, 0, tokTypeMfgRegVoltage1V8, 1,
267  0xFFFF)
268 
269 TOKEN_NEXT_ADDRESS(MFG_VREF_VOLTAGE_ADDR,MFG_VREF_VOLTAGE_LOCATION)
270 TOKEN_MFG(MFG_VREF_VOLTAGE, CREATOR_MFG_VREF_VOLTAGE,
271  0, 0, tokTypeMfgAdcVrefVoltage, 1,
272  0xFFFF)
273 
274 TOKEN_NEXT_ADDRESS(MFG_TEMP_CAL_ADDR,MFG_TEMP_CAL_LOCATION)
275 TOKEN_MFG(MFG_TEMP_CAL, CREATOR_MFG_TEMP_CAL,
276  0, 0, tokTypeMfgTempCal, 1,
277  0xFFFF)
278 
279 TOKEN_NEXT_ADDRESS(MFG_FIB_VERSION_ADDR,MFG_FIB_VERSION_LOCATION)
280 TOKEN_MFG(MFG_FIB_VERSION, CREATOR_MFG_FIB_VERSION,
281  0, 0, tokTypeMfgFibVersion, 1,
282  CURRENT_MFG_TOKEN_VERSION)
283 
284 TOKEN_NEXT_ADDRESS(MFG_FIB_CHECKSUM_ADDR,MFG_FIB_CHECKSUM_LOCATION)
285 TOKEN_MFG(MFG_FIB_CHECKSUM, CREATOR_MFG_FIB_CHECKSUM,
286  0, 0, tokTypeMfgFibChecksum, 1,
287  0xFFFF)
288 
289 TOKEN_NEXT_ADDRESS(MFG_FIB_OBS_ADDR,MFG_FIB_OBS_LOCATION)
290 TOKEN_MFG(MFG_FIB_OBS, CREATOR_MFG_FIB_OBS,
291  0, 0, tokTypeMfgFibObs, 1,
292  {0xFFFF,0x03FC,0xAA55,0xFFFF})
293 
294 
295 //--- Customer Information Block ---
296 TOKEN_NEXT_ADDRESS(MFG_CIB_OBS_ADDR,MFG_CIB_OBS_LOCATION)
297 TOKEN_MFG(MFG_CIB_OBS, CREATOR_MFG_CIB_OBS,
298  0, 0, tokTypeMfgCibObs, 1,
299  {0x5AA5,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF})
300 
301 TOKEN_NEXT_ADDRESS(MFG_CUSTOM_VERSION_ADDR,MFG_CUSTOM_VERSION_LOCATION)
302 TOKEN_MFG(MFG_CUSTOM_VERSION, CREATOR_MFG_CUSTOM_VERSION,
303  0, 0, tokTypeMfgCustomVersion, 1,
304  CURRENT_MFG_CUSTOM_VERSION)
305 
306 TOKEN_NEXT_ADDRESS(MFG_CUSTOM_EUI_64_ADDR,MFG_CUSTOM_EUI_64_LOCATION)
307 TOKEN_MFG(MFG_CUSTOM_EUI_64, CREATOR_MFG_CUSTOM_EUI_64,
308  0, 0, tokTypeMfgCustomEui64, 1,
309  {0,3,3,3,3,3,3,0})
310 
311 TOKEN_NEXT_ADDRESS(MFG_STRING_ADDR,MFG_STRING_LOCATION)
312 TOKEN_MFG(MFG_STRING, CREATOR_MFG_STRING,
313  0, 0, tokTypeMfgString, 1,
314  {0,})
315 
316 TOKEN_NEXT_ADDRESS(MFG_BOARD_NAME_ADDR,MFG_BOARD_NAME_LOCATION)
317 TOKEN_MFG(MFG_BOARD_NAME, CREATOR_MFG_BOARD_NAME,
318  0, 0, tokTypeMfgBoardName, 1,
319  {0,})
320 
321 TOKEN_NEXT_ADDRESS(MFG_MANUF_ID_ADDR,MFG_MANUF_ID_LOCATION)
322 TOKEN_MFG(MFG_MANUF_ID, CREATOR_MFG_MANUF_ID,
323  0, 0, tokTypeMfgManufId, 1,
324  {0x00,0x00,}) // default to 0 for st
325 
326 TOKEN_NEXT_ADDRESS(MFG_PHY_CONFIG_ADDR,MFG_PHY_CONFIG_LOCATION)
327 TOKEN_MFG(MFG_PHY_CONFIG, CREATOR_MFG_PHY_CONFIG,
328  0, 0, tokTypeMfgPhyConfig, 1,
329  {0x00,0x00,}) // default to non-boost mode, internal pa.
330 
331 TOKEN_NEXT_ADDRESS(MFG_BOOTLOAD_AES_KEY_ADDR,MFG_BOOTLOAD_AES_KEY_LOCATION)
332 TOKEN_MFG(MFG_BOOTLOAD_AES_KEY, CREATOR_MFG_BOOTLOAD_AES_KEY,
333  0, 0, tokTypeMfgBootloadAesKey, 1,
334  {0xFF,}) // default key is all f's
335 
336 TOKEN_NEXT_ADDRESS(MFG_EZSP_STORAGE_ADDR,MFG_EZSP_STORAGE_LOCATION)
337 TOKEN_MFG(MFG_EZSP_STORAGE, CREATOR_MFG_EZSP_STORAGE,
338  0, 0, tokTypeMfgEzspStorage, 1,
339  { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF })
340 
341 TOKEN_NEXT_ADDRESS(MFG_ASH_CONFIG_ADDR,MFG_ASH_CONFIG_LOCATION)
342 TOKEN_MFG(MFG_ASH_CONFIG, CREATOR_MFG_ASH_CONFIG,
343  0, 1, tokTypeMfgAshConfig, MFG_ASH_CONFIG_ARRAY_SIZE,
344  { 0xFFFF, })
345 
346 TOKEN_NEXT_ADDRESS(MFG_CBKE_DATA_ADDR,MFG_CBKE_DATA_LOCATION)
347 TOKEN_MFG(MFG_CBKE_DATA, CREATOR_MFG_CBKE_DATA,
348  0, 0, tokTypeMfgCbkeData, 1,
349  {0xFF,})
350 
351 TOKEN_NEXT_ADDRESS(MFG_INSTALLATION_CODE_ADDR,MFG_INSTALLATION_CODE_LOCATION)
352 TOKEN_MFG(MFG_INSTALLATION_CODE, CREATOR_MFG_INSTALLATION_CODE,
353  0, 0, tokTypeMfgInstallationCode, 1,
354  {0xFF,})
355 
356 TOKEN_NEXT_ADDRESS(MFG_OSC24M_BIAS_TRIM_ADDR,MFG_OSC24M_BIAS_TRIM_LOCATION)
357 TOKEN_MFG(MFG_OSC24M_BIAS_TRIM, CREATOR_MFG_OSC24M_BIAS_TRIM,
358  0, 0, tokTypeMfgOsc24mBiasTrim, 1,
359  {0xFF,})
360 
361 TOKEN_NEXT_ADDRESS(MFG_EUI_64_ADDR,MFG_EUI_64_LOCATION)
362 TOKEN_MFG(MFG_EUI_64, CREATOR_MFG_EUI_64,
363  0, 0, tokTypeMfgEui64, 1,
364  {3,3,3,3,0,0,0,0})
365 
366 #undef TOKEN_NEXT_ADDRESS
367 
368 #endif //DEFINETOKENS
369