Particle Device OS Updates Thread

Device OS 2.0.0-rc.1 Release Candidate is out on the Web IDE for (Photon/P1/Electron/Argon/Boron/B SoM/B5 SoM)

released on July 30th, 2020


:white_check_mark: This 2.0.0-rc.1 Release Candidate will be defaulted to 2.0.0 on August 15th, 2020 unless there are regressions found that require further patches. :pencil2: Testing on your applications is encouraged and appreciated, thank you! :bowing_man:

Note: This is a Release Candidate (RC) and is not intended for production yet. We've tested this RC to the best of our ability and we want to know what you think now! Please understand that some care and attention is necessary when testing this RC, and be sure to upgrade to the final release when it's available. This RC will not be available by default. To use you must select the version dropdown from the devices drawer. Downgrading back to the current release info is at the bottom of this post.

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 2.0.0-rc.1

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

  • You may update to 2.0.0-rc.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/B SoM/B5 SoM
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: Argon/Boron/B SoM/B5 SoM SoftDevice
If your device is offline, the SoftDevice must be manually updated using the CLI. See the instructions below.

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.


2.0.0-rc.1

BREAKING CHANGES

  • Mesh support removed. 2.x+ DeviceOS releases no longer have Mesh capabilities #2068
  • Xenon platform support removed. 2.x+ DeviceOS releases no longer support Xenons #2068
  • Minimum ARM GCC version required increased to 9.2.1 #2123
  • SPISettings class is always available even if compiling without Arduino compatibility #2138
  • Add deprecation notices for some of the renamed HAL APIs (with appropriate replacements) #2148
  • LTE Borons and BSoM will be unable to communicate with the cellular modem when downgrading from 2.x+ DeviceOS unless first downgraded to 1.5.2 and letting the device attempt a cellular network registration

FEATURES

  • [Gen 3] Wake up from STOP/ULP/Hibernate modes by analog pin #2163
  • [Gen 3] Wake up from STOP/ULP modes by WiFi/Cellular and UART #2162
  • [Gen 3] pinSetDriveStrength() API #2157
  • Add os_queue_peek() and make sure that queues and semaphores can be accessed from ISRs #2156 #2074
  • [Gen 3 / Cellular] Proactively attempt to recover from a number of failed cellular registration states #2150
  • [Gen 3 / Cellular] Reset cellular modem if failing to establish PPP session for over 5 minutes #2150
  • [Gen 2] Blocking UDP socket reads with a timeout #2150
  • Power-loss resistant bootloader updates through MBR #2151
  • Ultra low power sleep mode #2149 #2133 #2132 #2129 #2130 #2125 #2136
  • Additional APN settings based on ICCIDs #2144
  • NTP-based internet test #2118
  • [Gen 3] Warm bootup of cellular modems and cellular connectivity resumption #2102 #2146
  • Support for compressed / combined binaries in OTA updates #2097
  • ARM GCC 9 support #2103
  • Device-initiated describe messages #2024
  • Notify the cloud about planned disconnections #1899

ENHANCEMENTS

  • [Gen 3] Workaround when unable to obtain DNS servers from remote PPP peer #2165
  • System power manager blocks access to FuelGauge for 500ms in its own thread, instead of system when waking up from STOP/ULP sleep mode #2159
  • [wiring] Pin operations are not dependent on wiring C++ peripheral object initialization (e.g. SPI, Wire etc) #2157
  • [Gen 3] Default SPI pin drive strength changed to high #2157
  • [Gen 3] Restore original BASEPRI when exiting FreeRTOS critical section #2150
  • [Gen 3 / Cellular] Do not use packet buffers from pool in TX path #2150
  • [Gen 3 / Cellular] Reliable data mode entry when attempting to establish PPP connection #2150
  • [Gen 3] Changes the implementation of Nordic SDK critical sections to use BASEPRI #2101
  • Allow resetting the device and disconnecting from the cloud via low-level USB vendor requests #2142
  • [Cellular] When resuming cellular connection, do not run COPS=0 again to avoid triggering PLMN reselection #2139
  • Reduce runtime RAM usage by sharing newlib _impure_ptr between modules #2126
  • [Electron] Use snprintf() instead of sprintf() #2122
  • [Gen 3] System thread wakeup on cloud data #2113
  • [Argon] Hide unsupported WiFi wiring APIs #2120
  • [B5 SoM / Tracker] Disable 2G fallback for BG96-based devices #2112
  • [wiring] Changes default I2C timeouts when communicating with FuelGauge and PMIC to more manageable values #2096
  • [wiring] Propagate low-level I2C errors in FuelGauge methods #2094
  • [Gen 3] Network stack enhancements #2079
  • Send describe messages as confirmable CoAP messages #2024
  • [Argon] OTA adjustments #2045
  • Remove support for unused control requests #2064
  • RTC HAL refactoring to increase time-keeping precision #2123
  • Y2k38 time_t size change adjustments #2123
  • [wiring] Refactor wiring Time class to use reentrant versions of libc time functions #2123

BUGFIXES

  • [wiring] Servo object should deinit its pin when destructed #2150
  • Fix an issue with loop() not being executed in SEMI_AUTOMATIC modem when network interfaces are down #2150
  • [Gen 3] Fix cycle counter synchronization when processing RTC overflow events #2150
  • [Electron] Increase default AT command timeouts #2150
  • [Gen 3] Move PWM-capable pins from the PWM peripheral shared with RGB pins when possible #2150
  • [Gen 3 / Cellular] Call into LwIP PPP code to indicate PPP_IP protocol is finished #2150
  • [Gen 3] Fix BLE event processing while in STOP/ULP sleep mode #2155
  • [Gen 3] Cellular.command() should check NCP state before attempting to execute command #2110 #2153
  • [Gen 2] Fix RTC thread-safety issues when accessing RTC peripheral #2154
  • Workaround for Gen 3 devices not connecting to the cloud in non-automatic threaded mode #2152
  • Enable PMIC buck converter on boot by default #2147
  • [Gen 3] Reliably turn off the cellular modem when going into sleep mode to reduce current consumption #2110
  • [Gen 3] Fixes the behavior when the USB host puts the device into suspended state #2101
  • [Gen 3] Fixes potential deadlock in SPI HAL #2101 #2091
  • [Gen 3] Filter out non-vendor requests in USB control request handler #2101
  • [Gen 3] SOF-based USB Serial port state detection #2101
  • [Gen 3] Fixes an issue with devices not waking up by RTC from STOP sleep mode #2134
  • [Gen 3] Fix rename() filesystem call #2141
  • [Gen 3] Treat failure to open data channel as critical error #2139
  • [Photon] Fix WPA Enterprise X509 certificate parsing #2126
  • Use newlib-nano headers when compiling #2126
  • [Gen 2] Reset the device after applying an update while in listening mode #2127
  • [Electron] Process CEREG: 0 URCs on R4-based devices to detect loss of cellular connectivity #2119
  • [Cellular] Fixes the issue that FuelGauge doesn't work as expected after being woken up #2116
  • [Electron] Fixes buffer overrun in modem hal #2115
  • [WiFi] WiFiCredentials::setSecurity() should be taking wiring security type (e.g. WPA2 instead of WLAN_SEC_WPA2) #2098
  • [Boron] Fixes SARA R4 power on sequence where the default attempt should be made with runtime baudrate #2107
  • [Gen 2] Fixes an issue with I2C bus pins driven low if building with JTAG/SWD enabled #2080
  • [Boron] Fixes an issue with SARA R4 modems on LTE Borons becoming unresponsive when sending substantial amount of network data continuously #2100
  • Fix session resumption in AUTOMATIC system mode #2024

INTERNAL

  • Run on-device tests under the DeviceOS test runner #2140 #2150
  • Remove old deprecated platforms #2150
  • Addresses multiple issues in on-device no-fixture tests #2150

System Binaries (all devices)

https://github.com/particle-iot/device-os/releases/download/v2.0.0-rc.1/particle_device-os@2.0.0-rc.1.zip


Programming and Debugging

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

SoftDevice update

This Device OS release will automatically update the SoftDevice for devices connected to the cloud.

Prerequisites

particle-cli version 2.7.2.

Upgrading OTA

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

Upgrading using YModem

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

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

  1. Upgrade Device OS to 2.0.0-rc.1
  2. Update the bootloader to 2.0.0-rc.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@2.0.0-rc.1.bin

QA Report Summary for Particle Device OS

You can view results of tests run this release here.