blob: 178ea688a7cb5c509dfe2454994e31d105399b21 [file] [log] [blame]
Stefan Agner86ef44f2017-08-16 11:00:55 -07001-------------
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
Stefan Agner36e37672017-10-03 16:43:26 +020017imx_loader utility (https://github.com/boundarydevices/imx_usb_loader).
Stefan Agner86ef44f2017-08-16 11:00:55 -070018
19The host side utilities are typically capable to interpret the i.MX
20specific image header (see doc/README.imximage). There are extensions
21for imx_loader's imx_usb utility which allow to interpret the U-Boot
22specific legacy image format (see mkimage(1)). Also the U-Boot side
23support beside the i.MX specific header the U-Boot legacy header.
24
25Usage
26-----
27
28This implementation can be started in U-Boot using the sdp command
29(CONFIG_CMD_USB_SDP) or in SPL if Serial Downloader boot mode has been
30detected (CONFIG_SPL_USB_SDP_SUPPORT).
31
32A typical use case is downloading full U-Boot after SPL has been
33downloaded through the boot ROM's Serial Downloader. Using boot mode
34detection the SPL will run the SDP implementation automatically in
35this case:
36
37 # imx_usb SPL
38
39Targets Serial Console:
40
41 Trying to boot from USB SDP
42 SDP: initialize...
43 SDP: handle requests...
44
45At this point the SPL reenumerated as a new HID device and emulating
46the boot ROM's SDP protocol. The USB VID/PID will depend on standard
47U-Boot configurations CONFIG_G_DNL_(VENDOR|PRODUCT)_NUM. Make sure
48imx_usb is aware of the USB VID/PID for your device by adding a
49configuration entry in imx_usb.conf:
50
51 0x1b67:0x4fff, mx6_usb_sdp_spl.conf
52
53And the device specific configuration file mx6_usb_sdp_spl.conf:
54
55 mx6_spl_sdp
56 hid,uboot_header,1024,0x910000,0x10000000,1G,0x00900000,0x40000
57
58This allows to download the regular U-Boot with legacy image headers
59(u-boot.img) using a second invocation of imx_usb:
60
61 # imx_usb u-boot.img
62
63Furthermore, when U-Boot is running the sdp command can be used to
64download and run scripts:
65
66 # imx_usb script.scr
67
68imx_usb configuration files can be also used to download multiple
69files and of arbitrary types, e.g.
70
71 mx6_usb_sdp_uboot
72 hid,1024,0x10000000,1G,0x00907000,0x31000
73 full.itb:load 0x12100000
74 boot.scr:load 0x12000000,jump 0x12000000
75
76There is also a batch mode which allows imx_usb to handle multiple
77consecutive reenumerations by adding multiple VID/PID specifications
78in imx_usb.conf:
79
80 0x15a2:0x0061, mx6_usb_rom.conf, 0x1b67:0x4fff, mx6_usb_sdp_spl.conf
81
82In this mode the file to download (imx_usb job) needs to be specified
83in the configuration files.
84
85mx6_usb_rom.conf:
86
87 mx6_qsb
88 hid,1024,0x910000,0x10000000,1G,0x00900000,0x40000
89 SPL:jump header2
90
91mx6_usb_sdp_spl.conf:
92
93 mx6_spl_sdp
94 hid,uboot_header,1024,0x10000000,1G,0x00907000,0x31000
95 u-boot.img:jump header2
96
97With that SPL and U-Boot can be downloaded with a single invocation
98of imx_usb without arguments:
99
100 # imx_usb