blob: 6ea6e413950f3dc39cc11a257db951809d26f704 [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
Breno Matheus Limaf013f172018-10-10 01:10:31 +000019imx_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
Stefan Agner86ef44f2017-08-16 11:00:55 -070024The 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
Breno Matheus Limaf013f172018-10-10 01:10:31 +0000301. Using imx_usb_loader for first install with SPL
31--------------------------------------------------
Stefan Agner86ef44f2017-08-16 11:00:55 -070032
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
Breno Matheus Limaf013f172018-10-10 01:10:31 +0000106
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