Work / imx-rt1052-qspi
i.MX RT1052 QSPI Boot and H.264 Pipeline
Ported an H.264 decoder from HyperFlash to a custom QSPI-flash board.
- Role
- Firmware and board bring-up
- Timeframe
- Simplia Kit-01
- Stack
- C, MCUXpresso, i.MX RT1052, FlexSPI / QSPI, H.264
- Status
- Complete
Problem
The Simplia Kit-01 is a custom i.MX RT1052 board that stores code and assets in QSPI flash. The H.264 pipeline I was bringing up had been written against HyperFlash boot and HyperFlash geometry. On this family both devices hang off FlexSPI, but they are not interchangeable: command sequences, dummy cycles, density, and the boot header the ROM expects are different. Until those were rebuilt for the part actually fitted on Kit-01, the decoder image would not boot from flash, and a serial download still would not XIP or place decode buffers where the pipeline assumed they lived.
What I Built
I treated flash configuration and the memory map as the product, not as BSP leftovers. In MCUXpresso I wrote the boot path the RT1052 ROM uses on QSPI, including the flash configuration block the ROM reads before any application code runs. I built the FlexSPI lookup table and geometry for the QSPI device on the board instead of copying the HyperFlash example. I rebuilt the linker memory layout (ITCM, DTCM, OCRAM, and the external / XIP window) so application code, the LUT, and H.264 frame buffers did not overlap. Then I brought the existing H.264 decoder up on that map so the pipeline ran from QSPI rather than HyperFlash.
Hard Part
The hard part was not writing a decoder. It was getting the boot ROM, FlexSPI, and the decoder’s physical addresses to agree. A HyperFlash LUT that looks plausible still fails dummy-cycle and read-status sequences on QSPI. A linker file that worked on the reference module still puts a frame buffer on top of an XIP region once the external window moves. I rebuilt those three pieces (boot header, LUT, memory layout) as one system.
Result
H.264 pipeline running on the custom QSPI-flash board. Bootloader, flash configuration, and memory layout owned from scratch in MCUXpresso rather than inherited from the HyperFlash BSP.