Releases: particle-iot/device-os
v0.0.2-rc.2 Firmware Release for Electron
Download the attached system and tinker firmware that you'll flash to your Electron. Navigate to the folder where you downloaded the firmware files, put your Electron in DFU mode, and type (or copy/paste) the following dfu-util
commands to flash them each to your Electron:
dfu-util -d 2b04:d00a -a 0 -s 0x8020000 -D system-part1-v0.0.2-rc.2.bin
dfu-util -d 2b04:d00a -a 0 -s 0x8040000 -D system-part2-v0.0.2-rc.2.bin
dfu-util -d 2b04:d00a -a 0 -s 0x8080000:leave -D tinker-electron-v0.0.2-rc.2.bin
The electron should automatically reboot after the last command, start the process of connecting to a cellular network (make sure your SIM and battery are inserted!), and begin breathing cyan.
0.4.6 Firmware Release for Core, Photon and P1
Updating System Firmware
To update the core, please compile and flash your application in the Web IDE, selecting version 0.4.6 in the devices drawer. Update instructions for Photon and P1 below.
For devices already online and connected to the cloud, the system firmware can be updated OTA using these commands:
The OTA method
If your device is online, you can attempt to OTA (Over The Air) update these system parts as well with the particle-cli:
Note: You must download system binaries to a local directory on your machine for this to work.
Photon:
particle flash YOUR_DEVICE_NAME system-part1-0.4.6-photon.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.6-photon.bin
P1:
particle flash YOUR_DEVICE_NAME system-part1-0.4.6-p1.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.6-p1.bin
The local EASY method using Particle CLI
If you have the Particle CLI installed already, you can update it and then update your device with the following combined command. Make sure the device is in DFU mode and run:
sudo npm update -g particle-cli && particle update
(note: you can try without sudo first if you wish)
The local DFU-UTIL method
can be applied to offline devices locally over USB using dfu-util
- Put the device in DFU mode (flashing yellow LED)
- open a terminal window, change to the directory where you downloaded the files above, and run these commands:
Photon:
dfu-util -d 2b04:d006 -a 0 -s 0x8020000 -D system-part1-0.4.6-photon.bin
dfu-util -d 2b04:d006 -a 0 -s 0x8060000:leave -D system-part2-0.4.6-photon.bin
P1:
dfu-util -d 2b04:d008 -a 0 -s 0x8020000 -D system-part1-0.4.6-p1.bin
dfu-util -d 2b04:d008 -a 0 -s 0x8060000:leave -D system-part2-0.4.6-p1.bin
Changes since 0.4.5
FEATURES
- [photon] separate System Thread
- [core] Hooks to support FreeRTOS (optional library)
- Variables stored in Backup RAM
- printf/printlnf on
Print
classes -Serial
,Serial1
,TCP
,UDP
String.format
forprintf
-style formatting to aString
.- Wire.end() to release the I2C pins. #597
- Wire.reset() to reset the I2C bus. Thanks @pomplesiegel #598
- System.ticks() to retrieve the current MCU cycle counter for precise timing.
- System.enterSafeMode() to restart the device in safe mode.
ENHANCEMENTS
- [photon]
WiFi.selectAntenna()
setting is persistent, so the last selected antenna is used when the
device is in safe mode. [#618] - Detect when the cloud hasn't been serviced for 15s and disconnect, so device LED state accurately
reflects the connection state when the application loop has stalled. #626 - Compile-time checks for
Particle.variable()
#619 - [photon] Increased retry count when connecting to WiFi. #620
- Setup button events #611
BUGFIXES
UDP.receivePacket()
would fail ifUDP.setBuffer()
hadn't been called first. Thanks @r2jitu.- [photon] Default SS pin for SPI1 now set to D5. #623
- [photon] Long delay entering listening mode. #566
- [photon] Solid green LED when WiFi network cannot be connected to due to invalid key. (The LED now blinks.)
- [photon] Storing more than 2 Wi-Fi credentials would sometimes give unpredictable results.
- [photon] TX/RX pins did not work after entering listening mode. #632
- [photon] Improvements to I2C for MCP23017 / Adafruit RGBLCDShield. #626
- [photon] Incorrect wakeup time set for sleep. #653
Bootloader update for P1
This bootloader update addresses a problem where P1 devices do not remain in DFU mode and or disconnect from the host computer.
To apply the update, connect your device to the Cloud and use Particle CLI to flash the bootloader Over-the-Air:
particle flash <device-name> bootloader-v0.4.6-rc.1-p1.bin
0.4.5 Release for Photon and P1
Updating System Firmware
For devices already online and connected to the cloud, the system firmware can be updated OTA using these commands:
The OTA method
If your device is online, you can attempt to OTA (Over The Air) update these system parts as well with the particle-cli:
Note: You must download system binaries to a local directory on your machine for this to work.
Photon:
particle flash YOUR_DEVICE_NAME system-part1-0.4.5-photon.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.5-photon.bin
P1:
particle flash YOUR_DEVICE_NAME system-part1-0.4.5-p1.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.5-p1.bin
The local EASY method using Particle CLI
If you have the Particle CLI installed already, you can update it and then update your device with the following combined command. Make sure the device is in DFU mode and run:
sudo npm update -g particle-cli && particle update
(note: you can try without sudo first if you wish)
The local DFU-UTIL method
can be applied to offline devices locally over USB using dfu-util
- Put the device in DFU mode (flashing yellow LED)
- open a terminal window, change to the directory where you downloaded the files above, and run these commands:
Photon:
dfu-util -d 2b04:d006 -a 0 -s 0x8020000 -D system-part1-0.4.5-photon.bin
dfu-util -d 2b04:d006 -a 0 -s 0x8060000:leave -D system-part2-0.4.5-photon.bin
P1:
dfu-util -d 2b04:d008 -a 0 -s 0x8020000 -D system-part1-0.4.5-p1.bin
dfu-util -d 2b04:d008 -a 0 -s 0x8060000:leave -D system-part2-0.4.5-p1.bin
Changes since 0.4.4
FEATURES
SPI.setClockDividerReference
,SPI.setClockSpeed
to set clock speed in a more portable manner. #454WiFi.scan
function to retrieve details of local access points. #567UDP.sendPacket
/UDP.receivePacket
to send/receive a packet directly to an application-supplied buffer. #452- Static IP Support [photon] - #451
- [photon] UDP multicast support via
UDP.joinMulticast
/UDP.leaveMulticast
. Many thanks @stevie67! waitFor(WiFi.ready)
syntax to make it easier to wait for system events. #415- Flexible time output with
Time.format()
#572
ENHANCEMENTS
- Recipes and Tips section in the build documentation.
Particle.function
,Particle.subscribe
andattachInterrupt
can take a C++ method and instance pointer. #534 Thanks to @monkbroc!UDP.setBuffer
to set the buffer a UDP instance uses forread
/write
. #224 and #452WiFi.setCredentials()
can take a Cipher type to allow full specification of an AP's credentials. #574- TCPClient (from TCPServer) reports remote IP address. #551
- Configurable format in
Time.timeStr()
, including ISO 8601. #455 Servo.trim(adjust)
to allow small adjustments to the stationary point. #120- Time set from the cloud accounts for network latency. #581
String(Printable)
constructor so anyPrintable
can be converted to a string. example- Fluent API on
String
- many methods return*this
so method calls can be chained. - Small values passed to
delay(1)
result in more accurate delays. #260 - Bootloader does not show factory reset modes if a factory reset image is not available. #557
BUGFIXES
- Listening mode re-enters listening mode after credentials are given. #558
- String function dtoa() has problems with larger numbers. #563
- System doesn't set color of RGB LED when
RGB.control(true)
is called. #362, #472 and #544 - WiFi.SSID() may not return previous network when switching. #560
- [photon] System.sleep(5) not turning Wi-Fi back on after 5 seconds. #480
- regression: floating point support in sprintf not compiled in. #576
- [photon] SPI1 default clock speed was 7.5MHz, changed to 15MHz, same as for
SPI
. - TCPClient::connected() doesn't detect when the socket is closed #542
- dfu-util: error during downlod get_status msg removed when using :leave option #599
- [Core] A0 could not be used as an output #595
- Reinstate CFOD handling on the Photon.
Electron 0.0.1-rc.3
Initial release for Electron beta backers
0.4.4 Release for Photon and P1
This is the same release that is deployed when building an app in the cloud.
External Antenna Users!
Please note that the default is now the ANT_INTERNAL antenna and the device will require specifically selecting the ANT_EXTERNAL antenna in firmware. This could result in devices becoming inaccessible after flashing this system firmware when they cannot use the internal antenna. To ensure a full update, flash your system binaries locally over USB with DFU-UTIL (see below) or for the EASY method using Particle CLI (see below)
Also add the following line to your application and flash it locally over USB to ensure the external antenna is used at boot time:
STARTUP(WiFi.selectAntenna(ANT_EXTERNAL));
Updating System Firmware
For devices already online and connected to the cloud, the system firmware can be updated OTA using these commands:
The OTA method
If your device is online, you can attempt to OTA (Over The Air) update these system parts as well with the particle-cli:
Note: You must download system binaries to a local directory on your machine for this to work.
Photon:
particle flash YOUR_DEVICE_NAME system-part1-0.4.4-photon.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.4-photon.bin
P1:
particle flash YOUR_DEVICE_NAME system-part1-0.4.4-p1.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.4-p1.bin
The local DFU-UTIL method
can be applied to offline devices locally over USB using dfu-util
- Put the device in DFU mode (flashing yellow LED)
- open a terminal window, change to the directory where you downloaded the files above, and run these commands:
Photon:
dfu-util -d 2b04:d006 -a 0 -s 0x8020000 -D system-part1-0.4.4-photon.bin
dfu-util -d 2b04:d006 -a 0 -s 0x8060000:leave -D system-part2-0.4.4-photon.bin
P1:
dfu-util -d 2b04:d008 -a 0 -s 0x8020000 -D system-part1-0.4.4-p1.bin
dfu-util -d 2b04:d008 -a 0 -s 0x8060000:leave -D system-part2-0.4.4-p1.bin
The local EASY method using Particle CLI
If you have the Particle CLI installed already, you can update it and then update your device with the following combined command. Make sure the device is in DFU mode and run:
sudo npm update -g particle-cli && particle update
(note: you can try without sudo first if you wish)
Changes since 0.4.3
FEATURES
- logging output documentation
- pressing 'v' in SoftAP mode displays the system version. FIRM-128
- P1: API (compatible with Core) to access the 1MByte external flash. #498
- Arduino compatibility macros for PROGMEM and more.
RGB.onChange
handler receives notification of the current LED color when it changes. Can be used to match an external LED to the onboard led. #518 Thanks to @monkbroc!- Serial2 available on P1 and Photon (note: this also requires above RGB.onChange handler and two resistors would need to be removed on the Photon)
Spark.connected()
et al. is nowParticle.connected()
. The formerSpark
library is still available but is deprecated.System.freeMemory()
API to determine the amount of available RAM.STARTUP()
macro to define blocks of code that execute at startup.
ENHANCEMENTS
- Retrieve the LED brightness via
RGB.brightness()
- More prominent color change on the RGB LED when there is a cloud connection error.
- System.sleep() - 2nd parameter changed to
InterruptMode
from uint16_t to
ensure the correct types are used. #499 - Less aggressive exponential backoff when the re-establishing the cloud connection. [FIRM-177]
- I2C Wire.endTransmission() returns unique values and I2C docs updated
- Generate I2C STOP after slave addr NACK, I2C software reset all timeouts - commit
- Improved I2C Master receive method and implemented error handler - commit - commit
WiFi.selectAntenna()
default antenna is now INTERNAL. Can be called at startup (before WiFi is initialized to select the desired antenna.
BUGFIXES
- [Regression] System connects WiFi when Spark.connect() is called after WiFi.on() #484
- Debug build now working.
- PWM issue fixed - 500Hz output on all channels #492
- Tone issue fixed on D2,D3,RX,TX #483
- SOS when registering more than 2 subscription handlers, and allow 4 subscription handlers to be successfully registered. #531
- SOS on TCPClient.connect() when DNS resolution failed or when connection fails #490
TCPClient::stop()
does not work on first connection #536TCPClient::connect()
does not close an existing socket. #538- TX/RX PWM randomly inverted #545
- UDP.begin/write return values #552
0.4.3 release for Photon/P1
Updating System Firmware
For devices already online and connected to the cloud, the system firmware can be updated OTA using these commands:
If your device is online, you can attempt to OTA update these system parts as well with the particle-cli:
photon:
particle flash YOUR_DEVICE_NAME system-part1-0.4.3-photon.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.3-photon.bin
P1:
photon:
particle flash YOUR_DEVICE_NAME system-part1-0.4.3-p1.bin
particle flash YOUR_DEVICE_NAME system-part2-0.4.3-p1.bin
The updates can also be applied to offline devices using dfu-util
.
- Put the device in DFU mode (flashing yellow LED)
- open a terminal window, change to the directory where you downloaded the files above, and run these commands:
Photon:
dfu-util -d 2b04:d006 -a 0 -s 0x8020000 -D system-part1-0.4.3-photon.bin
dfu-util -d 2b04:d006 -a 0 -s 0x8060000:leave -D system-part2-0.4.3-photon.bin
P1:
dfu-util -d 2b04:d008 -a 0 -s 0x8020000 -D system-part1-0.4.3-p1.bin
dfu-util -d 2b04:d008 -a 0 -s 0x8060000:leave -D system-part2-0.4.3-p1.bin
Changes
FEATURES
- Half-duplex mode on Serial1 via
Serial1.halfdupliex()
. Thanks to @prices. WiFi.connect(WIFI_CONNECT_SKIP_LISTEN)
allows application firmware to skip listen mode when there is no credentials.- System events
ENHANCEMENTS
- I2C methods now use
micros()
for timeouts rather thanmillis()
, so I2C functions can be used in an interrupt handler. #460 WiFi.listen(false)
to programmatically exit WiFi listening mode.- make is verbose by default. To silence, add
-s
to the command line. WiFi.connect(WIFI_CONNECT_SKIP_LISTEN)
starts connection but does not enter listening mode if no credentials are found.- Setup/Mode button now starts listening mode when WiFi is off.
WiFi.listen(false)
can be used to exit listening mode (from an interrupt.)- LED flashes high-speed green when requesting an IP address via DHCP.
BUGFIXES
- [Photon/TCPServer] -
TCPClient.connected()
was not returningfalse
when the socket was asynchronously disconnected. - Fix time being reset on wakeup. (removed WICED RTC init code that resets to default preset time in platform_mcu_powersave_init() within photon-wiced repo.) #440
TCPClient.connected()
was not returningfalse
when the socket was disconnected from the other end.strdup()
was returning garbage #457attachInterrupt()
should work on all interrupt pins now except D0 & A5. Please note there are shared lines as per the following issue comment : #443- I2C bus lockup when no slave devices are present by issuing a STOP condition after sLave send address fails.
spark/
events not propagated to application handlers. #481sprintf
calls not linking correctly. #471- Photon/P1 sometimes did not start without hitting reset after a cold boot.
- Disable LTO compile for user firmware since it causes linking problems (see
sprintf
above.)
Unlocker (P1)
- unlocker-p1.bin - For the P1 PLATFORM ONLY! (For photon, see the 0.4.1 release.) This is used to remove write protect bits on flash pages so devices can be returned to factory condition and updated using JTAG. This is not necessary when using DFU to update system firmware. To apply, download the file then run
dfu-util -d 2b04:d008 -a 0 -s 0x8020000:leave -D unlocker-p1.bin
. The unlocking happens automatically - the LED will be yellow during unlocking, then green when unlocking is complete.
0.4.2 Release for Photon
This release contains a fix for device configuration becoming unwritable, causing new Wi-FI settings to not be remembered.
Steps to Apply this release
- download
system-part1-0.4.2-photon.bin
andsystem-part2-0.4.2-photon.bin
- First put the device in DFU mode
- open a terminal window, change to the directory where you downloaded the files above, and run these commands:
dfu-util -d 2b04:d006 -a 0 -s 0x8020000 -D system-part1-0.4.2-photon.bin
dfu-util -d 2b04:d006 -a 0 -s 0x8060000:leave -D system-part2-0.4.2-photon.bin
Changes
FEATURES
- EEPROM storage of custom data types via
EEPROM.put()
and `EEPROM.get()' - When the device is in safe mode, the LED breathes magenta
attachSystemInterrupt()
allows hooking key system interrupts in user code.- DMA-driven SPI master
UDP.sendPacket()
method avoids buffering data when the user can supply the entire buffer at once.- [Photon] SoftAP setup can be done over HTTP
- platform-neutral fast pin access 449
- [P1] Serial2 support
ENHANCEMENTS
- [Photon] The system firmware updates the bootloader to latest version
- [Photon] The system write protects the bootloader region.
- UDP uses dynamically allocated buffers
PRODUCT_ID
andPRODUCT_VERSION
place these details at a known place in the firmware image- DFU mode and serial firmware update can be triggered by setting the line rate.
BUGFIXES
Serial1.end()
hangs the system- Malformed CoAP acknowledgement message in cloud protocol.
SPARK_WLAN_Loop()
was not linked. (Workaround was to useSpark.process()
)- UDP doesn't send anything to the device until
UDP.write()
#407 - Divide by zero now caught and causes a SOS.
- Floating-point support for
sprintf()
reinstated - Fixed WICED DCT becoming unmodifiable
- Fix UDP.parsePacket() not receiving any data on the Photon #468
modular photon firmware - 0.4.1
This is the released v1 modular firmware that you can flash to devices to reset to factory default.
The firmware update can be applied OTA or via DFU.
OTA with the particle-cli
Here's the steps to flash using particle-cli
- download
system-part1.bin
andsystem-part2.bin
- put the device (the photon) in safe mode: hold setup, then tap reset, and release setup when the LED blinks magenta
- the device will connect to the cloud, and flash cyan
- run
particle flash <photonid> system-part1.bin
- when the device reboots, put the device again in safe mode
- run
particle flash <photonid> system-part2.bin
Flashing locally with DFU
It's also possible to flash the firmware update using DFU:
- download
system_pad_BM-09.bin
- put your photon in DFU mode - hold setup, tap reset, and release setup when the LED blinks yellow.
- run
dfu-util -d 2b04:d006 -a 0 -s 0x8020000:leave -D system_pad_BM-09.bin
- An additional optional step is resetting the current firmware and factory backup to tinker. This is done by flashing
- tinker.bin to the user firmware location:
dfu-util -d 2b04:d006 -a 0 -s 0x80A0000 -D tinker.bin
- tinker.bin to the factory reset location:
dfu-util -d 2b04:d006 -a 0 -s 0x80E0000 -D tinker.bin
- tinker.bin to the user firmware location:
Spark firmware v0.3.4
v0.3.4
FEATURES
- Local Build: Specify custom toolchain with
GCC_PREFIX
environment variable (firmware, core-common-lib, core-communication-lib)
ENHANCEMENTS
- Wiring: More efficient and reliable
print(String)
(fix issue #281) #305 - DFU: Add DFU suffix to .bin file #323