none
IMX35 Splash screen RRS feed

  • Question

  • Hi,

    I am new to Windows CE, I have to display a splash screen on bootup before Windows CE loads up. Does anybody have an example of it done in IMX35 Eboot.

     

    Thanks!

    Friday, June 10, 2011 4:14 PM

All replies

  • you have to initialize your LCD controller in and fill your splash screen on LCD Frame buffer in Bootloader
    Vinoth.R http://vinoth-vinothblog.blogspot.com http://www.e-consystems.com
    Saturday, June 11, 2011 8:46 AM
  • IMX35 LCD controller is complicated. Is there a way to copy some code from the driver, I am trying to look at the driver but it is very convoluted. Does any body know if copying code from driver will work?

     

    Thanks!

    Tuesday, June 14, 2011 1:58 PM
  • You'll have to understand and modify the code for it to work.  Yes, generally, it's more-useful than just reading the datasheet and figuring it out yourself.

    Paul T.

    Tuesday, June 14, 2011 6:33 PM
  • I am a little confused.  Do you actually need the splash screen to load at boot or do you just need it to show up before the OS image shows up?
    Tuesday, June 14, 2011 6:53 PM
  • I don't know the difference between the two you mentioned but I need to display a splash screen before the OS initializes the LCD.
    Tuesday, June 14, 2011 7:49 PM
  • Ok.  I think these guys are right about the process you will need to go through.  I only asked because in my situation we are autolaunching our application.  

     

    This is a good place to start when thinking about a true splash screen:

    http://geekswithblogs.net/BruceEitman/archive/2008/05/14/windows-ce-bootloader-splash-screen.aspx

    Tuesday, June 14, 2011 8:23 PM
  • In the latest Freescale WinCE BSP they actually have code that loads a freescale logo as a splash screen, just after they configure the LCD. Look for DDLCDCMisc.cpp, there is a function commented out at the end of the file called LoadFreescaleLogo(). To really make it a splash screen you'd need to port the LCD init routine to the bootloader, and that function, and possibly share a framebuffer between bootloader and the OS.

    Tuesday, June 14, 2011 11:23 PM
  • Hi Barak,

    I looked at that code but I am having trouble with initializing the LCD itself. I am not sure what part of the LCD initialization to port from the driver.

    Thanks!

    Wednesday, June 15, 2011 4:02 PM
  • It's actually not that bad porting the code to the bootloader. You need to configure the IO pins in the bootloader with OAL_IOMUX_SET_MUX and OAL_IOMUX_SET_PAD, and then rip the code out of
    BOOL MXDDLcdc::SetModeHardware(int modeNo)

    which configures the iMX LCD controller hardware (and only really requires extracting the values it uses from the iMX25 code and using OAL clocking calls instead off DDK calls), and then run the LoadFreescaleLogo() code.

    I shared a framebuffer between the bootloader and the OS so the image doesn't flicker when the OS takes control of the LCD, which set in image_cfg.h and then I use the value to configure m_nLAWPhysical/m_pVideoMemory in

    AllocVideoMemory

    Hope that helps a bit.

    Barak.

    Thursday, June 16, 2011 5:02 AM
  • Barak,

    Thanks for the reply, I will try it!

     

    Friday, June 17, 2011 5:23 PM
  • Barak,

    I could not work on it because I had to replace my eval board. I am looking at porting code from yesterday but it still looks very complex to me.

     

    Did you do splash screen on IMX35? if so can you share some code to initialize the LCD, I can deal with loading the screen but LCD initialization itself is getting very complex.

     

    Thanks!

    Thursday, June 23, 2011 1:34 PM
  • Sorry, I haven't done it on an iMX35, we use an iMX25 and it seems that lcd controller is easier to setup then the iMX35 after I quickly browsed the iMX35 source tree.

    I would guess you need to ignore most of the stuff to do with video and touchscreen and just try and concentrate on the areas the configure the IOs to the lcd and the hardware controller.

    Friday, June 24, 2011 1:09 AM
  • Hi Barak,

    I was just reading through this thread, and am in a similar situation (that is to have a logo shown on the bootloader part).  However, I am working on an iMX25, as you did.  Would you be able to give some hints on getting a splash screen shown on bootup?

    Really appreciate any help.

    x3v3r

    Friday, February 17, 2012 6:15 AM
  • I literally did what I mentioned above in post #10. Copied BSPInitLCD, SetModeHardware and AllocVideoMemory and changed all their calls to not use the DDK library. I deleted all interrupt and thread references in the bootloader.

    Basically:

    1 Setup display values, bpp, height, width, screenstride

    2 Map LCD registers.

    3 Setup pointer to framebuffer address (Similar to AllocVideoMemory)

    config.bib: FRAMEBUFFER     83C00000    00400000    RESERVED

    image_cfg.h:

    #define IMAGE_BOOT_FRAMEBUFFER_OFFSET       IMAGE_BOOT_NKIMAGE_RAM_PA_START + IMAGE_BOOT_NKIMAGE_RAM_SIZE
    #define IMAGE_BOOT_FRAMEBUFFER_SIZE         (3*(height*width*(bpp/8)))

    Bootloader/WinCE:

            m_pVideoMemory = (PUCHAR)OALPAtoVA(IMAGE_BOOT_FRAMEBUFFER_OFFSET, FALSE);
            m_nLAWPhysical = IMAGE_BOOT_FRAMEBUFFER_OFFSET;

    4 Configure all the pins to the LCD (BSPInitLCD)

    5 Configure LCD controller (SetModeHardware)

    6 Copy image to framebuffer address (LoadFreescaleLogo)

    To setup the hardware registers I ported SetModeHardware to the OAL. In AllocVideoMemory there are two values m_nLAWPhysical/m_pVideoMemory that I now initialise with a common value - (ie Top of RAM - 4MB), this is shared between the bootloader and WinCE so that there is no flicker when WinCE takes over the screen. I used image_cfg.h to set the value and retrieve it. You also need to stop WinCE from re-initialising the display as it is already configured in the bootloader. The screen enable line uses the DDKGPIOWriteDataPin calls that don't exist in the bootloader, so that involved changing all the calls to the ddk gpio calls to OUTREG/INREG calls, I think I created an OAL read/write gpio port function to mimic all the DDKGPIOWriteDataPin, and changed all the DDKIomuxSetPinMux/DDKIomunSetPadMux to OAL_IOMUX_SET_PAD and OAL_IOMUX_SET_PAD etc.

    In the freescale BSP source in DDLcdcMisc.cpp there is a function LoadFreescaleLogo that is commented out in the header files that actually puts up a splash screen, but at the start of WinCE not Eboot, I just copied that function into eboot and modified it to use OAL calls.

    In the end I did find myself copying alot of the source from Freescale's Linux distro (specifically the bootloader source for uboot) to display the image, as they had all the functionality for loading different sized bmp files (and as our screen is rotated 90deg it was easier to just hand a bitmap over than continually extract the data portion out of the file).

    Good luck!

    Monday, February 20, 2012 3:57 AM