RoadTest: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM
Author: mahmood.hassan
Creation date:
Evaluation Type: Development Boards & Tools
Did you receive all parts the manufacturer stated would be included in the package?: True
What other parts do you consider comparable to this product?: ST Microelectronics - STM32L4 series of ultra-low-power MCUs Texas Instruments - MSP430 series ultra-low-power MCUs
What were the biggest problems encountered?: Earlier I had some issues with SDK but found a solution easily :)
Detailed Review:
Evaluation system for MAXIM Ultra-Low Power Arm Cortex-M4 Darwin MCU MAX32660 (MAX32660-EVSYS#MAX32660-EVSYS#) consist of following components
MAX 32660 evaluation system is a low-cost, ultra-low power evaluation board for evaluating the MAXIM Ultra-Low Power Arm Cortex-M4 with FPU-Based Microcontroller MAX32660 which is specifically designed to fit in very small spaces with one of the world smallest MCU package (16pin WLP 1.6mmx1.6mm) but this board is equipped with 4mmx4mm 20pin TQFN package. MAXIM is targeting this MCU for the application/uses with ultra low power requirements along with space constraint i.e: wearable medical patches, fitness monitors, IOT, remote sensing, optical modules etc.
The evaluation board PCB is divided into two separable halves where one half has the application mcu while the other half is consist of MAX32625 based SWD/MAXDAP programmer and debugger.
Programmable Half |
|
Programmer Half |
|
Thanks Element14 Community and MAXIM for providing me this opportunity.
The MAX32660 evaluation system is securely placed inside a strong, purposefully built cardboard box. The board itself is sealed inside a electrostatic shielding bag and then bubble wrapped along with pin-out reference card to keep the these safe from damage during transport or storage (when the kit is not in use it is recommended to keep it inside the box in order to prevent ESD and avoid interference).
First Impressions
The MAX32660 board is designed quite well with breadboard compatible dual in line headers. This board is full of tiny (0402 and 0201) passive components which rarity among low cost MCU evaluation boards. The PCB quality is very impressive and every component is perfectly aligned and placed. Being an ESD sensitive device extra caution is required in the use of user input button because it is very small and placed close to IO pins. The jumper to select operating target voltage has long handle which makes it very easy to use. Overall MAXIM did a great job in packing everything nicely and securely. The inclusion of micro USB cable in its content enable user to start testing and developing right out of the box. The Pin out reference card is very helpful during connecting sensors or devices with it because there is no IO pins marking on this boards.
Below are the unboxing images of this evaluation system.
{gallery} Unboxing the MAXIM MAX32660 Evaluation System |
---|
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - E14 Box Top View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - E14 Box Bottom View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - E14 Box First Inside View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - E14 Box First Inside View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - Maxim Box First View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - Maxim Box First Inside View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - Maxim Box Contents |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System Pack Contents |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System First View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System Side View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System Top View |
IMAGE TITLE:Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System Bottom View |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - MAX32660 Evaluation System Pin-out Card |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - USB Cable |
IMAGE TITLE: Ultra-Low Power Arm Cortex-M4 Darwin MCU EVM - unboxing - USB Cable |
Here is the list of few key features of this evaluation board.
source: https://www.maximintegrated.com/en/products/microcontrollers/MAX32660-EVSYS.html/
The schematics of all the Important parts of MAX32660 side of this EVSYS board are shown below:
MAX32660 - UART1 (P0_10 and P0_11), SDA1 (P0_2, P0_3) and SWD(P0_0, P0_1) along with RSTN pin are connected to Debug Adapter.
The DS28E05 is a user-programmable EEPROM with write protected or EPROM emulation mode and guaranteed unique 64-bit ROM identi-fication number (ROM ID). It communicates over Maxim Integrated’s single contact 1-Wire® interface with the ROM ID acting as node address in the case of a multiple-device 1-Wire network.
source: https://datasheets.maximintegrated.com/en/ds/DS28E05.pdf
Both halves of this evaluation board can be separated and used as an individual parts if programming/debugging is required then you can use 10PIN J4 (SWD/MAXDAP) connector or by restoring the electrical connections between JH1 and JH2.
Maxim 32660 is supported by:
During this road test I will be using Keil µVision for examples testing and application development.
Both IAR workbench and Keil µVision suport MAX32660 MCU and CMSIS manager of each IDE has MAX32660 EVKIT (same as EVSYS but without integrated debug adapter) board support with examples (figures 1, 2 and 3).
Figure 1: CMSIS/PACK manager in both IAR workbench and Keil uVision IDE
Figure 2: IAR workbench - MAX32660 EVKIT example in CMSIS Manager
Figure 3: Keil µVision - MAX32660 EVKIT example in CMSIS Manager (aka Pack Installer)
Someone can also use eclipse CDT as development tool by simply downloading the Maxim MAX32660 SDK from their website (HERE) or if eclipse CDT is not already install then Maxim has already provided an easy to install bundle with fully configured IDE and SDK (HERE).
The SDK of MAX32660 contain more examples then shown IAR and Keil CMSIS manager. But on investigating I found out that .pdsc file is responsible for less example visibility to CMSIS manager and the actual downloaded examples are the same as contained in SDK (figure 4, 5 and 6).
Figure 4: Keil µVision - MAX32660 EVKIT example downloaded by CMSIS Manager (aka Pack Installer)
Figure 5: PDSC file from Maxim for MAX32660 EVKIT is responsible of less example visibility to CMSIS/PACK manager
Figure 6: Examples listed in PDSC file by Maxim for MAX32660 EVKIT along with other details
After downloading MAX32660 SDK for Keil µVision its time to run our first example. GPIO example is chosen as first example to load and test MAX32660 board. Its abstract file will tell us about the exact functionality of this example which is also given below:
GPIO Example functionality:
- Uses GPIO as inputs and outputs
- The example reads P0.12 (S1) and outputs the input value onto P0.13 (DS1). (Its S2 and D2 for MAX32660 EVSYS)
- Uses the GPIO IRQ and responds to events on P0.3.
* When P0.3 changes state, the IRQ handler toggles P0.2.
- Status is transmitted via stdout using UART0 to a host terminal at 115,200 Baud, 8N1. (Its UART1A not UART0 for MAX32660 EVSYS)
Now we have to have to connect a button on P0.3 and monitor the output on P0.2. Here our pin out reference card will come to our rescue to choose the correct IO pins (figure 7). But the image on our reference cards is confusing. Now are VDDIO and GND pins right next to MAXDAP half of our board or not and where exactly are the pin P0.2 and P0.3. To solve this mystery we can either take help of our DMM to find out exactly which pins are the VDDIO and GND or look into MAX32660 EVSYS datasheet and rest of it will be easy.
The guys from MAXIM have missed to update the title and picture on Pin-out reference card. And this outdated reference card with image of Evaluation Kit instead of Evaluation System (figure 8), will definitely make you little confuse even though datasheet is displaying correct image along with pin-out diagram (figure 9).
Figure 7: Pin-out Reference Card is for MAX32660 EVKIT not EVSYS
Figure 8: Actual Images of MAX32660 EVSYS and EVKIT
source: https://datasheets.maximintegrated.com/en/ds/MAX32660-EVSYS.pdf and https://datasheets.maximintegrated.com/en/ds/MAX32660EVKIT.pdf
Figure 9: MAX32660 EVSYS pin out diagram from its datasheet
After setting up the hardware to test GPIO example, build the code and it worked like a charm no warning or error (figure 10). So now before uploading it to our board we need to select the correct debug device from target options. Selected the "CMSIS-DAP Debugger" in debug tab of "Options for Target" (figure 11) and then select debugger setting from button next to debugger menu. Goto Flash Download tab and check "Reset and Run" option if its not already selected (figure 12). Now we are good to load our first onto our board.
Figure 10: Build Output of our first GPIO example
Figure 11: Examples listed in PDSC file by Maxim for MAX32660 EVKIT along with other details
Figure 12: Examples listed in PDSC file by Maxim for MAX32660 EVKIT along with other details
This example worked exactly as it was told in its abstract file with 1V8 and 3V3 target voltages. Similarly other example were tested and each example worked without any problem. Now its time to build our first project and test its capabilities and user-friendliness.
Another important thing to take care of during Example testing is always check the USE Micro LIB option in Target tab of "Options for Target" Dialog (figure 13) or else you will get an error message".\Objects\GPIO_Demo.axf: Error: L6218E: Undefined symbol $Super$$__main_after_scatterload (referred from system_max32660.o)." (figure 14).
Figure 13: In "Options for Target" dialog -and "Target" tab - Always check Use Micro LIB option to avoid any error during build
Figure 14: Error without enabling the Use Micro LIB option
As mentioned earlier, the one the main application of this board is wearable products. Then the best choice to reduce the power consumption in smart watches or fitness monitors, is using low power and miniature ambient light and proximity sensor to control the brightness and auto ON/OFF the display. I have bought few sensor for my another project so why not test it with this MAX32660 board.
Little bit about Sensor: APDS-9930 is a digital I2C compatible ambient light sensor (ALS) with a low lux performance at 0.01 lux and proximity sensor with IR LED which operates well from bright sunlight to dark rooms. In addition, an internal state machine provides the ability to put the device into a low power mode in between ALS and proximity measurements providing very low average power consumption.
There is an Arduino library available for this module (HERE) and with some knowledge of c/c++ you can easily port it to other platform. With a little effort I have successfully make it compatible to our board with help of MAX32660 HAL communication libraries. The details of HAL I2C library functions used in APDS9930 library is given below (figure 15).
Figure 15:Board I2C communication library function used in APDS9930 library with details
Anyone can use it with other platforms by modifying these functions of APADS9930 library according to there platform:
bool read_byte(uint8_t reg, uint8_t *val); bool write_byte(uint8_t reg, uint8_t val); bool write_cmd(uint8_t val);
In order to use this sensor module first of all initialize any MAX32660 I2C interface in master and fast mode (400KHz Bus Speed) then initialize sensor and enable light and proximity sensor according to your requirement.
int error; const sys_cfg_i2c_t sys_i2c_cfg = NULL; /* No system specific configuration needed. */ I2C_Shutdown(I2C_MASTER); if((error = I2C_Init(I2C_MASTER, I2C_FAST_MODE, &sys_i2c_cfg)) != E_NO_ERROR) { printf("Error initializing I2C%d. (Error code = %d)\n", I2C_MASTER_IDX, error); return 1; } if(!APDS9930_init()) // initialize the sensor printf("Init Error\n"); else printf("Init OK\n"); if(!enableLightSensor(false)) // enable the ALS printf("ALS Error\n"); else printf("ALS OK\n"); if(!enableProximitySensor(false)) // enable the proximity sensor printf("PMS Error\n"); else printf("PMS OK\n");
After initializing and enabling sensors you can read sensors and builtin ADC values using this functions.
bool readProximity(uint16_t *val); bool readCh0Light(uint16_t *val); bool readCh1Light(uint16_t *val); bool readAmbientLightLuxF(float *val); bool readAmbientLightLuxUL(unsigned long *val);
Every thing worked perfectly (figure 16).
(At this stage its not power optimized)
Figure 16: Board I2C communication library function used in APDS9930 library with details
Arduino library: https://github.com/Depau/APDS9930
APDS9930 sensor details: https://www.broadcom.com/products/optical-sensors/integrated-ambient-light-proximity-sensors/apds-9930
APDS9930 datasheet: https://docs.broadcom.com/docs/AV02-3190EN
After successfully interfacing the APDS9930 sensor with MAX32660 its time to add a display to bring to view all sensor values or any other info. Here I choose OLED display instead of conventional 16x2 or TFT LCD due to its low power consumption (figure 17). There are some excellent libraries available for Arduino IDE and one of the best Arduino library with graphics support is u8g2. And there is also an c version of this library available to use with other IDE but require some coding to port it to new platform.
Figure 17: Available Display options to choose from for MAX32660
To successfully use the u8g2 with our MCU we need to add two new functions 1) GPIO and Delay callback 2) Hardware I2C Communication and template of these functions is given HERE. I have created a separate header file to define both these function and placed it inside u8g2 folder. After successfully porting to our platform, we can use this library in our program by including our newly created header file and defining a new display variable:
#include "u8g2_arm.h" static u8g2_t u8g2;
And then setup the display by using the correct OLED setup function. For this our OLED the correct setup function is given below and complete list of setup functions can be found HERE.
u8g2_Setup_ssd1306_i2c_128x64_noname_1(u8g2, rotation, u8x8_byte_hw_i2c, uC specific)
After finding the correct setup function we can initialize the display in our code by calling these function after initializing the I2C interface and defining the GPIO and Delay callback + Hardware I2C communication function.
u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, U8G2_R0, u8x8_byte_maxim_hw_i2c, u8x8_gpio_and_delay); u8g2_InitDisplay(&u8g2); u8g2_SetPowerSave(&u8g2, 0);
IMPORTANT! In order to successfully build the code we need to choose at least level 2 (-O2) optimization otherwise it will give an error.
u8g2 Details:
github: https://github.com/olikraus/u8g2
wiki: https://github.com/olikraus/u8g2/wiki
porting to new MCU platform guide: https://github.com/olikraus/u8g2/wiki/Porting-to-new-MCU-platform
reference: https://github.com/olikraus/u8g2/wiki/u8g2reference
All available fonts: https://github.com/olikraus/u8g2/wiki/fntlistall
After successfully interfacing and testing both sensor and display with MAX32660, we can combine the both codes.
Figure 18: Interfacing of APDS9930 and OLED display with MAX32660
DEMO:
NUCLEO-L432KC is an development board with one of ultra low power MCU from ST microelectronics. I found only this development board with almost similar core spec even though its max CPU operating frequency is 80Mhz. If we compare the specifications of both MCUs then MAX32660 is definitely winner in processing power, ultra small size, multiple packages, SRAM size and low cost otherwise ST32L432KC is winner in MCU various capabilities and functionalities. I am rating ST controller higher in LP consumption due to it various LP operating modes and Batch acquisition mode (BAM).
MCU Block Diagrams | |
MAX32660 | STM32L432KC |
---|---|
sources:
https://www.st.com/en/microcontrollers/stm32l432kc.html
https://www.maximintegrated.com/en/products/microcontrollers/MAX32660-EVSYS.html/
Specifications | ||
MCU | MAX32660-EVSYS | NUCLEO-L432KC |
---|---|---|
Core | Arm® 32-bit Cortex®-M4 with FPU Frequency up to 96 MHz MPU | Arm® 32-bit Cortex®-M4 CPU with FPU Adaptive real-time accelerator (ART Accelerator™) allowing 0-wait-state execution from Flash memory Frequency up to 80 MHz MPU 100DMIPS and DSP instructions |
Performance benchmark | -- | 1.25 DMIPS/MHz (Drystone 2.1) 273.55 CoreMark® (3.42 CoreMark/MHz @ 80 MHz) |
Energy benchmark | -- | 176.7 ULPBench® score |
Clock Sources | Internal 96MHz high-frequency internal oscillator (HFIO) Internal 8kHz nano-ring oscillator External 32.768kHz crystal is required for RTC | 32 kHz crystal oscillator for RTC (LSE) Internal 16 MHz factory-trimmed RC (±1%) Internal low-power 32 kHz RC (±5%) Internal multispeed 100 kHz to 48 MHz oscillator, auto-trimmed by LSE (better than ±0.25 % accuracy) Internal 48 MHz with clock recovery 2 PLLs for system clock, USB, audio, ADC |
Memories | 256KB Flash Memory 96KB SRAM, Optionally Preserved in Lowest Power Backup Mode 16KB Instruction Cache | Up to 256 KB single bank Flash, proprietary code readout protection 64 KB of SRAM including 16 KB with hardware parity check Quad SPI memory interface |
Power Management | 1.71 V to 3.6 V power supply Low 1.1V VCORE Supply Voltage in Dual Supply Mode 85μA/MHz Active Executing from Flash 2μA Full Memory Retention Power in Backup Mode at VDD = 1.8V 570nA Ultra-Low Power RTC at VDD = 1.8V Internal LDO Provides Operation from Single Supply | 1.71 V to 3.6 V power supply 84 μA/MHz run mode 1.0 μA Stop 2 mode, 1.28 μA with RTC 280 nA Standby mode with RTC 28 nA Standby mode (2 wakeup pins) 8 nA Shutdown mode (2 wakeup pins) Batch acquisition mode (BAM) 4 μs wakeup from Stop mode |
IO pins | Up to 14 General-Purpose I/O Pins | Up to 26 fast I/Os, most 5 V-tolerant |
Analog Peripherals | -- | 1x 12-bit ADC 5 Msps, up to 16-bit with hardware oversampling, 200 μA/Msps 2x 12-bit DAC output channels, low-power sample and hold 1x operational amplifier with built-in PGA 2x ultra-low-power comparators |
Timers | 5x timers: 3x 32-bit 1x watchdog 1x SysTick timer | 11x timers: 1x 16-bit advanced motor-control 1x 32-bit 2x 16-bit general purpose 2x 16-bit basic 2x low-power 16-bit timers (available in Stop mode) 2x watchdogs 1x SysTick timer |
communication interfaces | 2x SPI Master/Slave 1x I2S Master/Slave 2x UARTs 2x I2C Master/Slave, 3.4Mbps High Speed | USB 2.0 full-speed crystal less solution with LPM and BCD 1x SAI (serial audio interface) 2x I2C FM+(1 Mbit/s), SMBus/PMBus 3x USARTs (ISO 7816, LIN, IrDA, modem) 1x LPUART (Stop 2 wake-up) 2x SPIs (and 1x Quad SPI) CAN (2.0B Active) SWPMI single wire protocol master I/F IRTIM (Infrared interface) |
DMA | 4-channel DMA controller | 14-channel DMA controller |
RTC | RTC with subsecond alarm and calibration | RTC with HW calendar, alarms and calibration |
TRNG | NO | YES |
CRC calculation unit | NO | YES |
Special Function IO | NO | Up to 3 capacitive sensing channels |
Package | 16 WLP (1.6mm x 1.6mm x 0.65mm) 20 TQFN-EP (4mm x 4mm x 0.75mm) 24 TQFN-EP (3mm x 3mm x 0.75mm) | UFQFPN 32 (5mm x 5mm x 0.55mm) |
Operating Temperature | -40°C to +105°C | -40 °C to 85/105/125 °C temperature range |
Operating Modes | ||
Price | ||
Product LinkProduct Link | Product LinkProduct Link |
When it come to dev-boards then for me MAX32660 is better because of its very simple design and separable debug part even though Nucleo board has well known Arduino Nano form factor and almost compatible with it. But the main reason of placing Nucleo board in second place is adding/removing the onboard component to take full advantages of different communication peripherals and inseparable ST-Link part unlike Nucleo64 and 144 boards. And if we talk about the various easy to use IDEs and online support then ST is way ahead of MAXIM especially with Arduino and mBed IDEs support for these particular boards.
{gallery} MAX32660-EVSYS and NUCLEO-L432KC |
---|
IMAGE TITLE: MAX32660-EVSYS V NUCLEO-L432KC - Top View |
IMAGE TITLE: MAX32660-EVSYS V NUCLEO-L432KC - Bottom View |
IMAGE TITLE: MAX32660-EVSYS V NUCLEO-L432KC - Side View |
IMAGE TITLE: MAX32660-EVSYS V NUCLEO-L432KC - Pin-out Diagrams |
Specifications | ||
Board | MAX32660-EVSYS | NUCLEO-L432KC |
---|---|---|
MCU | MAX32660 | STM32-L432KC |
Debugger/Programmer | CMSIS-DAP SWD Debugger Virtual UART Console | ST-LINK/V2-1 Virtual COM port |
Integrated Peripherals | User LED User Push button | User LED |
Board expansion connector | 100mil Pitch Dual Inline Pin Headers Breadboard Compatible | Arduino™ Nano 100mil Pitch Dual Inline Pin Headers Breadboard Compatible |
Power-supply options | MAX-DAP USB VBUS External sources User Selectable 1V8 or 3V3 operation | ST-LINK USB VBUS External sources Fixed 3V3 operation |
IDEs | IAR™, Keil®, GCC-based IDEs | IAR™, Keil®, GCC-based IDEs, Arm® Mbed™, Arduino |
CMSIS Compliant | YES | YES |
Price | ||
$15.96 Product LinkProduct Link | $12.45 Product LinkProduct Link |
sources:
https://www.st.com/en/evaluation-tools/nucleo-l432kc.html
The MAX32660 EVSYS is one of the easy to use ARM development board with MCU clocked at 96Mhz + FPU which make it powerful enough to handle fairly complex tasks. The best thing of this tiny power house is the simplicity where every IO pin is available on 0.1" header. The SDK contains all the necessary configuration, peripherals, communication and BSP files with every bit of required information to start with. One can easily build any project by either modifying the given examples or through CMSIS manager. The only thing that its SDK lack is RTOS support. The easy to understandable board support files make it very easy to learn and use for someone with some knowledge of MCU programming. One of the package of the MAX32660 is really small (16 WLP 1.6mm x 1.6mm) and sound very attractive but its PCB designing and manufacturing will not be cost effective if there is no space constraint while other two (20 and 24 pin TQFN) packages are commonly used packages for ICs with easy to built and assemble PCB.
The only down side of this MCU is no builtin ADC. But the lack of ADC peripherals, unlike other arm ultra power MCU from ST and TI, should not be a big concern for modern day LP application designer because one can easily find any type of sensor or control module with I2C or SPI interface. Nevertheless, its a good and easy to use MCU board with several digital communication interfaces and it can easily be used by the newbies in the ARM world but not in embedded development.
One little request to MAXIM guys, please update the title and image on pin out reference card.
Few suggestion to make this board more user friendly;
Add the Absolute Maximum Ratings and Recommended Operating Conditions of this boards in its datasheet.
Mention the maximum/recommended current capabilities of VDDIO pin (onboard MAX8841 LDO) in MAX32660EVSYS datasheet because it helps the developer to know either he the can power up certain sensor through it during development or not.
Add some sort of silk screen marking around IO pins to make it easy to use without pin-out diagram i.e: square or dot around supply pins etc.
If possible, add a small jumper to measure the MCU current like ST Nucleo boards (figure xx) or anything else because this is an ultra low power MCU board and therefore lots of current measurements will be taken by the users during product development phase.
Figure xx: IDD jumper to measure MCU current consumption
I am simply fall in love with this board and once again thanks to Element14 communicty and MAXIM for organizing this RoadTest.
MAX32660 Datasheet: https://datasheets.maximintegrated.com/en/ds/MAX32660.pdf
MAX32660 EVSYS Datasheet: https://datasheets.maximintegrated.com/en/ds/MAX32660-EVSYS.pdf
MAX32660 User Guide: http://pdfserv.maximintegrated.com/en/an/AN6659.pdf
Top Comments
Thanks Sir