Skip to content

@m-mcgowan m-mcgowan released this Aug 20, 2015 · 5500 commits to master since this release

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:

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.


particle flash YOUR_DEVICE_NAME  system-part1-0.4.4-photon.bin
particle flash YOUR_DEVICE_NAME  system-part2-0.4.4-photon.bin


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:


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


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


  • 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 now Particle.connected(). The former Spark 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.


  • 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.


  • [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 #536
  • TCPClient::connect() does not close an existing socket. #538
  • TX/RX PWM randomly inverted #545
  • UDP.begin/write return values #552
Assets 10
You can’t perform that action at this time.