Skip to main content

Release 39

Note impOS™ 39 has been solely made available internally and to select early testers. As such, most developers and customers will not receive it except in its public release form, impOS 40. As such, all other Electric Imp documentation will refer only to impOS 40 when discussing this release.

Changes apply to all imps unless stated otherwise.


The final release is 39.29. Please see the Release 40 notes for further updates.

Bug Fixes and Changes


  • Features
    • imp005: Ensure escrow customers can build factory SPI images.
    • impC001: Pause for longer on Squirrel errors, in order to use less cellular data.
  • Bug fixes
    • Fix fixedfrequencydac underruns when just two buffers provided (regression in 37.32, i.e. also in 38.x)
    • impC001:
      • Power-cycle the modem if registering on the cell network keeps failing.
      • Fix for disconnecting while an call is pending.


  • Bug fixes
    • impC001: Add timeout if cell-modem keeps switching back and forth between registered and unregistered states.


  • Features
    • Major change to server-connection state-machine: imp not now considered connected until server responds.
    • impC001:
      • Prefer 4G networks to 3G if both are available.
      • Avoid constantly polling the modem for status updates.
      • Added resilience for modem UART handling.


  • Bug fixes
    • Fix long pauses if HTTP proxy is in use and it disconnects our socket.
    • Fix connections for networks that need an HTTP proxy and a non-standard port to connect.
    • imp004m: Fix failure if UART is already configured.


  • Bug fixes
    • imp001: fix misreading of ID chip (regression in 39.23).
    • imp002: fix bogus driving of pin 6 (regression in 39.23).
    • imp005: increase defensiveness against potential Ethernet/WiFi teardown race conditions.
    • impC001:
      • Increase over-optimistic timeout for connection establishment.
      • Reduce excessive timeout if connection comes up but packets don’t flow.
      • Do not overclock RNG peripheral (potential cause of watchdog resets).


This release is for impC001 only and is not compatible with other imp types

  • Features
    • impC001: Modify AT+COPS command sending to remedy picocell incompatibilities.


  • Features
    • imp001-004m: allow normal-MTU-size packets on WiFi (was previously capped lower).
    • impC001:
      • Add Private impCloud™ support.
      • Add extra AT+COPS command to remedy picocell incompatibilities.
  • Bug fixes
    • Ensure BlinkUp™ status LED remains on during “cloudification” process.
    • Fix wrong line numbers in Squirrel errors thrown by API methods.
    • imp004m: fix overclocking/undervoltage issue (found by inspection; no actual symptoms ever seen).
    • impC001: Add greater robustness to potential USB crashes.


  • Features
    • Merge new upstream “tadns” DNS resolver code; many bugfixes claimed.
  • Bug fixes
    • imp001-005: fix potential buffer overrun with 32-byte WiFi SSIDs.
    • imp003/004/C001: fix internal-flash timings being too conservative after idle (regression in 37.1).
    • impC001:
      • Fix crash when upgrade file is 404 Not Found.
      • Cope with situations where the list of ‘bumped’ networks isn’t readable at startup.


  • Features
    • Reduce Squirrel latency when disabling WiFi by only disabling DHCP when necessary.
  • Bug fixes
    • Fix theoretical issue where Squirrel shift operators could invoke undefined behaviour in the impROM.


  • Features
    • Cache several TLS sessions (not just one) to improve reconnection times when at limits of WiFi range.
    • imp003-005: add to reduce SPI flash contention at the expense of power usage.
    • impC001: reduce power consumption while disconnected and idle.
  • Bug fixes
    • Fix confusing LED patterns when BlinkUp fails and needs to be retried.
    • Ensure that factory test shows green (or red) LED results, even when it takes over 60 seconds to run.


  • Features
    • impC001: improve recovery time from certain network errors.
  • Bug fixes
    • imp004m: improve Squirrel latency when attempting to join a WiFi network that the imp can't see.


  • Features
    • imp004m: improve Squirrel latency during Bluetooth scan operations.
  • Bug fixes
    • imp004m: improve recovery from Bluetooth UART overruns.


  • Features
    • imp004m: increase speed of Bluetooth UART and capture more advertisements in busy conditions.
  • Bug fixes
    • imp004m: fix bogus error when reconfiguring hardware.spiAHSR (regression in 37.3).



  • Features
    • impC001: ensure we retry cell networks from which imp has been temporarily ejected.
  • Bug fixes
    • impC001:
      • Fix severe issue where reconfiguring pins could cause peripherals to fight for control.
      • Fix use of hardware.lightlevel() while BlinkUp is off.

39.13 and 39.14

  • Minor modifications — no customer-visible features changed.


  • Features
    • impC001: Add delay when USB device detected to mitigate enumeration failures.


  • Features
    • impC001: increase write timeout from 30s to 60s in case server.log(), etc. causes cellular connect.


  • Features
    • impC001:
      • Ensure state-change callbacks available on all (future) wake-capable pins.
      • Pins W, YK and YL now have state-change callbacks; pins B, R and YU do not breaking change.
  • Bug fixes
    • imp001-003: the deprecated imp API method spi.read1() can no longer be called even on disabled SPI peripherals.
    • imp001-004m: fix startup hang when 32kHz crystal (regression in 39.9).


  • Features
    • impC001: update I²C timings.
  • Bug fixes
    • imp001-004m: fix upgrades getting stuck because flash-writing errors were not cleared (regression in 37.1)
    • impC001:
      • Improve connection robustness and reduce reconnections.
      • Recover if connection drops during ICMP ping (regression in 39.5).


  • Features
    • impC001: add i2cJH (rev2 and later hardware).
  • Bug fixes
    • imp001-005: fix crash when doing imp.scanwifinetworks() while attempting to connect to a now-absent access point.


  • Features
    • impC001:
      • Support improved rev5.2 pinmux.
      • Support S25FL064L SPI flash.


  • Bug fixes
    • imp001-004m and impC001: fix a crash when the Squirrel bytecode page was filled exactly (regression in 39.4).
    • imp005: fix connection issues due to PPP state machine bugs.
    • impC001: fix rare watchdog restarts due to stuck USB interrupt.


  • Features
    • impC001: make false connections fail faster by attempting ICMP ping once ‘connected’.
  • Bug fixes
    • Fix hang in spi.readblob(n) where n > 65535.
    • imp001-005: Recover if WiFi firmware takes forever to start.
    • imp005: Restart WiFi if the firmware appears ‘stuck’.
    • impC001: Fix USB transactions that are exact multiples of 64 bytes long.


  • Features
    • imp003/imp004/impC001: new WAKEREASON_POWER_RESTORED when waking from VBAT mode.
    • impC001:
      • Support Macronix SPI flash parts needing RDP command to wake from deep sleep.
      • Keep LEDs on for longer, to reflect lengthy cell-modem connection times.
  • Bug fixes
    • Invalid callbacks (for UART and server.onunexpecteddisconnect()) were not released until a valid one was set.
    • UART callbacks were not released in uart.disable().
    • Fix issue where RETURN_ON_ERROR_NO_DISCONNECT would block unexpectedly.
    • imp001-imp005: in some circumstances WiFi scan would fail and be retried, taking 15s longer.
    • impC001:
      • Fix cell-modem power glitches on reset.
      • Fix issue with nv table not being written correctly.


  • Features
  • Bug fixes
    • imp005: fix rare crashes due to external SPI flash misreading.
    • impC001: increased robustness when reconnecting after the cell has dropped our connection.


  • Features
    • impC001: extend connection timeouts for cellular connections.
  • Bug fixes
    • Several Squirrel calls (swap2(), swap4(), casti2f(), castf2i() and swapfloat()) could reveal stack contents on failure.
    • imp004m: if SPI flash is in deep sleep, wake it up before doing firmware upgrades (regression in 37.30).
    • impC001:
      • Fix retries if a zero-length USB OUT transaction is NAK'd.
      • Fix hardware.vbat() (regressed in 39.0).
      • Recover from UART errors during cell-modem startup.
      • Fix reconnections after nine-minute snooze.
      • Disable ‘UART power saving’ mode which was causing communications failures.


  • Bug fixes
    • impC001:
      • Improve ability to deal with corrupted responses from the cell-modem.
      • Make modem startup (after brief shutdown) more reliable.


Note This release branches from impOS 38.3, so please see the 38 release notes for earlier changes.

  • Features
    • Temporarily reinstate preliminary and incomplete UDP support (see notes for 37.5).
  • Bug fixes
    • imp003 and imp004m: fix issue with rescue pin for units blessed on impOS 36 but running impOS 38 or later.
    • imp004m: fix issue with zombie PWM for units blessed on impOS 37 but running impOS 38 or later.