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];