Flashing The DVM-V1 Modem

  • The DVM V-1 Modem is a dedicated piece of hardware designed by W3AXL for use with the DVMProject. Flashing the firmware can be performed in various ways. Per the firmware repository.
Some devices can be used on top on a RPi attached via the GPIO port or 

standalone and others are connected via USB. Both variants require different 

handling of compiling and uploading the firmware, examples on flashing devices 

are mostly not included here because the methods to flash vary from device to 

device.

This guide will cover the following methods to enter the bootloader (DFU):

  • From dvmhost Natively
  • Jumping BOOT0 Pins
  • Writing via a STLink v2

Note: A firmware upgrade will not require re-calibration of the modem.

From dvmhost Natively

  1. Power up the DVM-V1 modem and connect it to your host device. This guide will be using a Raspberry Pi 5 and the modem will be attached via USB cable (/dev/ttyUSB0).

  2. Ensure dvmhost is not running. Stop any and all services that may be configured. You can verify that there are no dvmhost processes active via ps aux | grep dvmhost.

  3. Download the latest firmware from the dvmfirmware repository. As of this writing the latest firmware is 2026-05-13:dvm-firmware_f4-dvmv1.bin

  4. Ensure that stm32flash is installed. The command below will install the package on a Debian based Linux distribution.

    sudo apt install stm32flash -y
    
  5. You can enter the bootloader menu in one of two ways: via the calibration menu or directly via command.

  6. To enter the bootloader menu via the calibration menu perform the following steps:

  7. Execute the following:

    ./dvmhost -c /path/to/config.yml --cal
    
  8. Press ! during the calibration loading prompt. You will see the following output (truncated):

    I: 
                                            .         .           
    8 888888888o.   `8.`888b           ,8' ,8.       ,8.          
    8 8888    `^888. `8.`888b         ,8' ,888.     ,888.         
    8 8888        `88.`8.`888b       ,8' .`8888.   .`8888.        
    8 8888         `88 `8.`888b     ,8' ,8.`8888. ,8.`8888.       
    8 8888          88  `8.`888b   ,8' ,8'8.`8888,8^8.`8888.      
    8 8888          88   `8.`888b ,8' ,8' `8.`8888' `8.`8888.     
    8 8888         ,88    `8.`888b8' ,8'   `8.`88'   `8.`8888.    
    8 8888        ,88'     `8.`888' ,8'     `8.`'     `8.`8888.   
    8 8888    ,o88P'        `8.`8' ,8'       `8        `8.`8888.  
    8 888888888P'            `8.` ,8'         `         `8.`8888.
    
    Digital Voice Modem (DVM) Host 05.04A (R05A04 d40b8332) (built Mar 6 2026 17:31:48 DEBUG_FACTORY_LABTOOL)
    Copyright (c) 2017-2026 Bryan Biedenkapp, N2PLL and DVMProject (https://github.com/dvmproject) Authors.
    Portions Copyright (c) 2015-2021 by Jonathan Naylor, G4KLX and others
    >> Modem Calibration
    
    --- OUTPUT OMITTED ---
    
    I: (CAL) Rebooting modem into ST bootloader mode...
    I: (MODEM) Closing the modem
    
  9. Enter the following command to start the flashing process.

    sudo stm32flash -v -w /home/pi/dvm-firmware_f4-dvmv1.bin -R /dev/ttyUSB0
    
  10. You will see the following output.

    stm32flash 0.7
    http://stm32flash.sourceforge.net/
    
    Using Parser : Raw BINARY
    Size         : 63128
    Interface serial_posix: 57600 8E1
    Version      : 0x31
    Option 1     : 0x00
    Option 2     : 0x00
    Device ID    : 0x0421 (STM32F446xx)
    - RAM        : Up to 128KiB  (12288b reserved by bootloader)
    - Flash      : Up to 512KiB (size first sector: 1x16384)
    - Option RAM : 16b
    - System RAM : 30KiB
    
    Write to memory
    Erasing memory
    Wrote and verified address 0x0800f698 (100.00%) Done.
    
    Resetting device...
    Reset done.
    
  11. The flashing process is complete. You may now restart the dvmhost service.

  12. To enter the bootloader menu directly via command perform the following steps:

    1. Execute the following:

      sudo ./dvmhost -c /path/to/config.yml --boot

    2. Perform the steps as outlined in step 9.

    3. The flashing process is complete. You may now restart the dvmhost service.

Jumping BOOT0 Pins

  • Coming Soon™
  • Coming Soon™ (Lower priority as I do not own a STLink v2 at the moment.)