Required Components, Board Layout Recommendations And Best Practices
The imp006 provides support for multiple network technologies by decoupling the network hardware from the imp module. Customers can connect a range of network subsystems to the imp006 and, through Squirrel, control which of these is used to deliver Internet connectivity at any given time. This grants customers the ability to tailor the network technologies they support to their application’s particular use-cases.
This guide provides the hardware designer with the information they require to successfully integrate an imp006 and at least one network sub-system into their own device.
Note The principles and practices discussed in this guide are embodied in the imp006 Breakout Board reference design. You should consult the imp006 Breakout Board’s schematics, Altium and Gerber files for guidance on designing your own imp006-based hardware.
The imp006 is based on the STM32F423ZHJ6I MCU containing an Electric Imp bootloader. Installing impOS™, a process called ‘impification’, turns the STM32F423ZHJ6I into an imp006. See First Power Up for more information. The imp006 has three variants according to the wireless components it is to be connected to:
Variant | Device ID starts with | WiFi Module | Cellular Module |
---|---|---|---|
imp006a | 0x600a |
Murata 1MW Dual-band: 2.4GHz/5GHz |
Optional |
imp006b | 0x600b |
Murata 1DX Single-band: 2.4GHz |
Optional |
imp006c | 0x6000 |
None | Mandatory |
Note Both Murata 1xx parts also provide BLE and this is accessible in Squirrel via the imp API.
The appropriate encrypted firmware variant should be installed on an external SPI flash. The STM32F423ZHJ6I will verify the firmware and copy it to its internal flash. This occurs at first boot in the customer’s factory. From this point onward, the module is an imp006 of the specified type. It cannot be changed to another type. All subsequent boots execute the internal firmware.
The imp006a and imp006b detect modem presence by checking for a pull-down on CELL_PWR_EN at boot time. If no modem is fitted, this line must be pulled up to the IO supply. The imp006c variant expects a modem to be present.
The imp006 provides generic Quectel modem support with impOS 46, and Quectel BG96 only with impOS 44. Quectel produces a very wide range of modules, not all of which have been tested — or can be tested — with impOS. We have fully tested impOS 46 with these modems:
Additionally, basic functionality checks have also been made with these modems:
Quectel Modem | BG96 | BG95-M3 | EG21-G | EG25 | EG91-NA | EC25-E |
---|---|---|---|---|---|---|
Full Support | ✅ | ✅ | ✅ | |||
Basic Support | ✅ | ✅ | ✅ | |||
2G (EDGE/GPRS) | ✅ | ✅ | ✅ | ✅ | ✅ | |
3G (UMTS/HSPA) | ✅ | ✅ | ✅ | ✅ | ||
LTE Cat 1 | ✅ | ✅ | ✅ | |||
LTE Cat 4 | ✅ | |||||
LTE Cat M1 | ✅ | ✅ | ||||
impOS GNSS API Supported | ✅ | ✅ | ✅ |
Note Fully supported modems have been tested using all the Radio Access Technologies they work with.
In order for an STM32F423ZHJ6I to become an imp006, it must undergo the impification process. This takes place the first time the MCU is powered up, and reads the appropriate image from the external QSPI flash. At is at this time that the imp006 ‘personality’ (006a, b or c) is permanently set by the image loaded.
The impification process is only initiated by a specific STM32F423ZHJ6I SKU. This has been pre-programmed with the impOS bootloader, called the fastROM. At each boot, the fastROM checks for the presence of the SPI flash storage and a valid encrypted impROM image within it. If the fastROM verifies the impROM, it copies the impROM to the STM32F423ZHJ6I internal flash and restarts the MCU, which will now boot impOS as an imp006.
If any of these checks and processes fail, the STM32F423ZHJ6I will not have become an imp006. Such failure is signalled by the fastROM on the BlinkUp status LED: it is lit solid red for two seconds. At the end of that time, the fastROM causes the MCU to reboot.
When the impification process is successful, the imp006 will present the standard BlinkUp status codes as appropriate: it will first show flashing amber to indicate that it is ready for BlinkUp.
STM32F423ZHJ6I devices are delivered with full hardware protection enabled (Read Protection Level 2 as further detailed in STMicroelectronics’ STM32F423 documentation). The debug/chip is permanently disabled.
The impification process typically takes 20-40 seconds, so you should allow for this in your manufacturing process. Once impification has been completed successfully, the imp006 will reboot into a ‘raw’ imp state: the status LED will be flashing amber to signal that it is ready for factory BlinkUp. No network connectivity is required for impification.
Please see the imp006 pin mux page.
The following figure shows the imp006 pinout top view:
The following tables show how the STM32F423ZHJ6I’s pins map to imp006 pins as referenced by the imp API (green). For specific imp pin functions, please see the imp006 pin mux. Grid references are based on the co-ordinate system used in the diagram above.
Pins marked in blue have specific imp-related functions which are not exposed to Squirrel. Please see the imp006 Breakout Board schematic for further details.
Grey references are STM32F423ZHJ6I GPIO pins that are reserved for possible impOS use.
Pins marked in red and black are, respectively, STM32F423ZHJ6I power and other function pins. Please see the STM32F423ZHJ6I datasheet for more information.
STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. |
---|---|---|---|---|---|
A1 | Reserved | B1 | OSC32_IN | C1 | OSC32_OUT |
A2 | pinYG | B2 | pinXS | C2 | VBAT |
A3 | pinXR | B3 | pinXQ | C3 | pinM |
A4 | pinYA | B4 | pinXP | C4 | pinL |
A5 | pinYB | B5 | pinU | C5 | pinT |
A6 | Reserved | B6 | pinXF | C6 | pinXE |
A7 | Reserved | B7 | BTUART_CTS | C7 | BTUART_TX |
A8 | pinB | B8 | pinYJ | C8 | pinYK |
A9 | pinXH | B9 | pinA | C9 | pinC |
A10 | Reserved | B10 | SDIO | C10 | SDIO |
A11 | Reserved | B11 | SDIO | C11 | VDDUSB |
A12 | Reserved | B12 | USB_DATA + | C12 | USB_DATA - |
STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. |
---|---|---|---|---|---|
D1 | OSC_IN | E1 | OSC_OUT | F1 | NRST |
D2 | VSS | E2 | pinYM | F2 | QSPI |
D3 | VDD | E3 | RDTR | F3 | QSPI |
D4 | pinYL | E4 | RAPRDY | F4 | VDD |
D5 | BOOT0 | E5 | PDR_ON | F5 | VDD |
D6 | pinR | E6 | VSS | F6 | VDD |
D7 | RMODULEOE | E7 | VSS | F7 | VDD |
D8 | BTREGON | E8 | BTUART RX | F8 | VDD |
D9 | pinD | E9 | SDIO | F9 | VDD |
D10 | pinP | E10 | pinQ | F10 | VDD |
D11 | RUART2_TX | E11 | SDIO | F11 | SDIO |
D12 | RUART2_TX | E12 | Reserved | F12 | pinK |
STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. |
---|---|---|---|---|---|
G1 | RWDIS | H1 | pinV | J1 | VSSA |
G2 | QSPI | H2 | RRING | J2 | pinW |
G3 | QSPI | H3 | pinF | J3 | pinXD |
G4 | VSS | H4 | pinE | J4 | Reserved |
G5 | VDD | H5 | BYPASS_REG | J5 | Reserved |
G6 | VDD | H6 | VSS | J6 | pinYE |
G7 | VDD | H7 | VCAP_1 | J7 | RDCD |
G8 | VSS | H8 | pinXW | J8 | pinXV |
G9 | VCAP_2 | H9 | RUART1_CTS | J9 | pinXL |
G10 | VSS | H10 | BTDW | J10 | RV_BUFF |
G11 | BTUART_RTS | H11 | QSPI | J11 | PSU_EN |
G12 | pinJ | H12 | BTHW | J12 | OPTO_BIAS |
STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. | STM Grid Ref. | impOS Func. |
---|---|---|---|---|---|
K1 | VREF — | L1 | VREF + | M1 | VDDA |
K2 | RESCUE | L2 | pinN | M2 | pinXN |
K3 | pinXC | L3 | pinXB | M3 | pinXA |
K4 | RVUSB | L4 | OPTO_IN | M4 | QSPI |
K5 | RPWRON | L5 | RRST | M5 | RUSBBT |
K6 | pinYF | L6 | RSTATUS | M6 | RPSM |
K7 | pinYH | L7 | pinXJ | M7 | pinXK |
K8 | pinXU | L8 | pinXT | M8 | pinYC |
K9 | RUART1_RX | L9 | RUART1_TX | M9 | pinS |
K10 | pinXM | L10 | RUART1_RTS | M10 | pinXG |
K11 | WLREGON | L11 | RED LED | M11 | pinH |
K12 | pinYD | L12 | GREEN LED | M12 | pinG |
All pins default to tristate high impedance (floating).
The imp006 pin RESCUE (PA1) may be used as an application rescue pin. If impOS has been set to Rescue Mode, RESCUE is sampled during a cold boot and its state determines whether Squirrel starts immediately (pin state high, the default) or after a ten-second period during which impOS attempts to connect to the impCloud and check for updated Squirrel (pin state low).
Rescue Mode is intended only for products which need Squirrel to run as quickly as possible when the device is connected to power: impOS will start Squirrel immediately upon a cold boot. Rescue Mode is not enabled by default and can only be enabled by calling imp.enablerescuepin() within Device Under Test (DUT) factory firmware.
When Rescue Mode is enabled, if RESCUE is externally driven low at cold boot, typically via an end-user activated push-button, then impOS will temporarily revert to the standard boot pattern: it will connect to the impCloud and check for updated Squirrel before it loads the Squirrel virtual machine.
RESCUE must be held high through a pull-up as its default, no-rescue state.
Customers who have built imp-based products before may have made use of nv, a Squirrel table that is automatically persisted in RAM when certain imps are put into deep sleep, and automatically re-instantiated when the imp wakes.
If you are building an imp006-based product, please be aware that nv is not available with this module. To persist data across deep sleeps, consider writing the information to the SPI flash connected to the imp: either the area made available to the application or the user configuration space available within the impOS-controlled area of the SPI flash. Up to 4KB (4096 bytes) of data may be stored in the latter; the space available in the application area will depend upon the size of SPI flash included in your design.
Unlike nv, these areas have the benefit that they will be preserved during power loss.
The cellular modem is the component with the greatest power consumption: for example, while making a connection on 2G. Please contact Quectel for a copy of your modem’s datasheet to determine the module’s maximum power draw. We recommend 2G-enabled designs are capable of delivering 2.5A sustained.
Your design will require the following in addition to the imp006 module.
The required circuit is very simple: you just need a phototransistor and a resistor.
This LED uses different color patterns to show different status conditions — see BlinkUp Status Codes for more information.
An external 64Mb (8MB) SPI flash part is mandatory. The address space above 0x400000
(4096KB) can be used by your application through the imp API’s Spiflash class. Areas below this address will be erased and reprogrammed by the OS, so applications using pre-programmed SPI flash components must not use space below this address.
The following SPI flash parts are directly supported:
Part Name | Chip ID | Notes |
---|---|---|
Macronix MX25R64xx | C2-28-17 | Quad-read supported Old Macronix parts with tRES1 > 100µs may not work |
Cypress S25FL064L | 01-60-17 | Quad-read supported |
Winbond W25Q64JV | EF-40-17 | Quad-read supported |
Other SPI flashes should also work, although in 1-bit-wide mode only, provided they:
0x20
, 0x52
, 0xD8
).0xB9
(sleep) and 0xAB
(wake), or ignore those two commands.To reduce noise in the system, source termination resistors are recommended.
The imp006 does not include an internal timing crystal to run the internal Real-Time-Clock (RTC) while it is in deep sleep. If your design requires that the imp006 be capable of low-power deep sleep, it must include the crystal so that the imp can set timers and use them as a wake source. If no crystal is being used, you should ground the OSC32_IN pin.
A 32kHz crystal is also mandatory if your design is based on the imp006a variant as the 1MW module requires the 32kHz LPO clock to be driven.
Note Make sure the crystal has a load capacitance of 6pF and that suitably sized load capacitors are used. Higher capacitor values may prevent the oscillator from starting up. For more information, please see the STMicro Appnote AN2867. To select a crystal, refer to Table 7, “Recommended crystal resonators for the LSE oscillator in STM32 MCUs”. Look for crystals that work with the F4_g2 series.
impOS configures the STM32 32kHz oscillator to high drive mode.
The imp006 also requires a 26MHz crystal. This is the primary clock source for the STM32F423ZHJ6I MCU. This should be connected between the OSC_IN and OSC_OUT pins. This is used for all variants of the imp006.
Note 1 STMicro Appnote AN2867 has a list of suitable HSE crystals: see Table 6, “HSE oscillators embedded in STM32 MCUs / MPUs”.
Note 2 Ensure the crystal has suitably sized load capacitors for reliable start-up and accurate frequency keeping. Please consult the imp006 breakout layout for guidance on good component placement and signal routing.
With impOS 46, the imp006 provides generic Quectel modem support.
The imp006’s pin CELL_POWER_EN (PG13) must be pulled low on imp006 variants that are fitted with a cellular modem.
Note Devices based on these variants that have no modem, must pull CELL_POWER_EN high (to the STM32 I/O power domain).
CELL_POWER_EN is sampled without any STM-internal pullup or pulldown to determine imp006 type, meaning the pulldown will not burn significant power when the cell power is enabled.
CELL_POWER_EN is driven high 50ms before R_VBUFF (PG4) to begin the modem power-on sequence. If the modem pin VMOD is power-gated, it must be operated by CELL_POWER_EN (active high).
CELL_POWER_EN and R_VBUFF are tristated at the end of the modem power-off sequence.
If level-shifters are needed on the STM32-modem connection, CELL_POWER_EN is suitable to be used to enable them, even though it is driven before R_VBUFF. R_VBUFF is suitable in this case for directly powering the level-shifters.
Note If your cellular module is a Quectel BG96, the imp006 pin R_PWRON (PF13) provides an open-drain output suitable for the BG96’s PWRKEY input, which is not 3V3 tolerant. R_PWRON is typically tristated, but is pulsed low during modem power-on and power-off sequences.
Currently, the imp006 supports the Murata 1MW module for dual-band (2.4GHz and 5GHz) WiFi and the Murata 1DX for single-band (2.4GHz) WiFi.
If a WiFi module is fitted, ie. the imp006 as of an imp006a or imp006b variant, then pins SDIO_CMD (PD2), SDIO_D0, SDIO_D1, SDIO_D2 and SDIO_D3 (PC8-PC11) must have be connected via external pull-up resistors to the WiFI module power domain.
No pull-ups are needed if no WiFi module is fitted, ie. imp006 variant imp006c.
Note The sixth SDIO signal, SDIO_CLK (PC12) does not need a pull-up.
The pin WIFIBLE_POWER_EN (PG3) is driven high when access to WiFi or BLE is required. It is tristated at all other times.
If the chosen WiFi module is power-gated, or if a boost-converter is needed to achieve 3V3, then it must be operated by WIFIBLE_POWER_EN (active high). Unlike previous imps, the imp006 does not use WIFIBLE_POWER_EN for accesses to external SPI flash, which is assumed to be in the same power domain as the STM32.
WIFIBLE_POWER_EN is not used for cell-modem power..
The pin WL_REG_ON (PD14) is driven high during the WiFi power-on sequence, 20ms after WIFIBLE_POWER_EN. It is driven low during the WiFi power-off sequence. It is therefore suitable for a Murata 1MW or 1DX module WL_REG_ON inputs.
Important We strongly recommend that you read Murata’s Type 1MW Application Note if you are planning to build a product incorporating imp006 and dual-band WiFi. The equivalent Application Note for single-band WiFi can be found here.
BLE on the imp006 is provided by either of the Murata 1MW or 1DX modules for which the imp006 is specified.
The imp006’s pin BT_REG_ON (PG10) is driven high during the BLE power-on sequence (20ms after WIFIBLE_POWER_EN) and driven low during the BLE power-off sequence. This makes it suitable for connection to Murata 1MW and 1DX modules’ BT_REG_ON inputs.
It is very important that your design follows a few simple rules when it comes time to place and route your printed circuit board in order to take advantage of the imp006’s simplicity and maximize performance.
The imp006’s ground pins should have a clear path back to ground, without running through many narrow traces or bottlenecking at a single via. While a via may be rated for much more DC current than your design calls for, the impedance of the ground path needs to be as low as possible to prevent noise from becoming a problem in your design. This applies to other parts of your design as well, so minimize ground impedance everywhere.
Bypass capacitors will dump noise to ground, but if the trace on the filtered side is long, it presents an opportunity for that trace to pick up noise again.
Use “V” routes to connect power pins to power planes even if they are adjacent to each other.
The parasitic capacitance of a nearby ground plane may exceed the required load capacitance for your 32kHz crystal (if used). To avoid de-tuning the crystal — which can severely affect performance or prevent the imp006 from operating entirely — pull ground pours back around the 32kHz crystal and crystal load capacitors.
A poorly-routed switching power supply will send noise all over the board and severely impact performance and range. This is easily avoided by following the recommended layout in the datasheet for nearly any switching power supply IC.
Noise on your board directly diminishes WiFi performance and can prevent you from passing FCC certifications. Keep all noisy parts (switching power supplies, high-speed signalling) as far from the imp006’s antenna as possible.
Routing signals in the correct order can significantly simplify a design:
Because a board incorporating the imp006 must include a microstrip transmission line from the imp006 to the antenna, a four-layer PCB is required in order to achieve 50Ω impedance control of the RF trace.
Modular pre-certification has been performed with the layer stackup shown below. If a different layer stackup is used, modular certification may not be used. Note that changing the layer stackup will also affect the values of the RF matching components and possibly the dimensions of the RF trace in order to maintain a 50Ω characteristic impedance.
The RF traces must be a 50Ω±2Ω impedance controlled transmission line which is referenced to a solid, unbroken ground. The trace width and distance to the ground plane must be adjusted to achieve the target impedance. Each trace should not have sharp changes in direction and should use curved traces when needed. You will need to tell your PCB vendor which trace requires impedance control and ask for per-lot testing and reports to ensure that they are meeting the requirements.
The antenna must be placed at the edge/corner of the PCB, with a copper keep-out under the entire antenna element on all PCB layers. No other traces or components may be placed in this region. A row of stitching vias is required along the edge of the ground pour below the antenna section; this ground pour, including the vias, is part of the antenna. The module, antenna, and RF trace must all be placed on the top layer of the board.
The antenna may be mirrored (left/right) as required for mechanical design as long as the dimensions of the antenna are preserved and all other design rules are followed. Please consult the Gerber files for the imp006 breakout board to obtain the exact measurements, and the BoM for the exact component part numbers that are used within the antenna pattern. You should not substitute any other parts.
If the antenna is on the corner of the board, ensure that there is >=16mm between the antenna edge and the nearest ground plane (or board edge) horizontally.
Note Murata has valuable advice on antenna design for the 1MW dual-band WiFi module here, and for the 1DX single-band WiFi module here.
The imp006 initially contains a secure bootstrap which, at first power on, will locate a correctly encrypted and signed image on the external QSPI flash. This image is then used to load impOS into the internal MCU flash, and make the device functional. This process takes around 20 seconds, during which time the device will show solid green with two short breaks.
If the imp006 is not connected to QSPI, the firmware is missing or the firmware fails the bootstrap code’s cryptographic checks, this state will be signalled on the BlinkUp status LED. The pattern it presents is two seconds of solid red. After this the MCU reboots, so the effect will be a slow red blink.
fastROM SPI flash not found | 2000ms | Reboot |
---|
For more information, see First Power Up, above.
Get the latest impOS firmware for pre-installation on device SPI flash.
Date | Notes |
---|---|
May 12, 2022 | Update for impOS 46’s multiple modem support |
November 24, 2021 | Add link to impOS downloads page |
May 29, 2020 | Initial release |