Splash Screen After ColdBoot

Hello,

For updating our software on the Colibri iMX6 board, we perform a cold boot at the end using the Update tool. We noticed that the screen remains black and does not show the splashscreen for quite a long time (around 25 seconds). This is considerably longer than what we used to get with the PXA320 board (running WinCE 6.0 v4.5) which showed the splashscreen after only about 3 seconds after a cold boot.

Furthermore, on the iMX6 board, the splashscreen is shown almost instatly after being powered on. The delayed splashscreen only happens when we do a cold boot.

Is there a way to avoid this delay?

We also noticed that the splashscreen seems to be suppressed by an “autorun” application. We have a console application in the AutoRun folder that occassionally performs a long operation (around 2 minutes) before launching our main (GUI) application. If that console application performs this operation, the screen remains black for the whole duration. The splashscreen only appears after this lengthy operation is completed at which time our GUI application takes over so the splashscreen is visible for only about one second. The intention was that the splashscreen should appear while the console operation does its thing.

Thank you for reading and we would greatly appreciate if you can give us some hints.

My impression is that splash screen is not visibile when bootloader is running. In the OS screen is re-initialized on 1st graphic operation (this explains why running a non-graphic app at boot delays it).
Can you try to connect to debug serial al press space? Can you see something on your screen in that state?
What kind of screen are you using?

The splash screen has been setup through the bootloader configuration and is shown when I enter the bootloader menu.

As for the display settings, here is what we have in the registry:

; Display settings
[HKEY_LOCAL_MACHINE\Drivers\Display\Colibri]
“disp_gpio”=dword:00000047
“bl_gpio”=dword:00000049
“CXScreen”=dword:00000320
“pclk”=dword:01ba8140
“LDDS”=dword:00000010
“pcp”=dword:00000000
“bl_pol”=dword:00000000
“disp_pol”=dword:00000000
“VideoMemSize”=dword:00800000
“CYScreen”=dword:000001e0
“Out”=dword:00000000
“Bpp”=dword:00000020
“hsp”=dword:00000001
“elw”=dword:00000010
“hsw”=dword:00000060
“blw”=dword:00000030
“efw”=dword:0000000b
“vsw”=dword:00000002
“bfw”=dword:0000001f
“vsp”=dword:00000001
“oep”=dword:00000000

Can you try to dump out splash screen settings from bootloader console?
You can enter the prompt by connecting a serial terminal to UARTA and configure it as 115200 baud 8 data bits 1 stop, no parity.
During boot you can press space (you can keep spacebar pressed before you power-on the device) and then “X”.
On the prompt type:
set ss
and capture the output.
It seems that there are some conditions that work at power on and not after a software reset.
Does your display need some additional control pins to operate (like setting rotation or other properties at boot?).

Here is the ss dump:

ss.fileaddr:	0x0	(FlashAddress with SplashScreen Data)
ss.filesize:	0		(Size of SplashScreen Data)
ss.enable:	1		(Enable SplashScreen)
ss.dbginfo:	0		(Enable DebugInfos)
ss.res:	0x0	(Reserved Flags)
ss.width:	800		(Display Width)
ss.height:	480		(Display Height)
ss.bpp:	32		(BitsPerPixel)
ss.ldds:	16		(LCD Lines Used)
ss.type:	1		(Display Type (0=Passive, 1=Active))
ss.color:	1		(0=Mono, 1=Color)
ss.dual:	0		(0=SinglePanel, 1=DualPanel)
ss.overlay:	0		(Overlay Enable)
ss.dpc:	0		(Double Pixel Clock)
ss.pcp:	0		(Pixel Clock Polarity)
ss.oep:	0		(Output Enable Polarity)
ss.hsp:	1		(Horizontal Sync Polarity)
ss.vsp:	1		(Vertical Sync Polarity)
ss.bs:	5		(LCD Buffer Strength)
ss.pclk:	29000000		(PixelClock (in Hz))
ss.hsw:	96		(Horizontal Sync Width)
ss.vsw:	2		(Vertical Sync Width)
ss.blw:	48		(Begin of Line Width)
ss.elw:	16		(End of Line Width)
ss.bfw:	31		(Begin of Frame Width)
ss.efw:	11		(End of Frame Width)
ss.acb:	0		(AC Bias Frequency)
ss.disp_gpio:	71		(Display On/Off SO-DIMM/MXM3 pin (0 means no pin used for this purpose))
ss.bl_gpio:	73		(BackLight On/Off SO-DIMM/MXM3 pin (0 means no pin used for this purpose))
ss.dispondelay:	0		(Display On Delay)
ss.disp_pol:	0		(Display On/Off polarity)
ss.bl_pol:	0		(BackLight On/Off polarity)
ss.pcddiv:	1		(Enable Pixel Clock PreDivider)
ss.out:	0		(Output device (Apalis: 0=VGA,1=parallel,2/3/4=LVDS,5=HDMI Colibri: 0=parallel,5=HDMI))
ss.mode:	0		(Standard mode id (overrides settings))
ss.detectmode:	0		(0=use parms, 1=match EDID info with standard mode, 2=use EDID preferred mode)
ss.noOE:	0		(Disables OE/DE signal)
ss.noVSYNC:	0		(Disables VSYNC signal)
ss.noHSYNC:	0		(Disables HSYNC signal)
ss.jeida:	0		(Enables JEIDA mapping for LVDS)
ss.res:	0x0	(Reserved Flags)
ss.edidaddr:	0x50	(7-bit i2c address, where the EDID EEPROM is located)
ss.edidenable:	0		(1=enable reading of EDID data from i2c EEPROM. 0=disable this feature)

It may be that the state of some pins after a cold boot is different from the one at power on.
Do you have extra signals connected to the display (like pins to configure rotation or behavior of control signals etc.?).
Issue happens on SW reset or also if you press the reset button?

We found out that the problem could be because of the backlight. If you remember I mentioned in my original post that in the AutoRun we have a non-GUI executable that performs some time-consuming operations before finally launching our main GUI application.

When we set-up the backlight in this non-GUI executable, we can see the screen now. There is still a small amount of time when the screen is black after a cold boot, around 5 seconds - compared to almost none if the terminal was powered on. But this we could live with.

How do you setup backlight? If you use GPIOs the pin.XX.* settings in the bootloader may be used to toggle those pins to the right state quickly after boot.

As it turns out, we are using Pin 30 to set PWM for the backlight. After applying the following setting in the bootloader the screen is visible immediately after a cold boot:
set pin.30.ctrl=1
set pin.30.direction=1
set pin.30.strength=4
set pin.30.level=1
save pin

This fixes our issue. Thank you for your support.

As it turns out, we are using Pin 30 to set PWM for the backlight. After applying the following setting in the bootloader the screen is visible immediately after a cold boot:
set pin.30.ctrl=1
set pin.30.direction=1
set pin.30.strength=4
set pin.30.level=1
save pin

This fixes our issue. Thank you for your support.