Skip to main content

impOS Release 37 (Internal)

Note impOS™ 37 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 38. As such, all other Electric Imp documentation will refer only to impOS 38 when discussing this release.

Changes apply to all imps unless stated otherwise.


The final release is 37.33. Please see the Release 38 notes for further updates.

Bug Fixes and Changes


  • Fix rare crash (interrupt storm) when starting WiFi on imp001-imp004m (regression in 37.16).
  • Fix upgrade failures due to SPI-flash deep-sleep on imp003 and imp004m (regression in 37.30).
  • impC001: fix USB not waiting long enough for port reset to take effect.
  • impC001: fix for modem shutdown when already shutting down.


  • Allow configuring the fixed-frequency DAC without buffers (as long as they're provided before start()).
  • Add and to allow Squirrel to override roaming decisions.
  • Do not do SPI-flash deep sleep on the imp003, only on the imp004m.
  • Fix a glitch at end of audio playback under certain circumstances on the imp004m.
  • impC001: many improvements to production-line process, not visible to end-users.
  • impC001: increase 32kHz crystal drive strength, making clock startup more reliable.


  • impC001: fix USB failing to recover from OUT NAK in some cases.


  • Improve imp004m deep-sleep power consumption by putting SPI flash into deep sleep too.
  • impC001: experimental USB 1.1 host support.
  • Fix rare crash when using Squirrel weak references.
  • impC001: improve recovery from flash-writing errors.


  • impC001: fix crash in factory process when locking-down production imps.


  • Prevent WiFi power-save from being activated on imp004m-based devices where it won’t work.
  • Close rather than ignore insecure BLE connections when in secure-only mode on imp004m.
  • Fix notifications of multiple BLE LESC secure connections on imp004m.
  • Fix crash when using BLE LESC secure connections on imp004m.
  • impC001: use PPP over cell-modem instead of ‘native sockets’ to fix connection issues.


  • Improve power consumption in idle (shallow sleep, WiFi off) to 30μA (imp004m) or 500μA (imp003).
  • Fix further regressions in available Squirrel memory as compared to impOS 36.
  • Fix imp005 power-consumption regression caused in 37.25.
  • impC001: fix issue when reconfiguring analogue pins for other uses.


  • Fix some regressions in available Squirrel memory as compared to impOS 36.



  • impC001: provisional support for Telit LE66A1 cell-modem (for Japan region).


  • Experimental code changes.


  • Further fixes to firmware upgrades when an HTTP proxy is in use.
  • Fix imp005 configuration mechanism for 2.4GHz-only (or 5GHz-only) WiFi usage.


  • Force WiFi power-save mode off during network join (re-enacting requested state once joined).
  • Reset WiFi power-save mode to off (default) when reloading Squirrel.
  • Fix TLS SNI when using an HTTP proxy.
  • Add experimental clocking changes on imp005 — may reduce “memory error” restarts.
  • impC001: fix crashes when using nv table.


  • More aggressive avoidance of overruns when using two-wire UART for Bluetooth on imp004m.
  • impC001: use ADC auto-calibration.
  • impC001: work around silicon issue affecting hardware.voltage() reading.


  • Add imp.reset().
  • Add tcpsendfree property to ipv4.server slot to help debug all-or-nothing send mode.
  • Improve Bluetooth GAP connection security on imp004m.
  • Remove WiFi low-power-mode experiments on imp004m.
  • Fix unintentional non-restarts in server.restart().
  • Remove occasional five-second delays when disabling WiFi or doing a network scan on imp004m.


  • Experimental: disable WiFi low-power-mode completely to assess effect on imp004m Bluetooth.


  • Make mitigation of WiFi firmware forgetting low-power-mode state more robust.


  • Reduce delay when imp is redirected from Welcome server to Home server.
  • Add support for Adesto AT25SF641 and ISSI IS25LP064A SPI flash parts to imp005.
  • Further fixes for all-or-nothing send mode.
  • Re-enable WME for improved compatibility with 802.11n routers (regression in 37.11).


  • Move the imp004m’s bluetooth Squirrel object under hardware.
  • Add GATT security to Bluetooth support.
  • Fix unintentional blocking behavior in all-or-nothing send mode.
  • Revert experimental WiFi/Bluetooth co-existence fix on imp004m.
  • Add experimental new WiFi firmware from our supplier to imp004m.


  • Following BlinkUp, refuse to join open WiFi networks if a password has been given.
  • Further PWM audio fixes when using AUDIO flag on the imp004m.
  • Add experimental improvement to WiFi/Bluetooth co-existence on the imp004m.


  • On imp004m, expose overruns in Bluetooth UART to Squirrel via bluetooth.uartflags().
  • On imp004m, allow Squirrel to set buffer size for Bluetooth UART via uart.setrxfifosize().
  • Setting Bluetooth transmit power on imp004m is no longer ineffective if performed before advertising is started.
  • Reduce pause before first LED status shown (regression in 30.4, 33.0).


  • Fix critical issue when rebooting following imp.clearconfiguration(CONFIG_WIFI) (regression in 37.11).
  • Import upstream Squirrel fix for local variables in for loops.


  • Add ‘all-or-nothing’ mode for server.setsendtimeoutpolicy() which can be used to help avoid disconnections.
  • Remove experimental ‘32kHz sleep clock on pinE’ feature from imp004m.
  • Update bluetooth.settxpower() on the imp004m.
  • Fix exceedingly rare crash in BlinkUp™ code.
  • Fix behavior change when no WiFi settings are present (regression some time in 37.x).
  • On imp001-003, fix inadvertent change in ADC results for high-impedance inputs (regression in 35.3).
  • On imp001-004m: fix rare crash in hardware random number generation code.
  • On imp005, import new WiFi firmware blob from upstream, including ‘KRACK’ fixes.


  • On imp001-004m, import new WiFi firmware blobs from upstream, including ‘KRACK’ fixes.


  • Add for WiFi performance monitoring.
  • Introduce a sophisticated Bluetooth filtering API (bluetooth.setscanfilter()) to the imp004m.
  • Add bluetooth.settxpower() to the imp004m, for controlling beacon signal strength.
  • Fix rare audio-output crash on imp004m.


  • Re-try without needless delays if WiFi join ‘succeeds’ but WPA handshake fails.
  • React more quickly if a WiFi access point deauthorizes the imp client.
  • On imp004m, revert the WiFi firmware blob ‘upgrade’ which made reliability worse (regression in 37.3).
  • On imp004m, fix various Bluetooth-related crashes.
  • On imp004m, fix the re-use of audio-output pins.
  • On imp004m, fix audio playback of very short samples.
  • impC001: make more of server.connect() asynchronous.
  • impC001: fix Squirrel updates after impROM upgrades.
  • impC001: improve recovery from (theoretical) flash ECC failures.


  • Support for a global Squirrel exception handler, registered with the new imp API method imp.onunhandledexception().
  • PWM-based audio output added to imp004m.
  • Support on imp004m for ‘zombie’ PWM which keeps running even after Squirrel stops (eg. during upgrades).
  • Switch Bluetooth HCI to raw mode, to work around advertisement-reception issues (imp004m).


  • Improve Bluetooth output power when WiFi is also active (imp004m).
  • Bluetooth advertisement callbacks are no longer dropped when under load (imp004m).


  • Removed preliminary and incomplete UDP local-networking support.
  • Support Bluetooth Low Energy on imp004m.
  • Fix issues with hardware.spiflash use during WiFi connection (regression in 35.7).
  • impC001: SPI support.
  • impC001: fix hang after successful impROM upgrade.


  • Add support to the imp005 for S25FL-L SPI flash chips as S25FL-K chips are now hard to find.
  • Fix rare crashes when starting WiFi under heavy IRQ load (eg. sampler, fixedfrequencydac) on imp001/002/003/004m.
  • impC001: support hardware.uartHJKL (support was attempted in 37.3 but was incorrect).
  • impC001: support nv table.
  • impC001: fix reliability of fast UARTs in low-power modes (regression in 37.3).


  • DFSDM (sigma-delta digital microphone) input support for imp004m.
  • Support for quad-mode read on S25FL064L SPI flash chips (imp005).
  • Fix for the “Broadpwn” security threat in WiFi firmware for all imps.
  • Enhanced mitigation against future WiFi threats.
  • impC001: timers ran too slow when idle.
  • impC001: various connection-reliability fixes.
  • impC001: support for newer "rev2" hardware; remove support for "rev1" hardware.
  • impC001: power optimizations.
  • impC001: wake-up pin support.
  • impC001: external SPI flash support.


  • 37.2 was a release-process change only, with no impROM changes.


  • Preliminary impC001 support


  • Reduce delays when USB connects/disconnects rapidly (imp005).
  • UDP local networking.
    • New API method: