teensy40/fcb.rs
1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2022.
4
5//! FlexSPI Configuration Block (FCB)
6//!
7//! The FCB holds command sequences and configurations necessary to boot
8//! an iMXRT10xx processor from FLASH over SPI.
9//!
10//! The array was auto-generated using the [`imxrt-boot-gen` crate](https://github.com/imxrt-rs/imxrt-boot-gen).
11//! We copied the array of magic numbers here, rather than incorporating
12//! that build-time dependency in tock.
13//!
14//! The array is only referenced in the linker script.
15
16pub type FCB = [u8; 512];
17
18#[link_section = ".fcb"]
19#[no_mangle]
20#[used]
21static FLEXSPI_CONFIGURATION_BLOCK: FCB = [
22 0x46, // 0x000 Tag 'FCFB'
23 0x43, // 0x001
24 0x46, // 0x002
25 0x42, // 0x003
26 0x00, // 0x004 Version 'bugfix'
27 0x00, // 0x005 Version 'minor'
28 0x01, // 0x006 Version 'major
29 0x56, // 0x007 Version 'V'
30 0x00, // 0x008 RESERVED
31 0x00, // 0x009 RESERVED
32 0x00, // 0x00A RESERVED
33 0x00, // 0x00B RESERVED
34 0x01, // 0x00C readSampleClkSrc
35 0x01, // 0x00D csHoldTime
36 0x02, // 0x00E csSetupTime
37 0x00, // 0x00F columnAddressWidth
38 0x00, // 0x010 deviceModeCfgEnable
39 0x00, // 0x011 RESERVED
40 0x00, // 0x012
41 0x00, // 0x013 waitTimeCfgCommands
42 0x00, // 0x014
43 0x00, // 0x015
44 0x00, // 0x016
45 0x00, // 0x017
46 0x00, // 0x018
47 0x00, // 0x019
48 0x00, // 0x01A
49 0x00, // 0x01B
50 0x00, // 0x01C
51 0x00, // 0x01D RESERVED
52 0x00, // 0x01E RESERVED
53 0x00, // 0x01F RESERVED
54 0x00, // 0x020
55 0x00, // 0x021
56 0x00, // 0x022
57 0x00, // 0x023
58 0x00, // 0x024
59 0x00, // 0x025
60 0x00, // 0x026
61 0x00, // 0x027
62 0x00, // 0x028
63 0x00, // 0x029
64 0x00, // 0x02A
65 0x00, // 0x02B
66 0x00, // 0x02C RESERVED
67 0x00, // 0x02D RESERVED
68 0x00, // 0x02E RESERVED
69 0x00, // 0x02F RESERVED
70 0x00, // 0x030
71 0x00, // 0x031
72 0x00, // 0x032
73 0x00, // 0x033
74 0x00, // 0x034
75 0x00, // 0x035
76 0x00, // 0x036
77 0x00, // 0x037
78 0x00, // 0x038
79 0x00, // 0x039
80 0x00, // 0x03A
81 0x00, // 0x03B
82 0x00, // 0x03C RESERVED
83 0x00, // 0x03D RESERVED
84 0x00, // 0x03E RESERVED
85 0x00, // 0x03F RESERVED
86 0x00, // 0x040
87 0x00, // 0x041
88 0x00, // 0x042
89 0x00, // 0x043
90 0x01, // 0x044 deviceType
91 0x04, // 0x045 sflashPadType
92 0x03, // 0x046 serialClkFreq
93 0x00, // 0x047
94 0x00, // 0x048 RESERVED
95 0x00, // 0x049 RESERVED
96 0x00, // 0x04A RESERVED
97 0x00, // 0x04B RESERVED
98 0x00, // 0x04C RESERVED
99 0x00, // 0x04D RESERVED
100 0x00, // 0x04E RESERVED
101 0x00, // 0x04F RESERVED
102 0x00, // 0x050 sflashA1Size
103 0x00, // 0x051
104 0x20, // 0x052
105 0x00, // 0x053
106 0x00, // 0x054 sflashA2Size
107 0x00, // 0x055
108 0x00, // 0x056
109 0x00, // 0x057
110 0x00, // 0x058 sflashB1Size
111 0x00, // 0x059
112 0x00, // 0x05A
113 0x00, // 0x05B
114 0x00, // 0x05C sflashB2Size
115 0x00, // 0x05D
116 0x00, // 0x05E
117 0x00, // 0x05F
118 0x00, // 0x060
119 0x00, // 0x061
120 0x00, // 0x062
121 0x00, // 0x063
122 0x00, // 0x064
123 0x00, // 0x065
124 0x00, // 0x066
125 0x00, // 0x067
126 0x00, // 0x068
127 0x00, // 0x069
128 0x00, // 0x06A
129 0x00, // 0x06B
130 0x00, // 0x06C
131 0x00, // 0x06D
132 0x00, // 0x06E
133 0x00, // 0x06F
134 0x00, // 0x070
135 0x00, // 0x071
136 0x00, // 0x072
137 0x00, // 0x073
138 0x00, // 0x074
139 0x00, // 0x075
140 0x00, // 0x076
141 0x00, // 0x077
142 0x00, // 0x078
143 0x00, // 0x079
144 0x00, // 0x07A
145 0x00, // 0x07B
146 0x00, // 0x07C
147 0x00, // 0x07D
148 0x00, // 0x07E
149 0x00, // 0x07F
150 0xEB, // 0x080 (LUT[0]) READ: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0xEB
151 0x04, // 0x081
152 0x18, // 0x082 (LUT[0]) READ: OPCODE=RADDR_SDR, PADS=QUAD, OPERAND=0x18
153 0x0A, // 0x083
154 0x06, // 0x084 (LUT[0]) READ: OPCODE=DUMMY_SDR, PADS=QUAD, OPERAND=0x6
155 0x32, // 0x085
156 0x04, // 0x086 (LUT[0]) READ: OPCODE=READ_SDR, PADS=QUAD, OPERAND=0x4
157 0x26, // 0x087
158 0x00, // 0x088 (LUT[0]) READ: STOP
159 0x00, // 0x089
160 0x00, // 0x08A (LUT[0]) READ: STOP
161 0x00, // 0x08B
162 0x00, // 0x08C (LUT[0]) READ: STOP
163 0x00, // 0x08D
164 0x00, // 0x08E (LUT[0]) READ: STOP
165 0x00, // 0x08F
166 0x05, // 0x090 (LUT[1]) READ_STATUS: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0x5
167 0x04, // 0x091
168 0x04, // 0x092 (LUT[1]) READ_STATUS: OPCODE=READ_SDR, PADS=SINGLE, OPERAND=0x4
169 0x24, // 0x093
170 0x00, // 0x094 (LUT[1]) READ_STATUS: STOP
171 0x00, // 0x095
172 0x00, // 0x096 (LUT[1]) READ_STATUS: STOP
173 0x00, // 0x097
174 0x00, // 0x098 (LUT[1]) READ_STATUS: STOP
175 0x00, // 0x099
176 0x00, // 0x09A (LUT[1]) READ_STATUS: STOP
177 0x00, // 0x09B
178 0x00, // 0x09C (LUT[1]) READ_STATUS: STOP
179 0x00, // 0x09D
180 0x00, // 0x09E (LUT[1]) READ_STATUS: STOP
181 0x00, // 0x09F
182 0x00, // 0x0A0 (LUT[2])
183 0x00, // 0x0A1
184 0x00, // 0x0A2 (LUT[2])
185 0x00, // 0x0A3
186 0x00, // 0x0A4 (LUT[2])
187 0x00, // 0x0A5
188 0x00, // 0x0A6 (LUT[2])
189 0x00, // 0x0A7
190 0x00, // 0x0A8 (LUT[2])
191 0x00, // 0x0A9
192 0x00, // 0x0AA (LUT[2])
193 0x00, // 0x0AB
194 0x00, // 0x0AC (LUT[2])
195 0x00, // 0x0AD
196 0x00, // 0x0AE (LUT[2])
197 0x00, // 0x0AF
198 0x06, // 0x0B0 (LUT[3]) WRITE_ENABLE: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0x6
199 0x04, // 0x0B1
200 0x00, // 0x0B2 (LUT[3]) WRITE_ENABLE: STOP
201 0x00, // 0x0B3
202 0x00, // 0x0B4 (LUT[3]) WRITE_ENABLE: STOP
203 0x00, // 0x0B5
204 0x00, // 0x0B6 (LUT[3]) WRITE_ENABLE: STOP
205 0x00, // 0x0B7
206 0x00, // 0x0B8 (LUT[3]) WRITE_ENABLE: STOP
207 0x00, // 0x0B9
208 0x00, // 0x0BA (LUT[3]) WRITE_ENABLE: STOP
209 0x00, // 0x0BB
210 0x00, // 0x0BC (LUT[3]) WRITE_ENABLE: STOP
211 0x00, // 0x0BD
212 0x00, // 0x0BE (LUT[3]) WRITE_ENABLE: STOP
213 0x00, // 0x0BF
214 0x00, // 0x0C0 (LUT[4])
215 0x00, // 0x0C1
216 0x00, // 0x0C2 (LUT[4])
217 0x00, // 0x0C3
218 0x00, // 0x0C4 (LUT[4])
219 0x00, // 0x0C5
220 0x00, // 0x0C6 (LUT[4])
221 0x00, // 0x0C7
222 0x00, // 0x0C8 (LUT[4])
223 0x00, // 0x0C9
224 0x00, // 0x0CA (LUT[4])
225 0x00, // 0x0CB
226 0x00, // 0x0CC (LUT[4])
227 0x00, // 0x0CD
228 0x00, // 0x0CE (LUT[4])
229 0x00, // 0x0CF
230 0x20, // 0x0D0 (LUT[5]) ERASE_SECTOR: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0x20
231 0x04, // 0x0D1
232 0x18, // 0x0D2 (LUT[5]) ERASE_SECTOR: OPCODE=RADDR_SDR, PADS=SINGLE, OPERAND=0x18
233 0x08, // 0x0D3
234 0x00, // 0x0D4 (LUT[5]) ERASE_SECTOR: STOP
235 0x00, // 0x0D5
236 0x00, // 0x0D6 (LUT[5]) ERASE_SECTOR: STOP
237 0x00, // 0x0D7
238 0x00, // 0x0D8 (LUT[5]) ERASE_SECTOR: STOP
239 0x00, // 0x0D9
240 0x00, // 0x0DA (LUT[5]) ERASE_SECTOR: STOP
241 0x00, // 0x0DB
242 0x00, // 0x0DC (LUT[5]) ERASE_SECTOR: STOP
243 0x00, // 0x0DD
244 0x00, // 0x0DE (LUT[5]) ERASE_SECTOR: STOP
245 0x00, // 0x0DF
246 0x00, // 0x0E0 (LUT[6])
247 0x00, // 0x0E1
248 0x00, // 0x0E2 (LUT[6])
249 0x00, // 0x0E3
250 0x00, // 0x0E4 (LUT[6])
251 0x00, // 0x0E5
252 0x00, // 0x0E6 (LUT[6])
253 0x00, // 0x0E7
254 0x00, // 0x0E8 (LUT[6])
255 0x00, // 0x0E9
256 0x00, // 0x0EA (LUT[6])
257 0x00, // 0x0EB
258 0x00, // 0x0EC (LUT[6])
259 0x00, // 0x0ED
260 0x00, // 0x0EE (LUT[6])
261 0x00, // 0x0EF
262 0x00, // 0x0F0 (LUT[7])
263 0x00, // 0x0F1
264 0x00, // 0x0F2 (LUT[7])
265 0x00, // 0x0F3
266 0x00, // 0x0F4 (LUT[7])
267 0x00, // 0x0F5
268 0x00, // 0x0F6 (LUT[7])
269 0x00, // 0x0F7
270 0x00, // 0x0F8 (LUT[7])
271 0x00, // 0x0F9
272 0x00, // 0x0FA (LUT[7])
273 0x00, // 0x0FB
274 0x00, // 0x0FC (LUT[7])
275 0x00, // 0x0FD
276 0x00, // 0x0FE (LUT[7])
277 0x00, // 0x0FF
278 0x00, // 0x100 (LUT[8])
279 0x00, // 0x101
280 0x00, // 0x102 (LUT[8])
281 0x00, // 0x103
282 0x00, // 0x104 (LUT[8])
283 0x00, // 0x105
284 0x00, // 0x106 (LUT[8])
285 0x00, // 0x107
286 0x00, // 0x108 (LUT[8])
287 0x00, // 0x109
288 0x00, // 0x10A (LUT[8])
289 0x00, // 0x10B
290 0x00, // 0x10C (LUT[8])
291 0x00, // 0x10D
292 0x00, // 0x10E (LUT[8])
293 0x00, // 0x10F
294 0x02, // 0x110 (LUT[9]) PAGE_PROGRAM: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0x2
295 0x04, // 0x111
296 0x18, // 0x112 (LUT[9]) PAGE_PROGRAM: OPCODE=RADDR_SDR, PADS=SINGLE, OPERAND=0x18
297 0x08, // 0x113
298 0x04, // 0x114 (LUT[9]) PAGE_PROGRAM: OPCODE=WRITE_SDR, PADS=SINGLE, OPERAND=0x4
299 0x20, // 0x115
300 0x00, // 0x116 (LUT[9]) PAGE_PROGRAM: STOP
301 0x00, // 0x117
302 0x00, // 0x118 (LUT[9]) PAGE_PROGRAM: STOP
303 0x00, // 0x119
304 0x00, // 0x11A (LUT[9]) PAGE_PROGRAM: STOP
305 0x00, // 0x11B
306 0x00, // 0x11C (LUT[9]) PAGE_PROGRAM: STOP
307 0x00, // 0x11D
308 0x00, // 0x11E (LUT[9]) PAGE_PROGRAM: STOP
309 0x00, // 0x11F
310 0x00, // 0x120 (LUT[10])
311 0x00, // 0x121
312 0x00, // 0x122 (LUT[10])
313 0x00, // 0x123
314 0x00, // 0x124 (LUT[10])
315 0x00, // 0x125
316 0x00, // 0x126 (LUT[10])
317 0x00, // 0x127
318 0x00, // 0x128 (LUT[10])
319 0x00, // 0x129
320 0x00, // 0x12A (LUT[10])
321 0x00, // 0x12B
322 0x00, // 0x12C (LUT[10])
323 0x00, // 0x12D
324 0x00, // 0x12E (LUT[10])
325 0x00, // 0x12F
326 0x60, // 0x130 (LUT[11]) CHIP_ERASE: OPCODE=CMD_SDR, PADS=SINGLE, OPERAND=0x60
327 0x04, // 0x131
328 0x00, // 0x132 (LUT[11]) CHIP_ERASE: STOP
329 0x00, // 0x133
330 0x00, // 0x134 (LUT[11]) CHIP_ERASE: STOP
331 0x00, // 0x135
332 0x00, // 0x136 (LUT[11]) CHIP_ERASE: STOP
333 0x00, // 0x137
334 0x00, // 0x138 (LUT[11]) CHIP_ERASE: STOP
335 0x00, // 0x139
336 0x00, // 0x13A (LUT[11]) CHIP_ERASE: STOP
337 0x00, // 0x13B
338 0x00, // 0x13C (LUT[11]) CHIP_ERASE: STOP
339 0x00, // 0x13D
340 0x00, // 0x13E (LUT[11]) CHIP_ERASE: STOP
341 0x00, // 0x13F
342 0x00, // 0x140 (LUT[12])
343 0x00, // 0x141
344 0x00, // 0x142 (LUT[12])
345 0x00, // 0x143
346 0x00, // 0x144 (LUT[12])
347 0x00, // 0x145
348 0x00, // 0x146 (LUT[12])
349 0x00, // 0x147
350 0x00, // 0x148 (LUT[12])
351 0x00, // 0x149
352 0x00, // 0x14A (LUT[12])
353 0x00, // 0x14B
354 0x00, // 0x14C (LUT[12])
355 0x00, // 0x14D
356 0x00, // 0x14E (LUT[12])
357 0x00, // 0x14F
358 0x00, // 0x150 (LUT[13])
359 0x00, // 0x151
360 0x00, // 0x152 (LUT[13])
361 0x00, // 0x153
362 0x00, // 0x154 (LUT[13])
363 0x00, // 0x155
364 0x00, // 0x156 (LUT[13])
365 0x00, // 0x157
366 0x00, // 0x158 (LUT[13])
367 0x00, // 0x159
368 0x00, // 0x15A (LUT[13])
369 0x00, // 0x15B
370 0x00, // 0x15C (LUT[13])
371 0x00, // 0x15D
372 0x00, // 0x15E (LUT[13])
373 0x00, // 0x15F
374 0x00, // 0x160 (LUT[14])
375 0x00, // 0x161
376 0x00, // 0x162 (LUT[14])
377 0x00, // 0x163
378 0x00, // 0x164 (LUT[14])
379 0x00, // 0x165
380 0x00, // 0x166 (LUT[14])
381 0x00, // 0x167
382 0x00, // 0x168 (LUT[14])
383 0x00, // 0x169
384 0x00, // 0x16A (LUT[14])
385 0x00, // 0x16B
386 0x00, // 0x16C (LUT[14])
387 0x00, // 0x16D
388 0x00, // 0x16E (LUT[14])
389 0x00, // 0x16F
390 0x00, // 0x170 (LUT[15]) DUMMY: STOP
391 0x00, // 0x171
392 0x00, // 0x172 (LUT[15]) DUMMY: STOP
393 0x00, // 0x173
394 0x00, // 0x174 (LUT[15]) DUMMY: STOP
395 0x00, // 0x175
396 0x00, // 0x176 (LUT[15]) DUMMY: STOP
397 0x00, // 0x177
398 0x00, // 0x178 (LUT[15]) DUMMY: STOP
399 0x00, // 0x179
400 0x00, // 0x17A (LUT[15]) DUMMY: STOP
401 0x00, // 0x17B
402 0x00, // 0x17C (LUT[15]) DUMMY: STOP
403 0x00, // 0x17D
404 0x00, // 0x17E (LUT[15]) DUMMY: STOP
405 0x00, // 0x17F
406 0x00, // 0x180
407 0x00, // 0x181
408 0x00, // 0x182
409 0x00, // 0x183
410 0x00, // 0x184
411 0x00, // 0x185
412 0x00, // 0x186
413 0x00, // 0x187
414 0x00, // 0x188
415 0x00, // 0x189
416 0x00, // 0x18A
417 0x00, // 0x18B
418 0x00, // 0x18C
419 0x00, // 0x18D
420 0x00, // 0x18E
421 0x00, // 0x18F
422 0x00, // 0x190
423 0x00, // 0x191
424 0x00, // 0x192
425 0x00, // 0x193
426 0x00, // 0x194
427 0x00, // 0x195
428 0x00, // 0x196
429 0x00, // 0x197
430 0x00, // 0x198
431 0x00, // 0x199
432 0x00, // 0x19A
433 0x00, // 0x19B
434 0x00, // 0x19C
435 0x00, // 0x19D
436 0x00, // 0x19E
437 0x00, // 0x19F
438 0x00, // 0x1A0
439 0x00, // 0x1A1
440 0x00, // 0x1A2
441 0x00, // 0x1A3
442 0x00, // 0x1A4
443 0x00, // 0x1A5
444 0x00, // 0x1A6
445 0x00, // 0x1A7
446 0x00, // 0x1A8
447 0x00, // 0x1A9
448 0x00, // 0x1AA
449 0x00, // 0x1AB
450 0x00, // 0x1AC
451 0x00, // 0x1AD
452 0x00, // 0x1AE
453 0x00, // 0x1AF
454 0x00, // 0x1B0 RESERVED
455 0x00, // 0x1B1 RESERVED
456 0x00, // 0x1B2 RESERVED
457 0x00, // 0x1B3 RESERVED
458 0x00, // 0x1B4 RESERVED
459 0x00, // 0x1B5 RESERVED
460 0x00, // 0x1B6 RESERVED
461 0x00, // 0x1B7 RESERVED
462 0x00, // 0x1B8 RESERVED
463 0x00, // 0x1B9 RESERVED
464 0x00, // 0x1BA RESERVED
465 0x00, // 0x1BB RESERVED
466 0x00, // 0x1BC RESERVED
467 0x00, // 0x1BD RESERVED
468 0x00, // 0x1BE RESERVED
469 0x00, // 0x1BF RESERVED
470 0x00, // 0x1C0 pageSize
471 0x01, // 0x1C1
472 0x00, // 0x1C2
473 0x00, // 0x1C3
474 0x00, // 0x1C4 sectorSize
475 0x10, // 0x1C5
476 0x00, // 0x1C6
477 0x00, // 0x1C7
478 0x01, // 0x1C8 ipCmdSerialClkFreq
479 0x00, // 0x1C9
480 0x00, // 0x1CA
481 0x00, // 0x1CB
482 0x00, // 0x1CC RESERVED
483 0x00, // 0x1CD RESERVED
484 0x00, // 0x1CE RESERVED
485 0x00, // 0x1CF RESERVED
486 0x00, // 0x1D0 RESERVED
487 0x00, // 0x1D1 RESERVED
488 0x00, // 0x1D2 RESERVED
489 0x00, // 0x1D3 RESERVED
490 0x00, // 0x1D4 RESERVED
491 0x00, // 0x1D5 RESERVED
492 0x00, // 0x1D6 RESERVED
493 0x00, // 0x1D7 RESERVED
494 0x00, // 0x1D8 RESERVED
495 0x00, // 0x1D9 RESERVED
496 0x00, // 0x1DA RESERVED
497 0x00, // 0x1DB RESERVED
498 0x00, // 0x1DC RESERVED
499 0x00, // 0x1DD RESERVED
500 0x00, // 0x1DE RESERVED
501 0x00, // 0x1DF RESERVED
502 0x00, // 0x1E0 RESERVED
503 0x00, // 0x1E1 RESERVED
504 0x00, // 0x1E2 RESERVED
505 0x00, // 0x1E3 RESERVED
506 0x00, // 0x1E4 RESERVED
507 0x00, // 0x1E5 RESERVED
508 0x00, // 0x1E6 RESERVED
509 0x00, // 0x1E7 RESERVED
510 0x00, // 0x1E8 RESERVED
511 0x00, // 0x1E9 RESERVED
512 0x00, // 0x1EA RESERVED
513 0x00, // 0x1EB RESERVED
514 0x00, // 0x1EC RESERVED
515 0x00, // 0x1ED RESERVED
516 0x00, // 0x1EE RESERVED
517 0x00, // 0x1EF RESERVED
518 0x00, // 0x1F0 RESERVED
519 0x00, // 0x1F1 RESERVED
520 0x00, // 0x1F2 RESERVED
521 0x00, // 0x1F3 RESERVED
522 0x00, // 0x1F4 RESERVED
523 0x00, // 0x1F5 RESERVED
524 0x00, // 0x1F6 RESERVED
525 0x00, // 0x1F7 RESERVED
526 0x00, // 0x1F8 RESERVED
527 0x00, // 0x1F9 RESERVED
528 0x00, // 0x1FA RESERVED
529 0x00, // 0x1FB RESERVED
530 0x00, // 0x1FC RESERVED
531 0x00, // 0x1FD RESERVED
532 0x00, // 0x1FE RESERVED
533 0x00, // 0x1FF RESERVED
534];