Xenon not entering DFU mode when baud rate set to 14400

Hello.

I finally received my Particle mesh preorder and I have begun trying it out. The setup process for Xenon on an Ethernet FeatherWing was flawless.

However, I have encountered an issue. I am trying to put my Xenon into DFU mode via CLI by setting the baud rate to 14400, which works for all previous Particle hardware, but for some reason, my Xenon is ignoring my DFU request entirely. Setting the baud rate to 28800 to induce listening mode fails as well.

Has this valuable feature been dropped on the mesh hardware? I would love to be able to put mesh devices into DFU mode or listening mode in an automated fashion.

I am aware that Particle has been intending to ditch the baud rate method for a while, but has Particle implemented the new method yet?

All I’ve seen is this repository: https://github.com/particle-iot/particle-usb

I don’t know if it is implemented into particle-cli yet.

PS:

I can only see the Xenon on serial if I call Serial.begin in the firmware.

1 Like

ping @rickkas7 @jvanier

As long as you’ve called Serial.begin(), 14400 baud to enter DFU does work. I tested it on a Argon but I would expect it to work on a Xenon.

If you don’t call Serial.begin(), then the USB serial port is not initialized, so you won’t be able to connect to it at a specific baud rate. That’s an intentional change.

The future, however, is with USB control requests. The mesh devices haven’t been updated to support it yet, nor has the library been updated with mesh features, but that will be the preferred method in the future. That will work regardless of whether you call Serial.begin.

1 Like

It straight up does not work on my Xenon.

Taking the Xenon out of the Ethernet FeatherWing makes no difference.

Here is the code I'm using:

#include "Particle.h"

SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);

STARTUP(Serial.begin(115200));

void setup() // Put setup code here to run once
{
        pinMode(D7, OUTPUT);
        Particle.connect();
}

void loop() // Put code here to loop forever
{
        digitalWrite(D7, !digitalRead(D7));
        Serial.println(millis());
        delay(500);
}

I'll setup an argon and see if it works.

1 Like

That’s weird. I flashed that code to a Xenon and as soon as I do:

stty -f /dev/tty.usbmodemFA21741 14400

on the Mac it drops into DFU. The device is running system firmware 0.8.0-rc.25.

It’s working now.

I’ve been using this snippet on linux for older Particle hardware since Linux stty can’t do 14400.

For some reason, and just for mesh boards, after using the snippet I need to run the following to get DFU / Listening mode to kick in:

stty -F /dev/ttyACM0 9600

Sorry for any confusion I may have created. I was expecting the Mesh boards to behave exactly like Photons and Electrons serial-wise but I guess that is not the case. I guess I’ll have to use my mesh boards some more to find the other differences they have from Photons and Electrons. :wink:

3 Likes

the following now appears to work:

particle usb dfu