Colibri T30 fails to reboot

Colibri T30 v1.1b fails to reboot approximately in 30% cases.
This behaviour doesn’t depend on how was reboot issued:

  • turning power off and on
  • calling update /rc
  • executing system call KernelIoControl(IOCTL_HAL_REBOOT)

The boards are running Windows CE7, ver 2.0 (CE7.0, TEGRA) built 06 Feb 2017.

Is it a known issue? If not, how to diagnose and solve the problem?

Dear @protasovdg

We are about to release a new OS release V2.2 today.
Could you please try to flash this version onto your module and let me know whether it fixes the problem?

Regards, Andy

Hi, @andy.tx
We’re going to do this ASAP. I’ll inform you about the results.

Updating to V2.2 makes the things better. Before the updating a device can’t boot after update /rc executed approximately in 60% of cases. With the new image the same device can’t boot only at ~10% of cases (4 failures for 50 reboot calls).

BTW, our software does not work with I2C (no any initialization of I2C in the code) and doesn’t use it’s pins.

Dear @protasovdg

Apparently the reboot problem has not been completely resolved in Image V2.2. I see two possible reasons:

1. Voltage

If there is an error in the dynamic voltage handling, the system could try to start with a too low voltage. To exclude this, can you please try to disable DFS (dynamic frequency scaling)

[HKLM\Drivers\BuiltIn\nvrm]
Dfs=0

Don’t forget to save the registry.
This will significantly increase power consumption. It is not meant as a solution, but only as a temporary test setup.

eMMC not reset

We found that there are situations where the eMMC device does not get reset properly by the T30’s boot ROM, which prevents reading the bootloader from that device.

Instead of the soft reset there is an option to generate a real hardware reset by setting a bit in the on-module power management chip through i2c:

  • Internal i2c Port: “I2C9”
  • Slave Address (7bit): 0x2D
  • Register Address (8bit): 0x3F
    Register DEVCTRL_REG
  • Value to write (8bit): 0x1E
    This sets the bit DEV_OFF_RST

You can easily implement this using our Toradex CE libraries.
Or, for an initial test, using the I2c Tool.

Please note that using this method will generate a hardware reset immediately, while calling update /rc first unloaded all drivers. This could be a relevant difference if you did any flash write operations shortly before triggering the cold boot.

Regards, Andy

Recently I figured out the issue with “update /rc” is caused by CAN activity.
Colibri always fails to boot after a reset if “update /rc” is executing during the reading of SJA1000 chip’s registers.

Anyway, the “real hardware reset” works.
I wrote a small “reboot.exe” program for T30 and it fixed the problem.

The reason of unstable reboot (in my case) was the change of alternate functions of some pins. After reset of these pins into a default state update /rc works perfectly.