1------------- 2SDP in U-Boot 3------------- 4 5SDP stands for serial download protocol. It is the protocol used in NXP's 6i.MX SoCs ROM Serial Downloader and provides means to download a program 7image to the chip over USB and UART serial connection. 8 9The implementation in U-Boot uses the USB Downloader Gadget (g_dnl) to 10provide a SDP implementation over USB. This allows to download program 11images to the target in SPL/U-Boot using the same protocol/tooling the 12SoC's recovery mechanism is using. 13 14The SDP protocol over USB is a USB HID class protocol. USB HID class 15protocols allow to access a USB device without OS specific drivers. The 16U-Boot implementation has primarly been tested using the open source 17imx_loader utility (https://github.com/boundarydevices/imx_usb_loader). 18 19imx_usb_loader is a very nice tool by Boundary Devices that allow to 20install U-Boot without a JTAG debugger, using the USB boot mode as 21described in the manual. It is a replacement for Freescale's 22MFGTOOLS. 23 24The host side utilities are typically capable to interpret the i.MX 25specific image header (see doc/README.imximage). There are extensions 26for imx_loader's imx_usb utility which allow to interpret the U-Boot 27specific legacy image format (see mkimage(1)). Also the U-Boot side 28support beside the i.MX specific header the U-Boot legacy header. 29 301. Using imx_usb_loader for first install with SPL 31-------------------------------------------------- 32 33This implementation can be started in U-Boot using the sdp command 34(CONFIG_CMD_USB_SDP) or in SPL if Serial Downloader boot mode has been 35detected (CONFIG_SPL_USB_SDP_SUPPORT). 36 37A typical use case is downloading full U-Boot after SPL has been 38downloaded through the boot ROM's Serial Downloader. Using boot mode 39detection the SPL will run the SDP implementation automatically in 40this case: 41 42 # imx_usb SPL 43 44Targets Serial Console: 45 46 Trying to boot from USB SDP 47 SDP: initialize... 48 SDP: handle requests... 49 50At this point the SPL reenumerated as a new HID device and emulating 51the boot ROM's SDP protocol. The USB VID/PID will depend on standard 52U-Boot configurations CONFIG_G_DNL_(VENDOR|PRODUCT)_NUM. Make sure 53imx_usb is aware of the USB VID/PID for your device by adding a 54configuration entry in imx_usb.conf: 55 56 0x1b67:0x4fff, mx6_usb_sdp_spl.conf 57 58And the device specific configuration file mx6_usb_sdp_spl.conf: 59 60 mx6_spl_sdp 61 hid,uboot_header,1024,0x910000,0x10000000,1G,0x00900000,0x40000 62 63This allows to download the regular U-Boot with legacy image headers 64(u-boot.img) using a second invocation of imx_usb: 65 66 # imx_usb u-boot.img 67 68Furthermore, when U-Boot is running the sdp command can be used to 69download and run scripts: 70 71 # imx_usb script.scr 72 73imx_usb configuration files can be also used to download multiple 74files and of arbitrary types, e.g. 75 76 mx6_usb_sdp_uboot 77 hid,1024,0x10000000,1G,0x00907000,0x31000 78 full.itb:load 0x12100000 79 boot.scr:load 0x12000000,jump 0x12000000 80 81There is also a batch mode which allows imx_usb to handle multiple 82consecutive reenumerations by adding multiple VID/PID specifications 83in imx_usb.conf: 84 85 0x15a2:0x0061, mx6_usb_rom.conf, 0x1b67:0x4fff, mx6_usb_sdp_spl.conf 86 87In this mode the file to download (imx_usb job) needs to be specified 88in the configuration files. 89 90mx6_usb_rom.conf: 91 92 mx6_qsb 93 hid,1024,0x910000,0x10000000,1G,0x00900000,0x40000 94 SPL:jump header2 95 96mx6_usb_sdp_spl.conf: 97 98 mx6_spl_sdp 99 hid,uboot_header,1024,0x10000000,1G,0x00907000,0x31000 100 u-boot.img:jump header2 101 102With that SPL and U-Boot can be downloaded with a single invocation 103of imx_usb without arguments: 104 105 # imx_usb 106 1072. Using imx_usb_loader non-SPL images 108--------------------------------------- 109 110Booting in USB mode, the i.MX6 announces itself to the Linux Host as: 111 112Bus 001 Device 111: ID 15a2:0061 Freescale Semiconductor, Inc. 113 114imx_usb_loader is able to download a single file (u-boot.imx) 115to the board. For boards without SPL support, it is enough to 116issue the command: 117 118 sudo ../imx_usb_loader/imx_usb -v u-boot.imx 119