]>
Commit | Line | Data |
---|---|---|
f9c39d95 SA |
1 | ------------- |
2 | SDP in U-Boot | |
3 | ------------- | |
4 | ||
5 | SDP stands for serial download protocol. It is the protocol used in NXP's | |
6 | i.MX SoCs ROM Serial Downloader and provides means to download a program | |
7 | image to the chip over USB and UART serial connection. | |
8 | ||
9 | The implementation in U-Boot uses the USB Downloader Gadget (g_dnl) to | |
10 | provide a SDP implementation over USB. This allows to download program | |
11 | images to the target in SPL/U-Boot using the same protocol/tooling the | |
12 | SoC's recovery mechanism is using. | |
13 | ||
14 | The SDP protocol over USB is a USB HID class protocol. USB HID class | |
15 | protocols allow to access a USB device without OS specific drivers. The | |
16 | U-Boot implementation has primarly been tested using the open source | |
accb4284 | 17 | imx_loader utility (https://github.com/boundarydevices/imx_usb_loader). |
f9c39d95 SA |
18 | |
19 | The host side utilities are typically capable to interpret the i.MX | |
20 | specific image header (see doc/README.imximage). There are extensions | |
21 | for imx_loader's imx_usb utility which allow to interpret the U-Boot | |
22 | specific legacy image format (see mkimage(1)). Also the U-Boot side | |
23 | support beside the i.MX specific header the U-Boot legacy header. | |
24 | ||
25 | Usage | |
26 | ----- | |
27 | ||
28 | This 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 | |
30 | detected (CONFIG_SPL_USB_SDP_SUPPORT). | |
31 | ||
32 | A typical use case is downloading full U-Boot after SPL has been | |
33 | downloaded through the boot ROM's Serial Downloader. Using boot mode | |
34 | detection the SPL will run the SDP implementation automatically in | |
35 | this case: | |
36 | ||
37 | # imx_usb SPL | |
38 | ||
39 | Targets Serial Console: | |
40 | ||
41 | Trying to boot from USB SDP | |
42 | SDP: initialize... | |
43 | SDP: handle requests... | |
44 | ||
45 | At this point the SPL reenumerated as a new HID device and emulating | |
46 | the boot ROM's SDP protocol. The USB VID/PID will depend on standard | |
47 | U-Boot configurations CONFIG_G_DNL_(VENDOR|PRODUCT)_NUM. Make sure | |
48 | imx_usb is aware of the USB VID/PID for your device by adding a | |
49 | configuration entry in imx_usb.conf: | |
50 | ||
51 | 0x1b67:0x4fff, mx6_usb_sdp_spl.conf | |
52 | ||
53 | And 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 | ||
58 | This 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 | ||
63 | Furthermore, when U-Boot is running the sdp command can be used to | |
64 | download and run scripts: | |
65 | ||
66 | # imx_usb script.scr | |
67 | ||
68 | imx_usb configuration files can be also used to download multiple | |
69 | files 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 | ||
76 | There is also a batch mode which allows imx_usb to handle multiple | |
77 | consecutive reenumerations by adding multiple VID/PID specifications | |
78 | in imx_usb.conf: | |
79 | ||
80 | 0x15a2:0x0061, mx6_usb_rom.conf, 0x1b67:0x4fff, mx6_usb_sdp_spl.conf | |
81 | ||
82 | In this mode the file to download (imx_usb job) needs to be specified | |
83 | in the configuration files. | |
84 | ||
85 | mx6_usb_rom.conf: | |
86 | ||
87 | mx6_qsb | |
88 | hid,1024,0x910000,0x10000000,1G,0x00900000,0x40000 | |
89 | SPL:jump header2 | |
90 | ||
91 | mx6_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 | ||
97 | With that SPL and U-Boot can be downloaded with a single invocation | |
98 | of imx_usb without arguments: | |
99 | ||
100 | # imx_usb |