What does the 'boot' button do on the beagleconnect freedom

What does the ‘boot’ button do when the BCF is being used with Zephyr?

It’s available in the dts as button0/sw0, so can be used as a user button, and it’s used by the bootloader code to trigger a firmware update on boot, however it’s also doing something else …
When the bcf is running, pressing the button toggles the ‘MB2’ and ‘MB1’ LEDs ('though just what these LEDs mean is a complete mystery). The device also appears to freeze when the button is held down. But more importantly, USB communication via the zephyr console (uart0) is blocked on power up until the boot button is pressed.
This is a real problem in my application - these devices communicate with another piece of equipment over USB and as they are out the field and inaccessible, going round pressing the boot button after a power outage is just not possible. Interestingly, this only happens after power up - resetting the BCF does not cause a problem.

The boot button is connected to the CC1352P7 and the MSP430F5503. I’m guessing the mode change that allows the uart to work probably happens in the MSP430F5503 microcode. I’m wondering about reconfiguring the CC1352P7 pin in my setup code to be an output, pulling the line low to effect this mode switch, then reconfiguring the pin back to being an input (a more blunt approach would be to just wire a fet connected to a spare gpio across the switch).

Can anybody shed any light on just what this button is doing? (and what the ‘MB1’ ‘MB2’ and ‘USB’ LEDs indicate), and whether my idea would work? or perhaps there’s a better way.


on power-up, it can put the MSP430 into programming mode.

after boot, it is up to the application code how it is used.

i will revisit the documentation to make sure it’s function is clear.

But its doing more than this. It seems to trigger some kind of mode switch in the MSP430.

On powerup, the uart function is blocked until the button is pressed. This can be tested with the echo_bot sample project (zephyr-beagle-cc1352-sdk/zephyr/samples/drivers/uart/echo_bot):

  1. flash the project
  2. works as expected
  3. remove usb power then restore
  4. uart communication is blocked. MB2 led is on.
  5. press boot button. MB2 led goes off, MB1 goes on
  6. uart now works as it should.

I can file this as a bug report.


I tried a quick and dirty test - configuring the boot button gpio as an output then getting the bcf to effectively press it’s own button, and it does seem to have worked around the problem. It does appear to switch the MPS430 into the ‘works as expected’ mode, for now anyway.