I can’t get my Electron dev kit to go into manual mode. The device just sits with the green LED blinking. No communication to the Serial port.
From the docs, I tried both SYSTEM_MODE(MANUAL) and Cellular.off() though it seems like the second is deprecated. I’m working with VS Code on OSX. Flashing via USB with the Particle CLI.
Dev kit does NOT have the battery or antenna connected.
Code below…
SYSTEM_MODE(MANUAL); // setting this so that the device can run without the cell network
/*
SS => A2 (default)
SCK => A3
MISO => A4
MOSI => A5
*/
volatile uint8_t tx_buffer[8];
volatile uint8_t rx_buffer[8];
volatile uint8_t slave_selected = false;
volatile uint8_t transfer_complete = false;
static byte data_to_master = 0xFF;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Initialzed");
SPI.begin(SPI_MODE_SLAVE, A2);
}
void loop() {
// if the slave is selected and SPI is available
int32_t num_incoming = SPI.available();
Serial.println(num_incoming);
while (num_incoming > 0) {
num_incoming--;
Serial.print("Received ");
byte data_in = SPI.transfer(data_to_master);
Serial.println(data_in);
}
Serial.println("Looping..");
}
What device OS version are you running?
You shouldn’t really check SPI.available() unwarranted.
I’m not convinced it’s an issue with SYSTEM_MODE(MANUAL) but suspect your SPI code to interfere.
Why shouldn’t I be checking SPI.available()? According to the docs, if the receive buffer is empty, it returns 0, so I don’t see a problem with this. Shouldn’t need to run a handler method, and the docs indicate that you should be able to run in the fashion above through the DMA, without halting the entire program.
To clarify, this is not a problem with SPI, as this code yields the same result;
SYSTEM_MODE(MANUAL); // setting this so that the device can run without the cell network
/*
SS => A2 (default)
SCK => A3
MISO => A4
MOSI => A5
*/
volatile uint8_t tx_buffer[8];
volatile uint8_t rx_buffer[8];
volatile uint8_t slave_selected = false;
volatile uint8_t transfer_complete = false;
static byte data_to_master = 0xFF;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Initialzed");
// SPI.begin(SPI_MODE_SLAVE, A2);
}
void loop() {
// if the slave is selected and SPI is available
/*
int32_t num_incoming = SPI.available();
Serial.println(num_incoming);
while (num_incoming > 0) {
num_incoming--;
Serial.print("Received ");
byte data_in = SPI.transfer(data_to_master);
Serial.println(data_in);
}
*/
delay(100);
Serial.println("Looping..");
}
My hunch is that there is a startup process that can’t be subverted that checks in with the ublox module and isn’t happy because I’m missing the antenna.
@ScruffR I flashed it using the CLI via USB, which is also powering it.
Sounds like you’re using the web IDE, flashing via LTE and then disconnecting the antenna and battery?
Either way, the behavior shouldn’t be different, unless of course your configuration is letting the ublox module boot and report status to the STM32 before disconnecting the antenna and battery.
If it is in fact the case that there is a boot dependency between the STM32 and the ublox LTE module, then the documentation about manual mode is somewhat incorrect/misleading as the wording makes it seem as though this would let someone use the device without any network dependencies. Trying to verify this is the case, as it would render the device far less usable for my application (which can’t have a Lipo or guaranteed cell/antenna connection)
I just put your code on my Electron without an antenna or battery. It stays blinking white and spams the usb serial port with the following.
0
Looping..
If you are flashing locally, you may have loaded an app firmware that depends on a newer version of Device-OS and inadvertently put your device into safe-mode. This will bypass your user application and try and connect to the cloud.
If using Workbench, select Particle: Flash Application and Device OS (local) to make sure you are flashing the Device-OS dependency as well.
With the device in dfu mode, which worked fine when the device was networked, doesn’t seem to be working since removing the antenna.
Per your sugguestion, I first ran Particle: Compile Application & DeviceOS (local) which yields
> Executing task in folder Particle_SPI_test: make -f '/Users/**********/.particle/toolchains/buildscripts/1.5.1/Makefile' compile-all -s <
/Users/**********/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part1/makefile /Users/**********/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part2/makefile /Users/**********/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part3/makefile /Users/**********/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/user-part/makefile
text data bss dec hex filename
75748 556 2624 78928 13450 ../../../build/target/system-part1/platform-10-m/system-part1.elf
text data bss dec hex filename
125080 212 564 125856 1eba0 ../../../build/target/system-part2/platform-10-m/system-part2.elf
text data bss dec hex filename
120668 2692 4424 127784 1f328 ../../../build/target/system-part3/platform-10-m/system-part3.elf
text data bss dec hex filename
4604 108 452 5164 142c /Users/**********/Documents/modules/Particle_SPI_test/target/Particle_SPI_test.elf
*** COMPILED SUCCESSFULLY ***
Press any key to close the terminal.
After which I ran Particle: Flash Application & DeviceOS (local) which produced
> Executing task in folder Particle_SPI_test: make -f '/Users/*******/.particle/toolchains/buildscripts/1.5.1/Makefile' flash-all -s <
/Users/*******/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part1/makefile /Users/*******/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part2/makefile /Users/*******/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/system-part3/makefile /Users/*******/.particle/toolchains/deviceOS/1.3.0-rc.1/firmware-1.3.0-rc.1/modules/electron/user-part/makefile
text data bss dec hex filename
75748 556 2624 78928 13450 ../../../build/target/system-part1/platform-10-m/system-part1.elf
Serial device PARTICLE_SERIAL_DEV : not available
Flashing using dfu:
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 2b04:d00a
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 4096
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08060000, size = 76304
Download [=========================] 100% 76304 bytes
Download done.
File downloaded successfully
text data bss dec hex filename
125080 212 564 125856 1eba0 ../../../build/target/system-part2/platform-10-m/system-part2.elf
Serial device PARTICLE_SERIAL_DEV : not available
Flashing using dfu:
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 2b04:d00a
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 4096
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08020000, size = 125296
Download [=========================] 100% 125296 bytes
Download done.
File downloaded successfully
text data bss dec hex filename
120668 2692 4424 127784 1f328 ../../../build/target/system-part3/platform-10-m/system-part3.elf
Serial device PARTICLE_SERIAL_DEV : not available
Flashing using dfu:
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 2b04:d00a
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 4096
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08040000, size = 123360
Download [=========================] 100% 123360 bytes
Download done.
File downloaded successfully
text data bss dec hex filename
4604 108 452 5164 142c /Users/*******/Documents/modules/Particle_SPI_test/target/Particle_SPI_test.elf
Serial device PARTICLE_SERIAL_DEV : not available
Flashing using dfu:
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 2b04:d00a
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 4096
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08080000, size = 4712
Download [=========================] 100% 4712 bytes
Download done.
File downloaded successfully
*** FLASHED SUCCESSFULLY ***
Press any key to close the terminal.
Producing the same result, a blinking green LED, with no connectivity. At a loss for what I’m doing wrong.
For anyone facing the same issue, Joel’s solution seemed to do it. Once I re-connected to the network, I was able to fix the Device OS version and now we’re up and running with the command line!