|  | 
 | FastBoot  Version  0.4 | 
 | ---------------------- | 
 |  | 
 | The fastboot protocol is a mechanism for communicating with bootloaders | 
 | over USB.  It is designed to be very straightforward to implement, to | 
 | allow it to be used across a wide range of devices and from hosts running | 
 | Linux, Windows, or OSX. | 
 |  | 
 |  | 
 | Basic Requirements | 
 | ------------------ | 
 |  | 
 | * Two bulk endpoints (in, out) are required | 
 | * Max packet size must be 64 bytes for full-speed, 512 bytes for | 
 |   high-speed and 1024 bytes for Super Speed USB. | 
 | * The protocol is entirely host-driven and synchronous (unlike the | 
 |   multi-channel, bi-directional, asynchronous ADB protocol) | 
 |  | 
 |  | 
 | Transport and Framing | 
 | --------------------- | 
 |  | 
 | 1. Host sends a command, which is an ascii string in a single | 
 |    packet no greater than 64 bytes. | 
 |  | 
 | 2. Client response with a single packet no greater than 64 bytes. | 
 |    The first four bytes of the response are "OKAY", "FAIL", "DATA",  | 
 |    or "INFO".  Additional bytes may contain an (ascii) informative | 
 |    message. | 
 |  | 
 |    a. INFO -> the remaining 60 bytes are an informative message | 
 |       (providing progress or diagnostic messages).  They should  | 
 |       be displayed and then step #2 repeats | 
 |  | 
 |    b. FAIL -> the requested command failed.  The remaining 60 bytes  | 
 |       of the response (if present) provide a textual failure message  | 
 |       to present to the user.  Stop. | 
 |  | 
 |    c. OKAY -> the requested command completed successfully.  Go to #5 | 
 |  | 
 |    d. DATA -> the requested command is ready for the data phase. | 
 |       A DATA response packet will be 12 bytes long, in the form of | 
 |       DATA00000000 where the 8 digit hexidecimal number represents | 
 |       the total data size to transfer. | 
 |  | 
 | 3. Data phase.  Depending on the command, the host or client will  | 
 |    send the indicated amount of data.  Short packets are always  | 
 |    acceptable and zero-length packets are ignored.  This phase continues | 
 |    until the client has sent or received the number of bytes indicated | 
 |    in the "DATA" response above. | 
 |  | 
 | 4. Client responds with a single packet no greater than 64 bytes.   | 
 |    The first four bytes of the response are "OKAY", "FAIL", or "INFO".   | 
 |    Similar to #2: | 
 |  | 
 |    a. INFO -> display the remaining 60 bytes and return to #4 | 
 |     | 
 |    b. FAIL -> display the remaining 60 bytes (if present) as a failure | 
 |       reason and consider the command failed.  Stop. | 
 |  | 
 |    c. OKAY -> success.  Go to #5 | 
 |  | 
 | 5. Success.  Stop. | 
 |  | 
 |  | 
 | Example Session | 
 | --------------- | 
 |  | 
 | Host:    "getvar:version"        request version variable | 
 |  | 
 | Client:  "OKAY0.4"               return version "0.4" | 
 |  | 
 | Host:    "getvar:nonexistant"    request some undefined variable | 
 |  | 
 | Client:  "OKAY"                  return value "" | 
 |  | 
 | Host:    "download:00001234"     request to send 0x1234 bytes of data | 
 |  | 
 | Client:  "DATA00001234"          ready to accept data | 
 |  | 
 | Host:    < 0x1234 bytes >        send data | 
 |  | 
 | Client:  "OKAY"                  success | 
 |  | 
 | Host:    "flash:bootloader"      request to flash the data to the bootloader | 
 |  | 
 | Client:  "INFOerasing flash"     indicate status / progress | 
 |          "INFOwriting flash" | 
 |          "OKAY"                  indicate success | 
 |  | 
 | Host:    "powerdown"             send a command | 
 |  | 
 | Client:  "FAILunknown command"   indicate failure | 
 |  | 
 |  | 
 | Command Reference | 
 | ----------------- | 
 |  | 
 | * Command parameters are indicated by printf-style escape sequences. | 
 |  | 
 | * Commands are ascii strings and sent without the quotes (which are | 
 |   for illustration only here) and without a trailing 0 byte. | 
 |  | 
 | * Commands that begin with a lowercase letter are reserved for this | 
 |   specification.  OEM-specific commands should not begin with a  | 
 |   lowercase letter, to prevent incompatibilities with future specs. | 
 |  | 
 |  "getvar:%s"           Read a config/version variable from the bootloader. | 
 |                        The variable contents will be returned after the | 
 |                        OKAY response. | 
 |  | 
 |  "download:%08x"       Write data to memory which will be later used | 
 |                        by "boot", "ramdisk", "flash", etc.  The client | 
 |                        will reply with "DATA%08x" if it has enough  | 
 |                        space in RAM or "FAIL" if not.  The size of | 
 |                        the download is remembered. | 
 |  | 
 |   "verify:%08x"        Send a digital signature to verify the downloaded | 
 |                        data.  Required if the bootloader is "secure" | 
 |                        otherwise "flash" and "boot" will be ignored. | 
 |  | 
 |   "flash:%s"           Write the previously downloaded image to the | 
 |                        named partition (if possible). | 
 |  | 
 |   "erase:%s"           Erase the indicated partition (clear to 0xFFs) | 
 |  | 
 |   "boot"               The previously downloaded data is a boot.img | 
 |                        and should be booted according to the normal | 
 |                        procedure for a boot.img | 
 |  | 
 |   "continue"           Continue booting as normal (if possible) | 
 |  | 
 |   "reboot"             Reboot the device. | 
 |  | 
 |   "reboot-bootloader"  Reboot back into the bootloader. | 
 |                        Useful for upgrade processes that require upgrading | 
 |                        the bootloader and then upgrading other partitions | 
 |                        using the new bootloader. | 
 |  | 
 |   "powerdown"          Power off the device. | 
 |  | 
 |  | 
 |  | 
 | Client Variables | 
 | ---------------- | 
 |  | 
 | The "getvar:%s" command is used to read client variables which | 
 | represent various information about the device and the software | 
 | on it. | 
 |  | 
 | The various currently defined names are: | 
 |  | 
 |   version             Version of FastBoot protocol supported. | 
 |                       It should be "0.3" for this document. | 
 |  | 
 |   version-bootloader  Version string for the Bootloader. | 
 |  | 
 |   version-baseband    Version string of the Baseband Software | 
 |  | 
 |   product             Name of the product | 
 |  | 
 |   serialno            Product serial number | 
 |  | 
 |   secure              If the value is "yes", this is a secure | 
 |                       bootloader requiring a signature before | 
 |                       it will install or boot images. | 
 |  | 
 | Names starting with a lowercase character are reserved by this | 
 | specification.  OEM-specific names should not start with lowercase | 
 | characters. | 
 |  | 
 |  |