i.MX6 Booting Process - Boot loader

Showing results for 
Search instead for 
Did you mean: 

i.MX6 Booting Process - Boot loader

Contributor III


I am working with a customized i.MX6 Quad-core processor board, and I've a working Boot loader from another i.MX6 Quad-core processor board.

-->This board2's Boot loader includes 'a part of U-Boot as first stage Boot loader' and 'customized second stage Boot loader' together.

When I try to use and load board2's Boot loader into Board1, I am getting an error when loading U-Boot and unable to load complete BL.

However, When I use Mfg tool to load U-boot into Board1, it works fine.

Now, As a beginner at Base software level, I'm trying to understand Booting process step by step:

When we have different external RAM and memory components in size from different boards 1 & 2:

1). As Boot ROM code is hard coded and HID is used to load Boot Loader software for my board

2). At assembly level I think code remain same because both the boards have same processor arch i.e., i.MX6 QC

3). DCD - Any idea on how Device Configuration Data varies from Board 1 to 2? If so what changes do you think?

4). Also please suggest where exactly can I look for changes in H/w and Boot loader S/w in order to make my board work?

Please ask if any further info is required, thanks in advance.

Labels (2)
3 Replies

NXP TechSupport
NXP TechSupport

Refer to the Chapter 1 of the attached document. It describes in details the procedure of porting the u-boot from one hardware to another.

Have a great day,

Note: If this post answers your question, please click the Correct Answer button. Thank you!

Contributor III

I have a few clarifying questions:

1. What do you mean by "here i use python script for loading BL into board"?  Are you saying there is a python script on your host/development machine to push the new bootloader to your target?

2. Are you using the "serial boot" mode of the iMX6 to receive the new bootloader over USB (like the MFG tool uses)?  I will assume this is what you are doing and using your "python script" instead of the MFG tool to push the code down.

3. What exactly is the "error" you are getting?  For instance, is it failing to download into RAM (CRC mismatch) or is it failing to burn the code to the storage device rom DDR (device not responding, CRC failure to the target, etc)?

4. What is your target storage device for the bootloader?

Now, for possible problems.

You mentioned your DDR configuration has changed.

- Have you updated the IVT/DCD to reflect these changes?  (See IMX6DQRM chapter 8 for the DCD and chapter 44 for the DDR controller)

- Have you run the DDR Stress test/calibration utility on your new board?  This will measure timing and help with the scarier DDR configuration register settings.  I always start with the initial settings from the SABRE board that is the closest match to my board and then run the calibration and stress tests.

- Have you modified where your bootloader will be stored?

-- Has it, for instance, changed from SPI NOR flash to an SD card?

-- Even more subtle, has it changed from SD1 to SD3?

-- If SD Card, is the card detect signal connected to the pin where the ROM expects it to be?  (See chapter 8)

NXP Employee
NXP Employee


I am not sure if I really understand the problem, but if you are having problems porting a bootloader or booting image from one board to another and both boards have similar hardware characteristics like debug UART port, DDR etc. It is probable that the DCD is the problem.

The DCD are commands that the ROM code uses to configure and tune  the DDR so it copies the image from an external device like SD to DDR.

Are you able to detect on which stage the Bootloader fails? Can you see any output from the serial console?

Best Regards,