Dfu util stm32 linux

How to load U-Boot with dfu-util

This page explains how to load and start U-Boot with the dfu-util [1] tool over a USB port.

This tool, available on Linux or Windows, supports the DFU standard [2] and can replace STM32CubeProgrammer for the U-Boot load use case.

Contents

1 Overview [ edit ]

To load and execute U-Boot in DDR with the DFU protocol, the dfu-util tools can be used instead of STM32CubeProgrammer.

As the GetPhase is an STMicroelectronics protocol for STM32CubeProgrammer and is not supported by dfu-util , you must follow the steps described in AN5275: USB DFU/USART protocols used in STM32MP1 series bootloaders and provide the binaries in the order expected by the bootloaders:

  1. Download phase 0x1 by ROM code is the FSBL (TF-A BL2 )
  2. DFU detach to request an FSBL start — not required for STM32MP15x lines ROM code
  3. Download phase 0x3 by FSBL is the FIP file including the SSBL image (U-Boot)
  4. DFU detach to request an SSBL start

The FSBL , SSBL and FIP definitions can be found in the Boot chain overview.

The FIP includes the required SSBL = U-Boot , see How to configure TF-A FIP in order to update it with the U-Boot binary.

This feature can be used to debug U-Boot during board bring-up.

2 dfu-util [ edit ]

The help message of dfu-util is:

Usage: dfu-util [options] . -h --help Print this help message -V --version Print the version number -v --verbose Print verbose debug statements -l --list List currently attached DFU capable devices -e --detach Detach currently attached DFU capable devices -E --detach-delay seconds Time to wait before reopening a device after detach -d --device :[,:] Specify Vendor/Product ID(s) of DFU device -p --path Specify path to DFU device -c --cfg Specify the Configuration of DFU device -i --intf Specify the DFU Interface number -S --serial [,] Specify Serial String of DFU device -a --alt Specify the Altsetting of the DFU Interface by name or by number -t --transfer-size Specify the number of bytes per USB Transfer -U --upload Read firmware from device into -Z --upload-size Specify the expected upload size in bytes -D --download Write firmware from into device -R --reset Issue USB Reset signalling once we're finished -s --dfuse-address ST DfuSe mode, specify target address for raw file download or upload. Not applicable for DfuSe file (.dfu) downloads

The minimal dfu-util option used to load U-Boot is:

  • -a/—alt select the alternate to load the requested phase
  • -D/—download Download the requested binary for the selected phase
  • -e/—detach request a DFU DETACH
Читайте также:  Авторизация kerberos в linux

2.1 Identify alternate [ edit ]

You can also use the -l/—list option to check the alternate associated to each phase (see AN5275 for the coding of the alternate name).

For example the result of this command on ROM code with a USB serial boot is:

  • on STM32MP15x lines : the first alternate is alt= 1 for FSB alternate associate to phase 0x1 and the last one is alt = 5 for virtual associate to phase 0xF1
dfu-util -l dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=5, name color: #49B170; font-weight: bold;">virtual /0xF1/1*512Ba", serial="004100323338511634383330" Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=4, name="@Partition4 /0x04/1*16Me", serial="004100323338511634383330" Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=3, name="@Partition3 /0x03/1*16Me", serial="004100323338511634383330" Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=2, name="@Partition2 /0x02/1*1Me", serial="004100323338511634383330" Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=1, name color: #49B170; font-weight: bold;">FSBL /0x01/1*1Me", serial="004100323338511634383330" Found DFU: [0483:df11] ver=0200, devnum=12, cfg=1, intf=0, path="1-5.2", alt=0, name="@Partition0 /0x00/1*256Ke", serial="004100323338511634383330"
  • on STM32MP13x lines : the first alternate is alt= 0 for FSB alternate associate to phase 0x1 and the second is alt = 1 for virtual associate to phase 0xF1
dfu-util -l dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Found DFU: [0483:df11] ver=0200, devnum=6, cfg=1, intf=0, path="1-5.2", alt=1, name color: #49B170; font-weight: bold;">virtual /0xF1/1*512Ba", serial="801480113530510138343532" Found DFU: [0483:df11] ver=0200, devnum=6, cfg=1, intf=0, path="1-5.2", alt=0, name color: #49B170; font-weight: bold;">FSBL/0x01/1*128Ke", serial="801480113530510138343532"

2.2 Select device [ edit ]

In each dfu-util command, the command device can be identified by:

In the previous STM32MP15 example, the device has VID:PID= 0483:df11 and its serial number is 004100323338511634383330 .

In the following sections, you can add the -d /—device and -S /—serial options to select this specific device:

dfu-util -d 0483:df11 -S 004100323338511634383330 .

It is required only when several devices are connected on the host.

3 The U-Boot load sequence [ edit ]

The load sequence is described in #Overview, depending of the alternate (phase = P for alternate A ) and the corresponding commands are:

  1. Download phase P = dfu-util -a A -D [file]
  2. DFU detach = dfu-util -a 0 -e
Information
After a DFU detach done with dfu-util -a 0 -e , you must wait that the next stage is ready, for example by adding some delay in script.

3.1 On STM32MP15x lines [ edit ]

dfu-util -a 1 -D tf-a-usb.stm32 dfu-util -a 3 -D fip.bin dfu-util -a 0 -e 

3.2 On STM32MP13x lines [ edit ]

dfu-util -a 0 -D tf-a-usb.stm32 dfu-util -a 0 -e dfu-util -a 0 -D fip.bin dfu-util -a 0 -e 

4 U-Boot DFU support [ edit ]

After load sequence, U-Boot is running, the boot command is executed, the DFU stack is running and the stm32prog is waiting the FlashLayout file before to reenumerate. you can:

dfu-util -a 0 -D flashlayout.tsv dfu-util -a 0 -e 
  • interrupt the stm32prog command by sending a Ctrl-C on the console or sending an empty flashlayout with 2 DFU detach:
dfu-util -a 0 -e dfu-util -a 0 -e 

4.1 Generate an flashlayout.stm32 file [ edit ]

You can generate the flashlayout.stm32 file from the tsv flashlayout file = flashlayout.tsv with the U-Boot mkimage tool by using the following Linux shell commands:

mkimage -T stm32image -a 0xC0000000 -e 0xC0000000 -d flashlayout.tsv flashlayout.stm32 

4.2 Execute a U-Boot script [ edit ]

You can replace the flashlayout file with a U-Boot script containing a U-Boot image header. This is then executed automatically by U-Boot .

Читайте также:  Linux date unix format

The following example is for a simple script to start U-Boot in dfu mode and then reset:

echo "dfu 0; reset" > script.cmd mkimage -C none -A arm -T script -d script.cmd script.uimg 

Then the complete sequence is:

  • on STM32MP15x lines
dfu-util -a 1 -D tf-a-usb.stm32 dfu-util -a 3 -D fip.bin dfu-util -a 0 -e dfu-util -a 0 -D script.uimg dfu-util -a 0 -e 
  • on STM32MP13x lines
dfu-util -a 0 -D tf-a-usb.stm32 dfu-util -a 0 -e dfu-util -a 0 -D fip.bin dfu-util -a 0 -e dfu-util -a 0 -D script.uimg dfu-util -a 0 -e 

5 GetPhase support with dfu-util [ edit ]

The GetPhase is an STMicroelectronics addition, on top of DFU , not supported by dfu-util, see AN5275: USB DFU/USART protocols used in STM32MP1 series bootloaders for details.

The expected Phase P and the expected DFU detach request are indicated by device in the Get Phase answer, read (= DFU _UPLOAD) in the last alternate, with alternate style=»color: #E6007E; font-weight: bold;»>A , name color: #49B170; font-weight: bold;»>virtual » with phase style=»color: #49B170; font-weight: bold;»>0xF1 with the command:

The format of the received data, the phase.bin file in this example, is:

Byte Name Description
1 Phase Phase P expected by device
2-5 Address 0xFFFFFFFF or load address in embedded RAM
6-9 Offset 0x0
10 NeedDFUDetach Present only if P = 0
1 : DFU detach is requested for a new USB enumeration

This information can be used to dynamically manage the load sequence in script using dfu-util as it is done in STM32CubeProgrammer.

Example of «Get Phase» answer done by STM32MP13x ROM code on alternate 1 :

dfu-util -a 1 -U phase.bin dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Opening DFU capable USB device. ID 0483:df11 Run-time device DFU version 0110 Claiming USB DFU Interface. Setting Alternate Setting #0 . Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 0110 Device returned transfer size 1024 Copying data from DFU device to PC Upload [=========================] 100% 9 bytes Upload done. hexdump phase.bin 0000000 0001 fdfe 002f 0000 0000 0000009

6 References [ edit ]

  1. ↑ dfu-util — Device Firmware Upgrade Utilities — http://dfu-util.sourceforge.net
  2. ↑ USB DFU — Universal Serial Bus Device Class Specification for Device Firmware Upgrade Version 1.1 — https://usb.org/sites/default/files/DFU_1.1.pdf
Читайте также:  Linux определение подключенных устройств

Источник

dfu-util — Device Firmware Upgrade Utilities

dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. DFU is intended to download and upload firmware to/from devices connected over USB. It ranges from small devices like micro-controller boards to mobile phones. Using dfu-util you can download firmware to your DFU-enabled device or upload firmware from it. dfu-util has been tested with the Openmoko Neo1973 and Freerunner and many other devices.

See the manual page for examples of use.

The program dfu-suffix can be used to add, check or remove a DFU firmware file suffix, recommended for safely matching a firmware file and device. The program dfu-prefix can be used with TI LMDFU/Stellaris or NXP LPC file formats.

Supported Devices

  • Openmoko Neo1973
  • Openmoko Freerunner
  • Leaflabs Maple
  • OpenPCD and OpenPICC
  • Qi Hardware ATUSB (use dfu-util 0.7)
  • Osmocom SIMtrace
  • Many devices using the DfuSe DFU extension from ST, for instance:
    • Black Magic Probe
    • DSO nano
    • Spark Core / Particle Photon
    • STM32F2/F3/F4 built-in bootloader
    • Some STR750-based devices, e.g. USB2CAN

    Releases

    Releases of the dfu-util software can be found in the releases folder. The current release is 0.11.

    We offer binaries for Microsoft Windows and some other platforms. dfu-util uses libusb 1.0 to access your device, so on Windows you have to register the device with the WinUSB driver (alternatively libusb-win32 or libusbK), please see the libusb wiki for more details.

    Mac OS X users can also get dfu-util from Homebrew with «brew install dfu-util» or from MacPorts.

    Most Linux distributions ship dfu-util in binary packages for those who do not want to compile dfu-util from source. On Debian, Ubuntu, Fedora and Gentoo you can install it through the normal software package tools. For other distributions (namely OpenSuSe, Mandriva, and CentOS) Holger Freyther was kind enough to provide binary packages through the Open Build Service.

    Development

    Development happens in a GIT repository. Browse it via the web interface or clone it with:

    git clone git://git.code.sf.net/p/dfu-util/dfu-util

    See our build instructions for how to build the source on different platforms.

    License

    This software is licensed under the GPL version 2.

    Contact

    If you have questions about the development or use of dfu-util please subscribe and post to the dfu-util mailing list. Bug reports can be filed directly in the bug tracker.

    People

    dfu-util was originally written by Harald Welte partially based on code from dfu-programmer 0.4 and is maintained by Tormod Volden.

    ©2010-2021 Stefan Schmidt & Tormod Volden — Valid XHTML & CSS

    Источник

Оцените статью
Adblock
detector