|
@@ -0,0 +1,100 @@
|
|
|
+-------------
|
|
|
+SDP in U-Boot
|
|
|
+-------------
|
|
|
+
|
|
|
+SDP stands for serial download protocol. It is the protocol used in NXP's
|
|
|
+i.MX SoCs ROM Serial Downloader and provides means to download a program
|
|
|
+image to the chip over USB and UART serial connection.
|
|
|
+
|
|
|
+The implementation in U-Boot uses the USB Downloader Gadget (g_dnl) to
|
|
|
+provide a SDP implementation over USB. This allows to download program
|
|
|
+images to the target in SPL/U-Boot using the same protocol/tooling the
|
|
|
+SoC's recovery mechanism is using.
|
|
|
+
|
|
|
+The SDP protocol over USB is a USB HID class protocol. USB HID class
|
|
|
+protocols allow to access a USB device without OS specific drivers. The
|
|
|
+U-Boot implementation has primarly been tested using the open source
|
|
|
+imx_loader utility (https://github.com/toradex/imx_loader).
|
|
|
+
|
|
|
+The host side utilities are typically capable to interpret the i.MX
|
|
|
+specific image header (see doc/README.imximage). There are extensions
|
|
|
+for imx_loader's imx_usb utility which allow to interpret the U-Boot
|
|
|
+specific legacy image format (see mkimage(1)). Also the U-Boot side
|
|
|
+support beside the i.MX specific header the U-Boot legacy header.
|
|
|
+
|
|
|
+Usage
|
|
|
+-----
|
|
|
+
|
|
|
+This implementation can be started in U-Boot using the sdp command
|
|
|
+(CONFIG_CMD_USB_SDP) or in SPL if Serial Downloader boot mode has been
|
|
|
+detected (CONFIG_SPL_USB_SDP_SUPPORT).
|
|
|
+
|
|
|
+A typical use case is downloading full U-Boot after SPL has been
|
|
|
+downloaded through the boot ROM's Serial Downloader. Using boot mode
|
|
|
+detection the SPL will run the SDP implementation automatically in
|
|
|
+this case:
|
|
|
+
|
|
|
+ # imx_usb SPL
|
|
|
+
|
|
|
+Targets Serial Console:
|
|
|
+
|
|
|
+ Trying to boot from USB SDP
|
|
|
+ SDP: initialize...
|
|
|
+ SDP: handle requests...
|
|
|
+
|
|
|
+At this point the SPL reenumerated as a new HID device and emulating
|
|
|
+the boot ROM's SDP protocol. The USB VID/PID will depend on standard
|
|
|
+U-Boot configurations CONFIG_G_DNL_(VENDOR|PRODUCT)_NUM. Make sure
|
|
|
+imx_usb is aware of the USB VID/PID for your device by adding a
|
|
|
+configuration entry in imx_usb.conf:
|
|
|
+
|
|
|
+ 0x1b67:0x4fff, mx6_usb_sdp_spl.conf
|
|
|
+
|
|
|
+And the device specific configuration file mx6_usb_sdp_spl.conf:
|
|
|
+
|
|
|
+ mx6_spl_sdp
|
|
|
+ hid,uboot_header,1024,0x910000,0x10000000,1G,0x00900000,0x40000
|
|
|
+
|
|
|
+This allows to download the regular U-Boot with legacy image headers
|
|
|
+(u-boot.img) using a second invocation of imx_usb:
|
|
|
+
|
|
|
+ # imx_usb u-boot.img
|
|
|
+
|
|
|
+Furthermore, when U-Boot is running the sdp command can be used to
|
|
|
+download and run scripts:
|
|
|
+
|
|
|
+ # imx_usb script.scr
|
|
|
+
|
|
|
+imx_usb configuration files can be also used to download multiple
|
|
|
+files and of arbitrary types, e.g.
|
|
|
+
|
|
|
+ mx6_usb_sdp_uboot
|
|
|
+ hid,1024,0x10000000,1G,0x00907000,0x31000
|
|
|
+ full.itb:load 0x12100000
|
|
|
+ boot.scr:load 0x12000000,jump 0x12000000
|
|
|
+
|
|
|
+There is also a batch mode which allows imx_usb to handle multiple
|
|
|
+consecutive reenumerations by adding multiple VID/PID specifications
|
|
|
+in imx_usb.conf:
|
|
|
+
|
|
|
+ 0x15a2:0x0061, mx6_usb_rom.conf, 0x1b67:0x4fff, mx6_usb_sdp_spl.conf
|
|
|
+
|
|
|
+In this mode the file to download (imx_usb job) needs to be specified
|
|
|
+in the configuration files.
|
|
|
+
|
|
|
+mx6_usb_rom.conf:
|
|
|
+
|
|
|
+ mx6_qsb
|
|
|
+ hid,1024,0x910000,0x10000000,1G,0x00900000,0x40000
|
|
|
+ SPL:jump header2
|
|
|
+
|
|
|
+mx6_usb_sdp_spl.conf:
|
|
|
+
|
|
|
+ mx6_spl_sdp
|
|
|
+ hid,uboot_header,1024,0x10000000,1G,0x00907000,0x31000
|
|
|
+ u-boot.img:jump header2
|
|
|
+
|
|
|
+With that SPL and U-Boot can be downloaded with a single invocation
|
|
|
+of imx_usb without arguments:
|
|
|
+
|
|
|
+ # imx_usb
|