A manufacturer who wants to sell an electronic device in the European Economic Area is responsible for affirming the device’s compliance with the relevant EU legislation. The manufacturer puts the so-called “CE marking” on the device to declare compliance.

The “CE marking”

Interestingly, there’s no such thing as a “CE certification”. Instead, it’s the responsibility of the manufacturer (or the importer) to ensure that the device meets EU health, safety and environmental standards.

In this blog post, I will use an example (a digital video camera) to show the necessary steps before one can put the CE marking on an electronic device.


One of our projects uses a Xilinx Artix-7 FPGA. At design time, we decided to use the XC7A35T-2CSG324I, the industrial version of the XC7A35T at speed grade 2. At that time, this chip was available in large quantities from major suppliers.

Since a week or so, the project is ready for production. We asked two companies for a quote to build the boards. Both came back with the information that the FPGA is currently not available and won’t be available until October this year.

I started to look for alternatives and decided to use the pin compatible low-power version XC7A35T-L1CSG324I…

Many hardware designs contain an FPGA and a separate microcontroller. In our case of a camera design, a Xilinx Artix-7 FPGA is responsible for configuring and reading an image sensor and processing the image while the microcontroller, a Cypress FX3, provides the USB3 connectivity and application functionality.

USB3 video camera module prototype

This post discusses a variant with a single shared flash memory chip for microcontroller firmware and FPGA configuration data where the FPGA reads the bitstream in “Master SPI” mode.


The obvious solution for storing the microprocessor firmware and the FPGA bitstream is to use two separate flash memory chips. One flash chip is…

In a recent customer project, our task was to prototype a remote control for a BLE device. The remote control should have two buttons to send a small number of commands over BLE to a host device. It should be able to run a couple of years on a small button cell.

Our initial idea was to search for a BLE controller with very low power consumption in sleep mode. We did a comparison of various controllers such as the NXP QN908x with 1µA current consumption in deep-sleep and the onsemi RSL10 which can retain the RAM content with only…

The nRF52 series of Bluetooth SoC by Nordic Semiconductor combine a powerful ARM Cortex CPU with modern Bluetooth and BLE connectivity.

Nordic provides an extensive SDK and sample code for updating the nRF52 firmware from various sources. One option is to use a PC with a serial connection and a tool called nrfutil. With nrfutil, you specify a zip file with the new firmware and a serial interface and the tool — in cooperation with the bootloader on the nRF52 — performs the actual firmware update.

Classic way of updating the firmware with nrfutil (left side) vs. alternative update mechanism from second MCU (right side)

In a recent customer project, the nRF52 was connected to a second microcontroller which…

As a side project of our DVTI camera project, we’ve built a simple EXTA based on a cheap video wall LED panel with 32 by 64 LEDs. At ESOP 2019, a couple of people have asked how this EXTA works, so we’ve decided to put this information on the web.

On the LED panel, you see a faint red border, centered around 20 by 50 pixels which compose the main are of the EXTA. Two lines below the bottom border you see a single green LED. …

In the previous part, we’ve started with the implementation of the CPU and added a first couple of instructions for branching. This time, we’ll add an ALU and a register file so that the CPU can actually perform a few useful calculations.

In the excel sheet with the instructions sorted by opcode, we find a group of instructions which are perfect candidates for our ALU and which operate on 2 registers, Rr and Rd, addressed by 5 bits (0…31):

In the first part, I’ve explained the “what” and “why” of this endeavor. Progress was slow during the past few months, not only because we had many other things going on, but also because the Vivado project had grown to a size where it took about 40 minutes from the start of a synthesis run to completing the bitstream generation for the FPGA.

A few weeks ago, I decided to change the approach. Instead of working on the full implementation, I split the project into smaller pieces. First, I recorded the output of the AD9364 for a couple of BLE…

As promised in part 2, we’re going to start with the implementation in this part of the series.

CtrlPC revisited

However, before we start, I’d like to re-visit the CtrlPC module discussed in the previous part. CtrlPC is responsible for providing the input address to the program memory for fetching instructions. I noticed two issues with the idea presented in part 2:

  • First, the CPSE instruction comes with a subtle complexity that I didn’t initially notice. The CPSE (compare-skip-if-equal) instruction compares two registers with each other, and if they are equal, skips the next instruction. The nasty thing is that “the next…

In part 1, I’ve presented the main components of the CPU, the control unit and the datapath with some first thoughts on how they may look like for an AVR core and the AVR instruction set. We’ve also seen the busing strategy options and their impact on the size and performance of the CPU to build.

Since then, I’ve had a closer look at the AVR instruction set to identify opcodes with unique register transfer sequences. …

Andreas Schweizer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store