uboot/doc/README.dfutftp
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0+
   2#
   3#  Copyright (C) 2015
   4#
   5#  Lukasz Majewski <l.majewski@majess.pl>
   6
   7Device Firmware Upgrade (DFU) - extension to use TFTP
   8=====================================================
   9
  10Why?
  11----
  12
  13* Update TFTP (CONFIG_UPDATE_TFTP) only supports writing
  14code to NAND memory via TFTP.
  15* DFU supports writing data to the variety of mediums (NAND,
  16eMMC, SD, partitions, RAM, etc) via USB.
  17
  18Combination of both solves their shortcomings!
  19
  20
  21Overview
  22--------
  23
  24This document briefly describes how to use DFU for
  25upgrading firmware (e.g. kernel, u-boot, rootfs, etc.)
  26via TFTP protocol.
  27
  28By using Ethernet (TFTP protocol to be precise) it is
  29possible to overcome the major problem of USB based DFU -
  30the relatively low transfer speed for large files.
  31This was caused by DFU standard, which imposed utilization
  32of only EP0 for transfer. By using Ethernet we can circumvent
  33this shortcoming.
  34
  35Beagle Bone Black rev. C (BBB) powered by TI's am335x CPU has
  36been used as a demo board.
  37
  38To utilize this feature, one needs to first enable support
  39for USB based DFU (CONFIG_DFU_*) and DFU TFTP update
  40(CONFIG_DFU_TFTP) described in ./doc/README.update.
  41
  42The "dfu" command has been extended to support transfer via TFTP - one
  43needs to type for example "dfu tftp 0 mmc 0"
  44
  45As of this writing (SHA1:8d77576371381ade83de475bb639949b44941e8c v2015.10-rc2)
  46the update.c code is not enabled (CONFIG_UPDATE_TFTP) by any board in the
  47contemporary u-boot tree.
  48
  49
  50Environment variables
  51---------------------
  52
  53The "dfu tftp" command can be used in the "preboot" environment variable
  54(when it is enabled by defining CONFIG_PREBOOT).
  55This is the preferable way of using this command in the early boot stage
  56as opposed to legacy update_tftp() function invocation.
  57
  58
  59Beagle Bone Black (BBB) setup
  60-----------------------------
  61
  621. Setup tftp env variables:
  63   *  select desired eth device - 'ethact' variable ["ethact=cpsw"]
  64      (use "bdinfo" to check current setting)
  65   *  setup "serverip" and "ipaddr" variables
  66   *  set "loadaddr" as a fixed buffer where incoming data is placed
  67      ["loadaddr=0x81000000"]
  68
  69#########
  70# BONUS #
  71#########
  72It is possible to use USB interface to emulate ETH connection by setting
  73"ethact=usb_ether". In this way one can have very fast DFU transfer via USB.
  74
  75For 33MiB test image the transfer rate was 1MiB/s for ETH over USB and 200KiB/s
  76for pure DFU USB transfer.
  77
  782. Setup update_tftp variables:
  79   *  set "updatefile" - the file name to be downloaded via TFTP (stored on
  80      the HOST at e.g. /srv/tftp)
  81
  823. If required, to update firmware on boot, put the "dfu tftp 0 mmc 0" in the
  83    "preboot" env variable. Otherwise use this command from u-boot prompt.
  84
  854. Inspect "dfu" specific variables:
  86   * "dfu_alt_info" - information about available DFU entities
  87   * "dfu_bufsiz"   - variable to set buffer size [in bytes] - when it is not
  88                    possible to set large enough default buffer (8 MiB @ BBB)
  89
  90
  91FIT image format for download
  92-----------------------------
  93
  94To create FIT image for download one should follow the update tftp README file
  95(./doc/README.update) with one notable difference:
  96
  97The original snippet of ./doc/uImage.FIT/update_uboot.its
  98
  99        images {
 100                update@1 {
 101                        description = "U-Boot binary";
 102
 103should look like
 104
 105        images {
 106                u-boot.bin@1 {
 107                        description = "U-Boot binary";
 108
 109where "u-boot.bin" is the DFU entity name to be stored.
 110
 111
 112To do
 113-----
 114
 115* Extend dfu-util command to support TFTP based transfers
 116* Upload support (via TFTP)
 117