Flashing a DPS5005 With OpenDPS


October 7, 2018

flash opendps



The DPS5005 is a cheap adjustable power module, capable of outputting up to 5A at 50V. Its small size, wide input range and high output wattage make it a very versatile product.

The achilles heel of this unit, and the other units in the DPS range, is it’s UI. The amount of information squashed onto the small screen is difficult to comprehend, not helped by the hideous colour scheme.

Luckily, Johan Kanflo has created replacement firmware called OpenDPS, the goal of which is to have the same functionality, a less cluttered user interface and be controllable remotely via wifi or a serial port. Johan has posted a great write-up, detailing the design of OpenDPS, and how he managed to hack the DPS module, which is worth a read.

His website also includes a guide which guides you through the install process. Having recently acquired a DPS5005, I decided to give it a go.

Connecting the Module

To flash the board, you will need an STLink USB programmer. Clones can be cheaply obtained on eBay or Aliexpress. You will also need some wire to connect the programmer, with female 2.54mm female pins on one end.

The first step is to take the board out of it’s original case. This will give you access to the points on the board needed to flash the firmware. My board is the slightly newer variety, with the smaller 1.25mm SWO pins.

5 of these pins need to be connected to the STLink. The pinout of the DPS module is shown in the image below.

The fine pitch of the pins does make it tricky to solder wires to these points. If you are having trouble connecting to these points, it may be easier to solder wires to a fine-pitch pin header, which should be easier to solder to the board. The pinout of the STLink is indicated on the case – simply match each pin on the DPS to the corresponding pin on the STLink.

You will also need to provide a source of power to the DPS, through the green screw terminals. I used an old ATX power supply connected to a breakout board, to provide an input of 5V.

The last step is to plug the STLink into the device you are using as a programmer. In my case, I am using a Raspberry Pi.

opendps connection
DPS5005 connected to an STLink programmer, which itself is plugged in to a Raspberry Pi

Building OpenOCD and OpenDPS

In order to flash OpenDPS, you will first need to install OpenOCD. OpenOCD is used to communicate with the ARM processor on the STLink programmer. You will also need to install the ARM GCC toolchain onto the device you are using to program the DPS.

The following steps to install OpenOCD should work on any Linux-based platform. There are also a few extra steps which are required when using a Raspberry Pi.

To grab the latest version of OpenOCD, and run the bootstrapper, run the following commands:

git clone http://openocd.zylin.com/openocd
cd openocd-code

If you are using a Raspberry Pi, run:

./configure --enable-sysfsgpio --enable-bcm2835gpio

This allows OpenOCD to use the built-in hardware GPIO support on the Pi. Otherwise, run:

./configure --enable-sysfsgpio

This will use the standard Python GPIO library. This has decent compatibility over a wide range of embedded devices. Once this is complete, run:

make && make install

Assuming this completes with no errors, OpenOCD is now installed on the system.

Before building OpenDPS, make sure you have the ARM GCC toolchain installed on your system. If you are using an ARM based board, such as the Raspberry Pi, this will already be installed. This is needed as the DPS5005 uses an STM32 ARM CPU.

Next, run:

git clone --recursive https://github.com/kanflo/opendps.git
cd opendps
make -C libopencm3
make -C opendps
make -C dpsboot

OpenDPS is now compiled, and ready to be installed.

Flashing OpenDPS

Before you can flash OpenDPS, the software currently installed needs to be wiped. To do this, run:

cd openocd/scripts
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

If the connection is successful, you will see an output like the one below, ending in Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints.

terminal connection
Output of a successful connection

In another terminal, run:

telnet localhost 4444
reset halt
flash erase_address unlock 0x08000000 0x10000

This command will open telnet, and wipe the flash. Except the first time you run it, it probably wont…

wipe error
The first time you run the erase, you will get an error

Power cycle the DPS5005, and run the above sequence again. This time, you should see erased address 0x08000000 (length 65536), which means the wipe was successful.

To flash the OpenDPS app and bootloader, run:

make -C opendps flash
make -C dpsboot flash
Flashing the OpenDPS app

Once flashing is complete, the DPS will reboot.

You can now put the module back into its housing. I have chosen to keep the wires attached, to flash updates in the future.

You can find more information about OpenDPS here. This includes the original installation guide, a guide to its controls, and information about its features.

If you like what we do, consider supporting us on Ko-fi