AnsweredAssumed Answered

Assistance appreciated with bringing up a new board

Question asked by Dubravko Moravski on Aug 11, 2014
Latest reply on Aug 22, 2014 by Dubravko Moravski



We've made a new board with i.MX6 Solo CPU. We think all power supplies are good. USB OTG works and Mfg Tool "sees" the board. Memory calibration tool worked well and repeated memory stress tests showed no errors.


My problems is that I can't get mfg u-boot to show anything, any signs of activity. As far as I can say, I've made it in accordance with all Freescale's documentation. DCD table contains DDR3 initialization with values copy & pasted from Excel tool + added values from calibration. I've also added initialization of clocks, again from Excel tool. In board-specific initialization, I just configure single UART for debug printouts.


When downloading u-boot, Mfg Tool just shows "Loading u-boot" message indefinitely. If I close it, the process remains hanging and I must kill with Windows Task Manager.


If I don't use my u-boot but instead use for example u-boot-mx6q-sabresd.bin, then CPU appears to load boot, Mfg Tool downloads kernel and RAM filesystem and then hangs while jumping to kernel (almost certainly because this boot doesn't have proper DDR initialization for my board and almost certainly there is actually no meaningful contents in RAM). But this u-boot at least partially works, while mine doesn't work at all.


How can I debug the problem? Thanks in advance for any reply.



Here is relevant contents from my ucl2.xml file. I'd like to use the usual combination, SPI flash for boot and soldered MMC for kernel and file system.




    <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0061"/>

    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>



  <LIST name="u-boot only" desc="Choose SPI and eMMC as media">

    <!--CMD state="BootStrap" type="boot" body="BootStrap" file ="u-boot-mx6q-sabresd.bin" >Loading U-boot</CMD-->

    <CMD state="BootStrap" type="boot" body="BootStrap" file ="u-boot.bin" >Loading U-boot</CMD>

    <CMD state="BootStrap" type="load" file="uImage" address="0x10800000"

      loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Kernel.</CMD>

    <CMD state="BootStrap" type="load" file="initramfs.cpio.gz.uboot" address="0x10C00000"

      loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Initramfs.</CMD>

    <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>


    <CMD state="Updater" type="push" body="mknod class/mtd,mtd0,/dev/mtd0"/>

    <CMD state="Updater" type="push" body="mknod block,mtdblock0,/dev/mtdblock0,block"/>

    <CMD state="Updater" type="push" body="$ flash_eraseall -j /dev/mtd0">Erasing Boot partition</CMD>

    <CMD state="Updater" type="push" body="send" file="files/u-boot.bin">Sending U-Boot</CMD>

    <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mtdblock0 bs=512 seek=2 skip=2">write U-Boot to SPI-NOR</CMD>



As instructed by documentation, I've added this to my board header file:


#define CONFIG_MFG
#define CONFIG_BOOTARGS "console=ttymxc0,115200 "\
#define CONFIG_BOOTCOMMAND  "bootm 0x10800000 0x10c00000"
//; 0x10800000 is the load address of the kernel image. It neesd to be changed according to your specific platform memory configuration.
//; 0x10c00000 is the initrd address. It needs to be changed according to your specific platform memory configuration.
#define CONFIG_ENV_IS_NOWHERE 1 //;avoid reading U-Boot command from storage.

... and I also have this:

#define CONFIG_ARMV7    /* This is armv7 Cortex-A9 CPU core */

#define CONFIG_MXC

//#define CONFIG_MX6SL

//#define CONFIG_MX6SL_ARM2

#define CONFIG_MX6DL    // SOLO




#define CONFIG_MX6_CLK32       32768