The Arduino Leonardo side (ATmega32U4) of the UDOO X86 can take care of the Braswell power management.
It can act as the Power Button(PWR) of the board connected directly to the Braswell processor. This means that an Arduino Leonardo sketch, that it's always running while the board is powered up, can for example turn on/off the Braswell main processor or wake the OS from the suspend state.

The Arduino Leonardo on board can wake up the Braswell processor depending on various triggers. For example, it can wake up the Braswell prcessor if the temperature, registered by a connected temperature sensor, increases over a certain threshold. By exploiting the Arduino capabilities, you can set up the trigger you want to get the behaviour you expect from the system.

The Arduino Leonardo (ATmega32U4) can trigger a power signal of the Braswell processor by producing a sequence of 5 low pulses in 100ms in the Arduino Pin 9 (IO9/PWM3 signal in the schematics). Technically speaking the pulses are catched by a SMT32 microcontroller onboard(STM32F100R4H6) and propagated to the Braswell to wake it up or shut it down.

You need to enable this feature of the UDOO X86 board in the UEFI Setup Utility(SCU).

Heads up! This feature works correctly starting from the UEFI BIOS v1.03 so check to have your UDOO X86 updated. Note that the description in the menu item Curie Power Management is incorrect and will be updated with the next UEFI BIOS release. The correct sequence to be used to power-on/power-off the Braswell processor is the one described in this page.

You can find the Curie Power Management option in the menu Power:

Power

...
Curie Power Management    <Enabled>
Power On Intel Curie      <Enabled>

The option you can choose for the Curie Power Management are:

<Disabled>    =   Intel Curie will never change the power status of the system

<Wake Only>   =   Intel Curie only be able to wake the system from S3/S4/S5

<Enabled>     =   Intel Curie will be able to put the system in a lower power
                  state(S3/S4/S5 depending on OS configuration) and wake it

Examples

Button example

Following an example of an Arduino sketch that could be used to trigger a power signal from the Arduino Leonardo (ATmega32U4) when a button is pressed:

Circuit design

Arduino sketch

int reset_pin = 9;    /* Triggers the power signal */
int input_pin = 2;    /* Input Button connected. Set in pull down with a resistor */

int pulse_time = 8;
volatile boolean power_pressed = false;

void power_interrupt() {
  /* When the button (connected to the Pin 2) is pressed, the attached interrupt runs this routine */
  power_pressed = true;
}

void setup() {
  pinMode(reset_pin, OUTPUT);
  digitalWrite(reset_pin, HIGH);

  pinMode(input_pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(input_pin), power_interrupt, RISING);
}

void loop() {
  if (power_pressed) {
    for(int i=0; i<5; i++) {
      digitalWrite(reset_pin, LOW);
      delay(pulse_time); /* Reset pin goes LOW for 8ms */
      digitalWrite(reset_pin, HIGH);
      delay(pulse_time); /* Reset pin goes HIGH for 8ms */
    }
    power_pressed = false;
  }

  /* Your main code goes in this loop, as before  */
  delay(10);
}
This page was last updated on Monday, March 21, 2022 at 5:22 AM.