Smart Power 3 – A $45 smart power analysis tool for embedded systems developers

Smart Power 3

Hardkernel has launched a number of popular Arm SBC’s with the ODROID family over the years, but the Smart Power 3 is a different type of product, as the ESP32-based smart power meter can help embedded systems engineers optimize their hardware and software power consumption and/or check for spurious power peaks during boot up or shutdowns. In the past, we’ve reviewed relatively expansive tools like Qoitech Otii Arc or gone the DIY route,  but at $45, Hardkernel offers a power monitoring solution that’s both inexpensive and easy to use, albeit with fewer features than Qoitech’s device. Smart Power 3 specifications: MCU – ESP32 dual-core microcontroller via ESP32-WROOM-32E module Output Channels – 2x output channels (Max 50W + 50W) via 2x 4mm banana jacks each Output Voltage – 3V DC to input voltage – 1V Output Current – 3A max per channel Measurement Voltage, Current, Power Maximum sampling rate: 200Hz (5msec […]

Getting Started with the Yocto Linux BSP for Polarfire SoC FPGA Icicle Kit

Getting Started Guide PolarFire SoC FPGA Icicle Kit

Last month I received Microchip PolarFire SoC FPGA Icicle development kit that features PolarFire SoC FPGA with a Penta–core 64-bit RISC-V CPU subsystem and an FPGA with 254K LE, and booted it into the pre-installed Linux operating systems based on OpenEmbedded. Today, I’ll show how to get started with the Yocto BSP and run the EEMBC CoreMark benchmark, and I’ll check out the FPGA with Libero SoC Design Suite in a couple of weeks. Operating Systems supported by PolarFire SoC FPGA My initial idea was to focus this part of the review on Linux on RISC-V status, checking some system information, running some benchmarks (e.g. SBC-Bench), compiling the Linux kernel, and installing services like a LEMP stack (Linux, Nginx (pronounced Engine-X), MySQL, PHP) which could be used for WordPress hosting for instance. But then I looked at the operating systems supported with Microchip PolarFire SoC FPGA. There’s a Yocto Linux […]

Heatshrink – An ultra-lightweight compression library for embedded systems

Heatshrink

When I wrote about Bangle.js 2 JavaScript smartwatch yesterday, I noticed they used “Heatshrink compression” in ESPruino firmware.  I can’t remember ever reading about Heatshrink before, and indeed there are no results while searching on CNX Software. Heatshrink is an open-source data compression library designed for resources-constrained embedded systems that works with as little as 50 bytes of RAM. That’s impressive, so let’s investigate. The library is written in C language and was released about 8 years ago on Github with the following key features: Low memory usage – As low as 50 bytes with specific parameters, and usually under 300 bytes are needed. Incremental, bounded CPU use – Input data is processed in tiny bites Static or dynamic memory allocation Released under an ISC license which allows you to use the library freely, even in commercial products. The internal workings of the library are explained as follows: Heatshrink is […]

Customize GStreamer build with only the features needed for your application

Gstreamer customize

Thanks to a partnership between Collabora and Huawei is now possible to build Gstreamer with just the features required for a specific application, reducing the binary size for space-constrained embedded systems. Gstreamer is a very popular open-source multimedia framework used in a wide variety of projects and products, and with an impressive number of features spread over 30 libraries and more than 1600 elements in 230 plugins. This is not a problem on desktop PC and most smartphones, but the size of the binary may be too large for some systems, and until recently it was no easy way to customize GStreamer build for a specific application. But Collabora changed the code to allow gst-build to generate a minimal GStreamer build. The company built upon a new feature from GStreamer 1.18, released in September 2020, that makes it possible to build all of GStreamer into a single shared library named […]

ArduinoShrink library slashes code size, boosts speed of Arduino AVR firmware

ArduinoShrink

Arduino AVR Core is supposed to be already efficient, as the resulting code will run on AVR ATmega168 and ATmega328 MCUs with just 16 to 32KB of internal flash storage and 8 to 16 MHz clock speeds. But Nerd Ralph felt there was space for improvement as for instance the Blink sample takes 924 bytes of flash storage when compiled for the Arduino Uno.  So he developed ArduinoShrink library with the same functions as Arduino AVR Core but enabling smaller and faster firmware files. The result is pretty impressive as we can see from the screenshot above with the Blink sample now taking just 196 bytes or an almost 80% reduction in size. So how was this feat achieved exactly? Ralph explains it in details in a blog post, but in a nutshell, the following main two steps were taken: Writing modular, self-contained code instead of providing a single static […]

Android 12 developer preview released – What’s New?

Android 12 developer preview

Google releases a new version of Android every year, and the company is now usually releasing a developer preview in February to allow feedback and testing from app developers. So here we are with the Android 12 developer preview having just been released by Google with changes ranging from trust and safety to media transcoding to support for AVIF image format. Android 12 highlights: Performance Improved Binder IPC calls – Google engineers have had a look at latency and workload distribution, and made optimizations that reduce the median experience. This has yielded roughly a 2x performance increase on Binder calls overall, and up to a 47x improvement in refContentProvider(), 15x in releaseWakeLock(), and 7.9x in JobScheduler.schedule(). Foreground service optimizations – To ensure a better experience for users, foreground service starts from the background will be blocked for apps that are targeting the new platform. Android 12 will also delay the […]

JPEGDEC is a Faster JPEG Arduino Library Designed for 32-bit MCUs

In order to ensure software compatibility, Arduino libraries are supposed to work on various types of hardware from 8-bit microcontrollers with a limited amount of memory to more powerful 32-bit chips like STM32 Arm Cortex-M MCU or ESP32 dual-core Tensilica WiSoC that can access a larger amount of RAM. This is all good, but in some cases, this may affect performance. Larry Bank noticed this when looking for a JPEG viewers for Arduino and only found ones which sacrificed speed to work on MCUs with very little RAM. So he started to work on JPEDDEC JPEG Arduino library optimized for speed and compatible with any MCU with at least 20K of RAM. Optimizations go beyond just loading more data into memory, as Larry explains in a blog post, the library also performs the removal of stuffed bytes, optimize the Huffman decode and DCT parts, and more. Some of the key […]

Perfetto Profiler Now Supports Mali GPU Hardware Counters via Panfrost

Perfetto Mali GPU Profiling

Perfetto is an open-source system profiler, app tracer, and trace analyzer for Linux, Android & Chrome platforms, and user-space apps. The program can already visualize CPU and memory usage, as well as power consumption.  GPU support is more limited with the program only capable of sampling the GPU frequency when the driver outputs that information via ftrace. When Perfetto is also extendable thanks to a Tracing C++ SDK that “allows userspace applications to emit trace events and add more app-specific context to a Perfetto trace”. Collabora made use of the tracing SDK to add support for Mali Midgard GPU performance profiling in gfx-pps project using the Mali GPU hardware counters exposed via Panfrost open-source Mali GPU driver. After following the installation instructions, you’ll be able to run the following executables for tracing and profiling: tracedtracing service. traced_probes OS probes service. perfetto command-line tool for recording traces. producer-gpuproviding the Panfrost data […]

EDATEC Raspberry Pi 5 fanless case