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