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