Skip to content

Device OS 1.3.1 Default Release is out on the Web IDE for (Core/Photon/P1/Electron/Argon/Boron/Xenon/A SoM/B SoM/X SoM)

released on production servers September 6th, 2019

✏️ Please read all notes below :bowtie:

Note: This is a Release and may be used for production. Any known issues are likely slated for a future version, (check Github issues). It is available by default for all devices. To use, select the 1.3.1 version dropdown from the devices drawer.
Downgrading back to a previous release info is at the bottom of this post.

Note: If you have previously last used one of the prerelease versions of 1.3.x-rc.x on a device, please re-flash it with 1.3.1.

Note: OTA or YModem transfer on Electron (sequence required)

  1. First Update to 0.5.5 (if the current version is less than that)
  2. Then update to 0.6.4 (if the current version is less than that)
  3. Then update to 0.7.0 (if the current version is less than that)
  4. Then update to 1.2.1 (if the current version is less than that)
  5. Then update to 1.3.1

Note: DFU over USB on Electron/Photon/P1 (sequence not required)

  • You may update to 1.3.1 directly first, flash the system firmware (attached above) in order 1,2(,3) to the device using particle flash --usb <system-part.bin>. See the next note about the bootloader if you are offline!

Note: P1/Photon Bootloader
The Cloud will automatically update the bootloader on P1/Photon devices if your device is online. If your device does not connect to the cloud and it is offline, you should flash the bootloader to the device using particle flash --serial <bootloader.bin>. This should be done after upgrading system firmware. The Electron bootloader is applied automatically from it's own system parts.

Note: Argon/Boron/Xenon/Argon-SoM/Boron-SoM/Xenon-SoM Bootloader
If your device is offline, the bootloader must be manually updated using particle flash --serial <bootloader.bin>. This can be done before or after upgrading system firmware.

Note: Downgrading [Electron/Photon/P1] OTA or YModem transfer:
If you need to downgrade, you must downgrade to 1.2.1, then 0.7.0, then 0.6.3(Photon/P1), 0.6.4(Electron) to ensure that the bootloader downgrades automatically. When downgrading to older versions, downgrade to 1.2.1, then 0.7.0 first, then 0.6.3(Photon/P1), 0.6.4(Electron), then to an older version such as 0.5.5.


Note: If your Gen 2 Photon/P1 or Gen 3 device does not have a Cloud connection, it is recommended to update system firmware via CLI with particle update. Electron bootloaders are still contained in system firmware and will update automatically as needed.
This release contains v401 bootloaders.

SoftDevice update

Customers affected by #1855 may manually update the Nordic SoftDevice S140 to version 7.0.0 using the binaries provided in this release.

Starting with 1.4.0 (final) Device OS update will automatically trigger SoftDevice update.


particle-cli version 1.46.1.

Upgrading OTA

  1. Upgrade to 1.3.1
  2. Manually flash 1.3.1 bootloader: particle flash <deviceId> boron-bootloader@1.3.1.bin
  3. Flash SoftDevice: particle flash <deviceId> boron-softdevice@1.3.1.bin

Upgrading using YModem

  1. Upgrade to 1.3.1
  2. Put the device into listening mode (blinking blue) by holding MODE button
  3. Manually flash 1.3.1 bootloader: particle flash --serial boron-bootloader@1.3.1.bin
  4. Flash SoftDevice: particle flash --serial boron-softdevice@1.3.1.bin

Upgrading using DFU (--usb only works for SoftDevice, not bootloader yet)

  1. Upgrade Device OS to 1.3.1
  2. (optional, not required) Update the bootloader to 1.3.1 with the OTA or YModem process above
  3. Put the device into DFU mode (blinking yellow)
  4. Flash the SoftDevice: particle flash --usb boron-softdevice@1.3.1.bin


  • [gen 3] Nordic SoftDevice update support #1816
  • [gen 3] API for selecting BLE antenna for BLE radio #1847
  • [gen 3] API for setting/getting BLE device name #1847
  • [gen 3] API for setting BLE device address #1847
  • [gen 3] API for manually discovering peer device's BLE services and characteristics #1847
  • [gen 3] API for fetching discovered peer's services and characteristics #1847
  • [gen 3] API in BlePeerDevice for establishing BLE connection without scanning required #1847
  • [gen 3] API for manually subscribing/unsubscribing peer characteristic's notification #1847
  • [gen 3] API for disconnecting all on-going BLE connections #1847
  • [gen 3] BLE support #1740
  • [gen 3] NFC support #1606


  • [Boron/BSoM] power: Increases charging current to 900mA when powered through VIN (VUSB) pin #1846
  • Cancel network connection when processing a USB request that resets the device #1830
  • Particle.connected() should return true only after handshake messages are acknowledged #1825
  • [gen 3] USB state tracking enhancements #1871
  • [gen 3] Adds timeouts to I2C HAL operations #1875
  • [gen 3] Refactors BLE event dispatching #1847
  • [gen 3] Decreases BLE runtime RAM consumption #1847
  • [gen 3] Supports up to 23 local characteristics, 20 of them are available for user application #1847
  • [gen 3] Supports up to 3 central links #1847
  • [gen 3] More convenient methods provided in BleUuid class #1847
  • ensures AT interface is responsive #1886
  • [enhancement] Cache cellular diagnostics #1810
  • [enhancement] allow the bootloader to be flashed over DFU #1788


  • [Gen 3] Fixes heap and application static RAM overlap introduced in 1.3.0-rc.1 #1898
  • Fixes tinker build errors when building with LOG_SERIAL=y #1898
  • Fixes dynalib alignment issue when compiling relatively large applications potentially due to an unconfirmed bug in GCC by moving the dynalib into a separate section (.dynalib) #1894
  • [Gen 3] Fixes incorrect handling of MODULE_INFO_FLAG_DROP_MODULE_INFO in the bootloader #1897
  • [Gen 3] Adds a dummy suffix to the NCP and SoftDevice modules' module info with unique SHA to cause the communication layer to detect the change in SYSTEM DESCRIBE after NCP or SoftDevice update #1897
  • Fixes a regression introduced in 1.1.0 where the system layer was always sending its handshake messages even if the session was resumed causing increased data usage #1905
  • Properly seeds rand() in multiple threads including system thread. Fixes ephemeral port allocation in LwIP on Gen 3 platforms #1905
  • Control requests that reset the device (e.g. particle usb dfu) no longer cause unnecessary reconnection to the cloud #1905
  • Initialize user module in monolithic builds #1905
  • fixes RSSI regression on G350 (2G) devices #1841
  • [electron, gen3] Temporarily increase IDLE task priority whenever a thread exits (calls vTaskDelete) to resolve a memory leak that resulted in device being stuck "blinking green" until reset in some cases. #1862
  • [gen 3] Fixes mesh pub/sub socket consuming all packet buffers #1839
  • [Photon/P1] Bootloader correctly re-imports the DCT functions from system firmware after its modification through DFU #1868
  • [gen 3] disconnects the cloud. Resolves an issue with loop() not being executed in SEMI_AUTOMATIC mode after #1857
  • [Argon] Fixes the issue being unable to reset the device through RST pin by changing the ESPEN mode to OUTPUT_OPEN_DRAIN #1870
  • [Electron/LTE] devices drop Cloud connection every time user firmware opens and closes a TCP socket ch34976 #1854
  • [gen 2] Fixes an issue with clock stretching in I2C slave mode with underrun reads with certain I2C masters (e.g. Gen 3 devices) #1829
  • Fix to ensure device resets after bootloader update #1873
  • Fixes boot issue for Core introduced in 1.2.1-rc.3 #1873
  • [gen 3] Resolved a HardFault after USB cable is unplugged under certain conditions #1871
  • [gen 3] BLE advertising parameters didn't apply, issue #1874 #1847
  • [gen 3] BLE scanning parameters didn't apply, issue #1859 and #1855 #1847
  • [gen 3] Local characteristic notification causes SOS: #1847
  • [gen 3] BLE address order reversed #1847
  • [gcc] fixes virtual platform exception on startup #1878
  • Add two-digit mnc diagnostic flag #1804
  • BLE fixes from 1.3.0-alpha.1 #1817
  • NFC Context parameter is missing and NFC.update() will remove callback, fixes from 1.3.0-alpha.1 #1818
  • [lte] cellular fixes #1824
  • fixes #1811 - increases the number of event handlers to 6 #1822
  • [gen 3] fixes memory usage diagnostics (reported negative values in safe mode) #1819
  • System.disableUpdates() operates asynchronously #1801
  • [gen 3] [bsom] Building platform BSOM results flash overflow. #1802
  • [gen 3] [hal] fixes early wakeup by RTC from STOP sleep mode #1803


  • Adjusts on-device tests #1898
  • Add coverage to CMake unit-tests #1860
  • Pull test implementation out of source file #1867
  • [gen 3] Changes WKP pin to A7 for SoM platforms to avoid an overlap with Ethernet chip on EVB ESPEN mode to OUTPUT_OPEN_DRAIN #1837
  • [hal] Fixes WIFIEN pin mode for ASoM #1889
  • Refactor/move catch test #1869
  • fixes to communications public interface #1863
  • Refactors platform pinmap to be in platform-specific headers #1838
  • Improve compatibility with recent versions of GCC #1806
  • Set path to Boost libraries #1872
  • [docs] Updates spark_publish_vitals and build scripts documentation. #1800
  • [docs] update the test documentation #1683

System Binaries (all devices)

Programming and Debugging

You can view specific programming and debugging notes for this version of firmware here.

QA Report Summary for Particle Device OS

You can view results of tests run this release here.

Assets 62
You can’t perform that action at this time.