Document the U-Boot Serial Download Protocol implementation and some typical use cases. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Reviewed-by: Łukasz Majewski <lukma@denx.de>master
parent
a3774c1c3c
commit
f9c39d95f1
@ -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 |
Loading…
Reference in new issue