MCU Flashloader Reference Manual
User Manual:
Open the PDF directly: View PDF .
Page Count: 91
Download | ![]() |
Open PDF In Browser | View PDF |
MCU Flashloader Reference Manual Document Number: MCUFLSHLDRRM Rev. 5, 11/2018 MCU Flashloader Reference Manual, Rev. 5, 11/2018 2 NXP Semiconductors Contents Section number Title Page Chapter 1 Introduction 1.1 Introduction.....................................................................................................................................................................7 1.2 Terminology....................................................................................................................................................................7 1.3 Block diagram.................................................................................................................................................................8 1.4 Features supported.......................................................................................................................................................... 8 1.5 Components supported....................................................................................................................................................9 Chapter 2 MCU flashloader protocol 2.1 Introduction.....................................................................................................................................................................11 2.2 Command with no data phase......................................................................................................................................... 11 2.3 Command with incoming data phase..............................................................................................................................12 2.4 Command with outgoing data phase...............................................................................................................................14 Chapter 3 Flashloader packet types 3.1 Introduction.....................................................................................................................................................................17 3.2 Ping packet......................................................................................................................................................................17 3.3 Ping response packet.......................................................................................................................................................18 3.4 Framing packet................................................................................................................................................................19 3.5 CRC16 algorithm............................................................................................................................................................ 20 3.6 Command packet............................................................................................................................................................ 21 3.7 Response packet..............................................................................................................................................................23 Chapter 4 MCU flashloader command API 4.1 Introduction.....................................................................................................................................................................25 4.2 GetProperty command.................................................................................................................................................... 25 4.3 SetProperty command.....................................................................................................................................................27 4.4 FlashEraseAll command................................................................................................................................................. 29 MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 3 Section number Title Page 4.5 FlashEraseRegion command...........................................................................................................................................31 4.6 ReadMemory command..................................................................................................................................................32 4.7 WriteMemory command.................................................................................................................................................34 4.8 FillMemory command.................................................................................................................................................... 36 4.9 Execute command...........................................................................................................................................................38 4.10 Call command................................................................................................................................................................. 39 4.11 Reset command...............................................................................................................................................................40 4.12 FlashProgramOnce/eFuseProgramOnce command........................................................................................................ 41 4.13 FlashReadOnce/eFuseReadOnce command................................................................................................................... 43 4.14 Configure Memory command.........................................................................................................................................44 4.15 ReceiveSBFile command................................................................................................................................................45 Chapter 5 Supported peripherals 5.1 Introduction.....................................................................................................................................................................47 5.2 UART peripheral............................................................................................................................................................ 47 5.3 USB HID peripheral....................................................................................................................................................... 49 5.3.1 Device descriptor................................................................................................................................................. 49 5.3.2 Endpoints............................................................................................................................................................. 50 5.3.3 HID reports.......................................................................................................................................................... 50 Chapter 6 External memory support 6.1 Introduction.....................................................................................................................................................................53 6.2 Serial NOR Flash through FlexSPI.................................................................................................................................53 6.2.1 FlexSPI NOR Configuration Block..................................................................................................................... 54 6.2.2 FlexSPI NOR Configuration Option Block......................................................................................................... 58 6.2.2.1 Typical use cases for FlexSPI NOR Configuration Block.....................................................................60 6.2.2.2 Programming Serial NOR Flash device using FlexSPI NOR Configuration Option Block..................60 6.3 Serial NAND Flash through FlexSPI..............................................................................................................................61 6.3.1 FlexSPI NAND Firmware Configuration Block (FCB)...................................................................................... 61 MCU Flashloader Reference Manual, Rev. 5, 11/2018 4 NXP Semiconductors Section number Title Page 6.3.2 FlexSPI NAND Configuration Block.................................................................................................................. 62 6.3.3 FlexSPI NAND FCB option block.......................................................................................................................64 6.3.4 FlexSPI NAND Configuration Option Block...................................................................................................... 65 6.3.5 Example usage with Flashloader..........................................................................................................................66 6.4 SD/eMMC through uSDHC............................................................................................................................................67 6.4.1 SD Configuration Block.......................................................................................................................................67 6.4.2 Example usage with Flashloader..........................................................................................................................69 6.4.3 eMMC Configuration Block................................................................................................................................ 70 6.4.4 Example usage with Flashloader..........................................................................................................................73 Chapter 7 Security utilities 7.1 Introduction.....................................................................................................................................................................75 7.2 Image encryption and programming...............................................................................................................................75 7.2.1 Example to generate encrypted image and program to Flash.............................................................................. 76 7.3 KeyBlob generation and programming...........................................................................................................................77 7.3.1 KeyBlob............................................................................................................................................................... 77 7.3.2 KeyBlob Option Block.........................................................................................................................................78 7.3.3 Example to generate and program KeyBlob........................................................................................................ 79 Chapter 8 Appendix A: status and error codes Chapter 9 Appendix B: GetProperty and SetProperty commands Chapter 10 Revision history 10.1 Revision history.............................................................................................................................................................. 89 MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 5 MCU Flashloader Reference Manual, Rev. 5, 11/2018 6 NXP Semiconductors Chapter 1 Introduction 1.1 Introduction The MCU flashloader is a configurable flash programming utility that operates over a serial connection on MCUs. It enables quick and easy programming of MCUs through the entire product life cycle, including application development, final product manufacturing, and more. The MCU flashloader will be delivered as binary or full source code that is highly configurable. Host-side command line and GUI tools are available to communicate with the flashloader. Users can utilize host tools to upload and/or download application code via the flashloader. 1.2 Terminology target The device running the bootloader firmware (ROM). host The device sending commands to the target for execution. source The initiator of a communications sequence. For example, the sender of a command or data packet. destination Receiver of a command or data packet. incoming From host to target. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 7 Block diagram outgoing From target to host. 1.3 Block diagram This block diagram describes the overall structure of the MCU flashloader. Figure 1-1. Block diagram 1.4 Features supported Here are some of the features supported by the MCU flashloader: • Supports UART and USB peripheral interfaces. • Automatic detection of the active peripheral. • Ability to disable any peripheral. MCU Flashloader Reference Manual, Rev. 5, 11/2018 8 NXP Semiconductors Chapter 1 Introduction • • • • • • • UART peripheral implements autobaud. Common packet-based protocol for all peripherals. Packet error detection and retransmit. Protection of RAM used by the flashloader while it is running. Provides command to read properties of the device, such as RAM size. Support for serial QuadSPI and other external memories. Support for encrypted image download. 1.5 Components supported Components for the flashloader firmware: • Startup code (clocking, pinmux, etc.) • Command phase state machine • Command handlers • GenericResponse • FlashEraseAll • FlashEraseRegion • ReadMemory • ReadMemoryResponse • WriteMemory • FillMemory • GetProperty • GetPropertyResponse • Execute • Call • Reset • SetProperty • FlashProgramOnce/EfuseProgramOnce • FlashReadOnce/EfuseReadOnce • FlashReadOnceResponse • ConfigureMemory • SB file state machine • Encrypted image support (AES-128) • Packet interface • Framing packetizer • Command/data packet processor • Memory interface • Abstract interface MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 9 Components supported • • • • • • FlexSPI NOR Memory Interface FlexSPI NAND Memory Interface SEMC NOR Memory Interface SEMC NAND Memory Interface SD Card Memory Interface eMMC Memory Interface • Peripheral drivers • UART • Auto-baud detector • USB device • USB controller driver • USB framework • USB HID class MCU Flashloader Reference Manual, Rev. 5, 11/2018 10 NXP Semiconductors Chapter 2 MCU flashloader protocol 2.1 Introduction This section explains the general protocol for the packet transfers between the host and the MCU flashloader. The description includes the transfer of packets for different transactions, such as commands with no data phase, and commands with an incoming or outgoing data phase. The next section describes the various packet types used in a transaction. Each command sent from the host is replied to with a response command. Commands may include an optional data phase. • If the data phase is incoming (from the host to MCU flashloader), it is part of the original command. • If the data phase is outgoing (from MCU flashloader to host), it is part of the response command. 2.2 Command with no data phase NOTE In these diagrams, the Ack sent in response to a Command or Data packet can arrive at any time before, during, or after the Command/Data packet has processed. Command with no data phase The protocol for a command with no data phase contains: • Command packet (from host) • Generic response command packet (to host) MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 11 Command with incoming data phase Host Target Command Process Command Ack Response Ack Figure 2-1. Command with no data phase 2.3 Command with incoming data phase The protocol for a command with incoming data phase contains: • • • • Command packet (from host)(kCommandFlag_HasDataPhase set) Generic response command packet (to host) Incoming data packets (from host) Generic response command packet (to host) MCU Flashloader Reference Manual, Rev. 5, 11/2018 12 NXP Semiconductors Chapter 2 MCU flashloader protocol Host Target Command Process Command Ack Initial Response Ack Data Packet Process Data Ack Final Data Packet Process Data Ack Final Response Ack Figure 2-2. Command with incoming data phase Notes • The host may not send any further packets while it is waiting for the response to a command. • The data phase is aborted if, prior to the start of the data phase, the Generic Response packet does not have a status of kStatus_Success. • Data phases may be aborted by the receiving side by sending the final Generic Response early with a status of kStatus_AbortDataPhase. The host may abort the data phase early by sending a zero-length data packet. • The final Generic Response packet sent after the data phase includes the status for the entire operation. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 13 Command with outgoing data phase 2.4 Command with outgoing data phase The protocol for a command with an outgoing data phase contains: • Command packet (from host) • ReadMemory Response command packet (to host)(kCommandFlag_HasDataPhase set) • Outgoing data packets (to host) • Generic response command packet (to host) Host Target Command Process Command Ack Initial Response Ack Data Packet Process Data Ack Final Data Packet Process Data Ack Final Response Ack Figure 2-3. Command with outgoing data phase MCU Flashloader Reference Manual, Rev. 5, 11/2018 14 NXP Semiconductors Chapter 2 MCU flashloader protocol Note • The data phase is considered part of the response command for the outgoing data phase sequence. • The host may not send any further packets while the host is waiting for the response to a command. • The data phase is aborted if, prior to the start of the data phase, the ReadMemory Response command packet does not contain the kCommandFlag_HasDataPhase flag. • Data phases may be aborted by the host sending the final Generic Response early with a status of kStatus_AbortDataPhase. The sending side may abort the data phase early by sending a zero-length data packet. • The final Generic Response packet sent after the data phase includes the status for the entire operation. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 15 Command with outgoing data phase MCU Flashloader Reference Manual, Rev. 5, 11/2018 16 NXP Semiconductors Chapter 3 Flashloader packet types 3.1 Introduction The MCU flashloader device works in slave mode. All data communication is initiated by a host, which is either a PC or embedded host. The MCU flashloader device is the target, which receives a command or data packet. All data communication between host and target is packetized. NOTE The term "target" refers to the "MCU flashloader device". There are 6 types of packets used: • Ping packet • Ping Response packet • Framing packet • Command packet • Data packet • Response packet All fields in the packets are in little-endian byte order. 3.2 Ping packet The Ping packet can be sent from host to target any time when the target is expecting a command packet. If the selected peripheral is UART, a ping packet must be sent before any other communication in order to run autobaud. For other serial peripherals it is optional, but is recommended in order to determine the serial protocol version. In response to a Ping packet, the target sends a Ping Response packet, discussed in following section. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 17 Ping response packet Table 3-1. Ping packet format Byte # Value Name 0 0x5A start byte 1 0xA6 ping Target Host Ping Packet 0x5a 0xa6 Target executes UART autobaud if necessary PingResponse Packet: 0x5a 0xa7 0x00 0x02 0x01 0x50 0x00 0x00 0xaa 0xea Figure 3-1. Ping Packet Protocol Sequence 3.3 Ping response packet The target sends a Ping Response packet back to the host after receiving a Ping packet. If communication is over a UART peripheral, the target uses the incoming Ping packet to determine the baud rate before replying with the Ping Response packet. After the Ping Response packet is received by the host, the connection is established, and the host starts sending commands to the target. Table 3-2. Ping Response packet format Byte # Value Parameter 0 0x5A start byte 1 0xA7 Ping response code 2 Protocol bugfix 3 Protocol minor 4 Protocol major 5 Protocol name = 'P' (0x50) 6 Options low 7 Options high Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 18 NXP Semiconductors Chapter 3 Flashloader packet types Table 3-2. Ping Response packet format (continued) Byte # Value Parameter 8 CRC16 low 9 CRC16 high 3.4 Framing packet The framing packet is used for flow control and error detection for the communications links that do not have such features built-in. The framing packet structure sits between the link layer and command layer. It wraps command and data packets as well. Every framing packet containing data sent in one direction results in a synchronizing response framing packet in the opposite direction. The framing packet described in this section is used for serial peripheral UART. The USB HID peripheral does not use framing packets. Instead, the packetization inherent in the USB protocol itself is used. Table 3-3. Framing packet format Byte # Parameter 0 start byte 1 packetType 2 length_low 3 length_high 4 crc16_low 5 crc16_high 6 . . .n Command or Data packet payload Description Value - 0x5A Length is a 16-bit field that specifies the entire command or data packet size in bytes. This is a 16-bit field. The CRC16 value covers entire framing packet, including the start byte and command or data packets, but does not include the CRC bytes. See the CRC16 algorithm after this table. A special framing packet that contains only a start byte and a packet type is used for synchronization between the host and target. Table 3-4. Special framing packet format Byte # Value Parameter 0 0x5A start byte 1 0xAn packetType MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 19 CRC16 algorithm The Packet Type field specifies the type of the packet from one of the defined types (below): Table 3-5. packetType field packetType Name Description 0xA1 kFramingPacketType_Ack The previous packet was received successfully; the sending of more packets is allowed. 0xA2 kFramingPacketType_Nak The previous packet was corrupted and must be re-sent. 0xA3 kFramingPacketType_AckAbort Data phase is being aborted. 0xA4 kFramingPacketType_Command The framing packet contains a command packet payload. 0xA5 kFramingPacketType_Data The framing packet contains a data packet payload. 0xA6 kFramingPacketType_Ping Sent to verify the other side is alive. Also used for UART autobaud. 0xA7 kFramingPacketType_PingResponse A response to Ping; contains the framing protocol version number and options. 3.5 CRC16 algorithm This section provides the CRC16 algorithm. The CRC is computed over each byte in the framing packet header, excluding the crc16 field itself, plus all payload bytes. The CRC algorithm is the XMODEM variant of CRC-16. The characteristics of the XMODEM variant are: Table 3-6. XMODEM charactertistics width 16 polynomial 0x1021 init value 0x0000 reflect in false reflect out false xor out 0x0000 check result 0x31c3 The check result is computed by running the ASCII character sequence "123456789" through the algorithm. uint16_t crc16_update(const uint8_t * src, uint32_t lengthInBytes) { uint32_t crc = 0; uint32_t j; for (j=0; j < lengthInBytes; ++j) { MCU Flashloader Reference Manual, Rev. 5, 11/2018 20 NXP Semiconductors Chapter 3 Flashloader packet types uint32_t i; uint32_t byte = src[j]; crc ^= byte << 8; for (i = 0; i < 8; ++i) { uint32_t temp = crc << 1; if (crc & 0x8000) { temp ^= 0x1021; } crc = temp; } } } return crc; 3.6 Command packet The command packet carries a 32-bit command header and a list of 32-bit parameters. Table 3-7. Command packet format Command packet format (32 bytes) Command header (4 bytes) 28 bytes for parameters (Max 7 parameters) Tag Flags Rsvd Param Param1 Count (32-bit) Param2 (32-bit) Param3 (32-bit) Param4 (32-bit) Param5 (32-bit) Param6 (32-bit) Param7 (32-bit) byte 0 byte 1 byte 2 byte 3 - - - - - - - Table 3-8. Command header format Byte # Command header field 0 Command or Response tag 1 Flags 2 Reserved. Should be 0x00. 3 ParameterCount The header is followed by 32-bit parameters up to the value of the ParameterCount field specified in the header. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 21 Command packet Command packets are also used by the target to send responses back to the host. As described in section 3.4, command packets and data packets are embedded into framing packets for all UART transfers. Table 3-9. Command Tags Command Tag Name 0x01 FlashEraseAll 0x02 FlashEraseRegion 0x03 ReadMemory 0x04 WriteMemory 0x05 FillMemory 0x07 GetProperty 0x08 Reserved 0x09 Execute 0x10 FlashReadResource 0x11 Reserved 0x0A Call 0x0B Reset 0x0C SetProperty 0x0E eFuseProgram 0x0F eFuseRead 0x10 FlashReadResource 0x11 ConfigureMemory The command tag specifies one of the commands supported by the MCU flashloader. The valid command tags for the MCU flashloader are listed here. Table 3-10. Response Tags Response Tag Name 0xA0 GenericResponse 0xA7 GetPropertyResponse (used for sending responses to GetProperty command only) 0xA3 ReadMemoryResponse (used for sending responses to ReadMemory command only) 0xAF FlashReadOnceResponse (used for sending responses to FlashReadOnce command only) 0xB0 FlashReadResourceResponse (used for sending responses to FlashReadResource command only) The response tag specifies one of the responses the MCU flashloader (target) returns to the host. The valid response tags are listed here. Flags: Each command packet contains a Flag byte. Only bit 0 of the flag byte is used. If bit 0 of the flag byte is set to 1, then data packets follow in the command sequence. The number of bytes that are transferred in the data phase is determined by a commandspecific parameter in the parameters array. MCU Flashloader Reference Manual, Rev. 5, 11/2018 22 NXP Semiconductors Chapter 3 Flashloader packet types ParameterCount: The number of parameters included in the command packet. Parameters: The parameters are word-length (32 bits). With the default maximum packet size of 32 bytes, a command packet can contain up to 7 parameters. 3.7 Response packet Response packets use the same format as command packets (refer to section 3.6). Types of responses include: • GenericResponse • GetPropertyResponse • ReadMemoryResponse • FlashReadOnceResponse • FlashReadResourceResponse GenericResponse: After the MCU flashloader has processed a command, the flashloader sends a generic response with status and command tag information to the host. The generic response is the last packet in the command protocol sequence. The generic response packet contains the command packet data (with generic response tag = 0xA0) and a list of parameters (defined in the next section). The parameter count field in the header is always set to 2, for status code and command tag parameters. Table 3-11. GenericResponse parameters Byte # Parameter Descripton 0-3 Status code The Status codes are errors encountered during the execution of a command by the target. If a command succeeds, then a kStatus_Success code is returned. 4-7 Command tag The Command tag parameter identifies the response to the command sent by the host. GetPropertyResponse: The GetPropertyResponse packet is sent by the target in response to the host query that uses the GetProperty command. The GetPropertyResponse packet contains the command packet data, with the command/response tag set to a GetPropertyResponse tag value (0xA7). The parameter count field in the header is set to greater than 1, to always include the status code and one or many property values. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 23 Response packet Table 3-12. GetPropertyResponse parameters Byte # Value Parameter 0-3 Status code 4-7 Property value ... ... Can be up to maximum 6 property values, limited to the size of the 32-bit command packet and property type. ReadMemoryResponse: The ReadMemoryResponse packet is sent by the target in response to the host sending a ReadMemory command. The ReadMemoryResponse packet contains the command packet data, with the command/response tag set to a ReadMemoryResponse tag value (0xA3), the flags field set to kCommandFlag_HasDataPhase (1). The parameter count is set to 2 for the status code and the data byte count parameters shown below. Table 3-13. ReadMemoryResponse Parameters Byte # Parameter Descripton 0-3 Status code The status of the associated Read Memory command. 4-7 Data byte count The number of bytes sent in the data phase. FlashReadOnceResponse:The FlashReadOnceResponse packet is sent by the target in response to the host sending a FlashReadOnce command. The FlashReadOnceResponse packet contains the command packet data, with the command/response tag set to a FlashReadOnceResponse tag value (0xAF), and the flags field set to 0. The parameter count is set to 2 plus the number of words requested to be read in the FlashReadOnceCommand. Table 3-14. FlashReadOnceResponse Parameters Byte # Value Parameter 0–3 Status Code 4–7 Byte count to read … … Can be up to 20 bytes of requested read data. MCU Flashloader Reference Manual, Rev. 5, 11/2018 24 NXP Semiconductors Chapter 4 MCU flashloader command API 4.1 Introduction All MCU flashloader command APIs follows the command packet format wrapped by the framing packet as explained in previous sections. See Table 3-9 for a list of commands supported by MCU flashloader. For a list of status codes returned by MCU flashloader, see Appendix A. 4.2 GetProperty command The GetProperty command is used to query the flashloader about various properties and settings. Each supported property has a unique 32-bit tag associated with it. The tag occupies the first parameter of the command packet. The target returns a GetPropertyResponse packet with the values for the property identified with the tag in the GetProperty command. Properties are the defined units of data that can be accessed with the GetProperty or SetProperty commands. Properties may be read-only or read-write. All read-write properties are 32-bit integers, so they can easily be carried in a command parameter. For a list of properties and their associated 32-bit property tags supported by MCU flashloader, see Appendix B, "GetProperty and SetProperty commands". The 32-bit property tag is the only parameter required for GetProperty command. Table 4-1. Parameters for GetProperty command Byte # Command 0-3 Property tag 4-7 External Memory Identifier (only applies to get property for external memory) MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 25 GetProperty command Host Target GetProperty: Property tag = 0x01 0x5a a4 0c 00 4b 33 07 00 00 02 01 00 00 00 00 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 02 4b 9d a7 00 00 02 00 00 00 00 00 06 f4 00 0c a4 a 0x5 ACK: 0x5a a1 Figure 4-1. Protocol sequence for GetProperty command Table 4-2. GetProperty packet format example GetProperty Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x0C 0x00 crc16 0x4B 0x33 commandTag 0x07 – GetProperty flags 0x00 reserved 0x00 parameterCount 0x02 propertyTag 0x00000001 - CurrentVersion Memory ID 0x00000000 - Internal Flash The GetProperty command has no data phase. Response: In response to a GetProperty command, the target sends a GetPropertyResponse packet with the response tag set to 0xA7. The parameter count indicates the number of parameters sent for the property values, with the first parameter showing status code 0, followed by the property value(s). The next table shows an example of a GetPropertyResponse packet. MCU Flashloader Reference Manual, Rev. 5, 11/2018 26 NXP Semiconductors Chapter 4 MCU flashloader command API Table 4-3. GetProperty response packet format example GetPropertyResponse Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x0c 0x00 (12 bytes) crc16 0xf4 9d responseTag 0xA7 flags 0x00 reserved 0x00 parameterCount 0x02 status 0x00000000 propertyValue 0x4b020600 - CurrentVersion 4.3 SetProperty command The SetProperty command is used to change or alter the values of the properties or options of the flashloader. The command accepts the same property tags used with the GetProperty command. However, only some properties are writable--see Appendix B. If an attempt to write a read-only property is made, an error is returned indicating the property is read-only and cannot be changed. The property tag and the new value to set are the two parameters required for the SetProperty command. Table 4-4. Parameters for SetProperty command Byte # Command 0-3 Property tag 4-7 Property value MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 27 SetProperty command Host Target SetProperty: Property tag = 0x0a, Property Value = 1 0x5a a4 0c 00 67 8d 0c 00 00 02 0a 00 00 00 01 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 f7 a0 00 00 02 00 00 00 00 0c 00 e0 00 0c 0x5a a4 ACK: 0x5a a1 Figure 4-2. Protocol sequence for SetProperty command Table 4-5. SetProperty packet format example SetProperty Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x0C 0x00 crc16 0x67 0x8D commandTag 0x0C – SetProperty with property tag 10 flags 0x00 reserved 0x00 parameterCount 0x02 propertyTag 0x0000000A - VerifyWrites propertyValue 0x00000001 The SetProperty command has no data phase. Response: The target returns a GenericResponse packet with one of following status codes: Table 4-6. SetProperty response status codes Status Code kStatus_Success Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 28 NXP Semiconductors Chapter 4 MCU flashloader command API Table 4-6. SetProperty response status codes (continued) Status Code kStatus_ReadOnly kStatus_UnknownProperty kStatus_InvalidArgument 4.4 FlashEraseAll command The FlashEraseAll command performs an erase of the entire flash memory. If any flash regions are protected, then the FlashEraseAll command fails and returns an error status code. Executing the FlashEraseAll command releases flash security if it (flash security) was enabled, by setting the FTFA_FSEC register. However, the FSEC field of the flash configuration field is erased, so unless it is reprogrammed, the flash security is re-enabled after the next system reset. The Command tag for FlashEraseAll command is 0x01 set in the commandTag field of the command packet. The FlashEraseAll command requires a memory ID. If the memory ID is not specified, the internal flash (memory ID =0) will be selected as default. Table 4-7. Parameter for FlashEraseAll command Byte # 0-3 Parameter Memory ID 0x000 Internal Flash 0x010 Execute-only region in Internal Flash 0x001 Serial NOR through QuadSPI 0x008 Parallel NOR through SEMC 0x009 Serial NOR through FlexSPI 0x100 SLC Raw NAND through SEMC 0x101 Serial NAND through FlexSPI 0x110 Serial NOR/EEPROM through SPI 0x120 SD through uSDHC 0x121 eMMC through uSDHC MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 29 FlashEraseAll command Host Target FlashEraseAll 0x5a a4 08 00 0c 22 01 00 00 01 00 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 ce a0 00 00 02 00 00 00 00 01 00 66 00 0c a4 a 0x5 ACK: 0x5a a1 Figure 4-3. Protocol sequence for FlashEraseAll command Table 4-8. FlashEraseAll packet format example FlashEraseAll Parameter Value Framing packet start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x08 0x00 crc16 0x0C 0x22 commandTag 0x01 - FlashEraseAll flags 0x00 reserved 0x00 parameterCount 0x01 Memory ID refer to the above table Command packet The FlashEraseAll command has no data phase. Response: The target returns a GenericResponse packet with status code either set to kStatus_Success for successful execution of the command, or set to an appropriate error status code. MCU Flashloader Reference Manual, Rev. 5, 11/2018 30 NXP Semiconductors Chapter 4 MCU flashloader command API 4.5 FlashEraseRegion command The FlashEraseRegion command performs an erase of one or more sectors of the flash memory. The start address and number of bytes are the 2 parameters required for the FlashEraseRegion command. The start and byte count parameters must be 4-byte aligned ([1:0] = 00), or the FlashEraseRegion command fails and returns kStatus_FlashAlignmentError(101). If the region specified does not fit in the flash memory space, the FlashEraseRegion command fails and returns kStatus_FlashAddressError(102). If any part of the region specified is protected, the FlashEraseRegion command fails and returns kStatus_MemoryRangeInvalid(10200). Table 4-9. Parameters for FlashEraseRegion command Byte # Parameter 0-3 Start address 4-7 Byte count 8 - 11 Memory ID The FlashEraseRegion command has no data phase. Response: The target returns a GenericResponse packet with one of following error status codes. Table 4-10. FlashEraseRegion response status codes Status code kStatus_Success (0) kStatus_MemoryRangeInvalid (10200) kStatus_FlashAlignmentError (101) kStatus_FlashAddressError (102) kStatus_FlashAccessError (103) kStatus_FlashProtectionViolation (104) kStatus_FlashCommandFailure (105) MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 31 ReadMemory command 4.6 ReadMemory command The ReadMemory command returns the contents of memory at the given address, for a specified number of bytes. This command can read any region of memory accessible by the CPU and is not protected by security. The start address and number of bytes are the two parameters required for ReadMemory command. The memory ID is optional. Internal memory is selected as default if memory ID is not specified. Table 4-11. Parameters for read memory command Byte Parameter Description 0-3 Start address 4-7 Byte count Number of bytes to read and return to caller 8-11 Memory ID Internal or extermal memory Identifier Start address of memory to read from MCU Flashloader Reference Manual, Rev. 5, 11/2018 32 NXP Semiconductors Chapter 4 MCU flashloader command API Host Target ReadMemory: star tAddress = 0x20000400, byteCount = 0x6 4 0x5a a4 10 00 f4 1b 03 00 00 03 00 04 00 20 64 00 00 00 00 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 00 64 00 00 00 0x5a a4 0c 00 27 f6 a3 01 00 02 00 ACK: 0x5a a1 Data packet: 0x5a a5 length16 CRC16 data Process Data ACK: 0x5a a1 Final data packet: 0x5a a5 length16 CRC16 data Process Data ACK: 0x5a a1 Generic Response: 00 00 00 03 00 00 00 0x5a a4 0c 00 0e 23 a0 00 00 02 00 ACK: 0x5a a1 Figure 4-4. Command sequence for read memory Table 4-12. ReadMemory packet format example ReadMemory Parameter Framing packet Start byte packetType Command packet Value 0x5A0xA4, kFramingPacketType_Command length 0x10 0x00 crc16 0xF4 0x1B commandTag 0x03 - readMemory flags 0x00 reserved 0x00 parameterCount 0x03 Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 33 WriteMemory command Table 4-12. ReadMemory packet format example (continued) ReadMemory Parameter Value startAddress 0x20000400 byteCount 0x00000064 memoryID 0x0 Data Phase: The ReadMemory command has a data phase. Because the target works in slave mode, the host needs to pull data packets until the number of bytes of data specified in the byteCount parameter of the ReadMemory command are received by host. Response: The target returns a GenericResponse packet with a status code either set to kStatus_Success upon successful execution of the command, or set to an appropriate error status code. 4.7 WriteMemory command The WriteMemory command writes data provided in the data phase to a specified range of bytes in memory (flash or RAM). However, if flash protection is enabled, then writes to protected sectors fail. Special care must be taken when writing to flash. • First, any flash sector written to must have been previously erased with a FlashEraseAll, FlashEraseRegion, or FlashEraseAllUnsecure command. • Writing to flash requires the start address to be page size aligned. • The byte count is rounded up to a multiple of page size, and trailing bytes are filled with the flash erase pattern (0xff). • If the VerifyWrites property is set to true, then writes to flash also perform a flash verify program operation. When writing to RAM, the start address does not need to be aligned, and the data is not padded. The start address and number of bytes are the 2 parameters required for the WriteMemory command. The memory ID is optional. Internal memory will be selected as default if a memory ID is not specified. Table 4-13. Parameters for WriteMemory command Byte # Command 0-3 Start address 4-7 Byte count 8 - 11 Memory ID MCU Flashloader Reference Manual, Rev. 5, 11/2018 34 NXP Semiconductors Chapter 4 MCU flashloader command API Target Host WriteMemory: star tAddress = 0x20000400, byteCount = 0x6 4 0x5a a4 10 00 97 dd 04 01 00 03 00 04 00 20 64 00 00 00 00 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 72 a0 00 00 02 00 00 00 00 04 00 23 00 0x5a a4 0c ACK: 0x5a a1 Data packet: 0x5a a5 length16 CRC16 data Process Data ACK: 0x5a a1 Final data packet: 0x5a a5 length16 CRC16 data Process Data ACK: 0x5a a1 Generic Response: 00 00 72 a0 00 00 02 00 00 00 00 04 00 23 00 0c 0x5a a4 ACK: 0x5a a1 Figure 4-5. Protocol sequence for WriteMemory command Table 4-14. WriteMemory packet format example WriteMemory Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x10 0x00 crc16 0x97 0xDD commandTag 0x04 - writeMemory Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 35 FillMemory command Table 4-14. WriteMemory packet format example (continued) WriteMemory Parameter Value flags 0x01 reserved 0x00 parameterCount 0x03 startAddress 0x20000400 byteCount 0x00000064 memoryID 0x0 Data Phase: The WriteMemory command has a data phase. The host sends data packets until the number of bytes of data specified in the byteCount parameter of the WriteMemory command are received by the target. Response: The target returns a GenericResponse packet with a status code set to kStatus_Success upon successful execution of the command or to an appropriate error status code. 4.8 FillMemory command The FillMemory command fills a range of bytes in memory with a data pattern. It follows the same rules as the WriteMemory command. The difference between FillMemory and WriteMemory is that a data pattern is included in the FillMemory command parameter, and there is no data phase for the FillMemory command, while WriteMemory does have a data phase. Table 4-15. Parameters for FillMemory command Byte # Command 0-3 Start address of memory to fill 4-7 Number of bytes to write with the pattern • The start address should be 32-bit aligned. • The number of bytes must be evenly divisible by 4. NOTE: 8 - 11 For any part that uses FTFE flash, the start address should be 64-bit aligned, and the number of bytes must be evenly divisible by 8. 32-bit pattern • To fill with a byte pattern (8-bit), the byte must be replicated 4 times in the 32-bit pattern. • To fill with a short pattern (16-bit), the short value must be replicated 2 times in the 32-bit pattern. MCU Flashloader Reference Manual, Rev. 5, 11/2018 36 NXP Semiconductors Chapter 4 MCU flashloader command API For example, to fill a byte value with 0xFE, the word pattern is 0xFEFEFEFE; to fill a short value 0x5AFE, the word pattern is 0x5AFE5AFE. Special care must be taken when writing to flash. • First, any flash sector written to must have been previously erased with a FlashEraseAll, FlashEraseRegion, or FlashEraseAllUnsecure command. • Writing to flash requires the start address to be page size aligned. • If the VerifyWrites property is set to true, then writes to flash also performs a flash verify program operation. When writing to RAM, the start address does not need to be aligned. Host Target FillMemory, with word pattern 0x12 345678 0x5a a4 10 00 e4 57 05 00 00 03 00 70 00 00 00 08 00 00 78 56 34 12 Process Command ACK: 0x5a a1 Generic Response: 00 00 00 00 00 06 02 4b 0x5a a4 0c 00 f4 9d a7 00 00 02 ACK: 0x5a a1 Figure 4-6. Protocol sequence for FillMemory command Table 4-16. FillMemory packet format example FillMemory Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x10 0x00 crc16 0xE4 0x57 commandTag 0x05 – FillMemory flags 0x00 Reserved 0x00 parameterCount 0x03 startAddress 0x00007000 Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 37 Execute command Table 4-16. FillMemory packet format example (continued) FillMemory Parameter Value byteCount 0x00000800 patternWord 0x12345678 The FillMemory command has no data phase. Response: upon successful execution of the command, the target (MCU flashloader) returns a GenericResponse packet with a status code set to kStatus_Success, or to an appropriate error status code. 4.9 Execute command The execute command results in the flashloader setting the program counter to the code at the provided jump address, R0 to the provided argument, and a Stack pointer to the provided stack pointer address. Prior to the jump, the system is returned to the reset state. The Jump address, function argument pointer, and stack pointer are the parameters required for the Execute command. If the stack pointer is set to zero, the called code is responsible for setting the processor stack pointer before using the stack. Table 4-17. Parameters for Execute command Byte # Command 0-3 Jump address 4-7 Argument word 8 - 11 Stack pointer address The Execute command has no data phase. Response: Before running the Execute command, the target validates the parameters and returns a GenericResponse packet with a status code either set to kStatus_Success or an appropriate error status code. MCU Flashloader Reference Manual, Rev. 5, 11/2018 38 NXP Semiconductors Chapter 4 MCU flashloader command API 4.10 Call command The Call command executes a function that is written in memory at the address sent in the command. The address needs to be a valid memory location residing in accessible flash (internal or external) or in RAM. The command supports the passing of one 32-bit argument. Although the command supports a stack address, at this time the call still takes place using the current stack pointer. After execution of the function, a 32-bit value is returned in the generic response message. Host Target Call: Address = 0x00000cd9, arg =0 0x5a a4 0c 00 16 5c 0a 00 00 02 d9 0c 00 00 00 00 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 00 00 0a 00 00 00 0x5a a4 0c 00 79 d0 a0 00 00 02 ACK: 0x5a a1 Figure 4-7. Protocol sequence for call command Table 4-18. Parameters for Call command Byte # Command 0-3 Call address 4-7 Argument word 8 - 11 Stack pointer Response: The target returns a GenericResponse packet with a status code either set to the return value of the function called or set to kStatus_InvalidArgument (105). MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 39 Reset command 4.11 Reset command The Reset command results in the flashloader resetting the chip. The Reset command requires no parameters. Host Target Reset 0x5a a4 04 00 6f 46 0b 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 00 00 0b 00 00 00 0x5a a4 0c 00 cd a6 a0 00 00 02 ACK: 0x5a a1 Figure 4-8. Protocol sequence for Reset command Table 4-19. Reset command packet format example Reset Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x04 0x00 crc16 0x6F 0x46 commandTag 0x0B - reset flags 0x00 reserved 0x00 parameterCount 0x02 The Reset command has no data phase. MCU Flashloader Reference Manual, Rev. 5, 11/2018 40 NXP Semiconductors Chapter 4 MCU flashloader command API Response: The target returns a GenericResponse packet with status code set to kStatus_Success before resetting the chip. The Reset command can also be used to switch boot from flash after successful flash image provisioning via the flashloader. After issuing the reset command, allow 5 seconds for the user application to start running from flash. 4.12 FlashProgramOnce/eFuseProgramOnce command The FlashProgramOnce/ eFuseProgramOnce command writes data (that is provided in a command packet) to a specified range of bytes in the program once field. Special care must be taken when writing to the program once field. • The program once field only supports programming once, so any attempt to reprogram a program once field gets an error response. • Writing to the program once field requires the byte count to be 4. The FlashProgramOnce command uses three parameters: index, byteCount, and data. Table 4-20. Parameters for FlashProgramOnce command Byte # Command 0-3 Index of program once/ eFuse field 4-7 Byte count (must be 4 or 8 for a FlashProgramOnce; must be 4 for eFuseProgramOnce) 8 - 11 Data 12 - 16 Data MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 41 FlashProgramOnce/eFuseProgramOnce command Host Target FlashProgramOnce: index = 0, byte Count = 4, data = 0x12345678 0x5a a4 10 00 7e 89 0e 00 00 03 00 00 00 00 04 00 00 00 78 56 34 12 Process Command ACK: 0x5a a1 Generic Response: 00 00 1a a0 00 00 02 00 00 00 00 0e 00 88 00 0c 0x5a a4 ACK: 0x5a a1 Figure 4-9. Protocol sequence for FlashProgramOnce command Table 4-21. FlashProgramOnce packet format example FlashProgramOnce Framing packet Command packet Parameter Value start byte 0x5A packetType 0xA4, kFramingPacketType_Command length 0x10 0x00 crc16 0x7E4 0x89 commandTag 0x0E – FlashProgramOnce flags 0 reserved 0 parameterCount 3 index 0x0000_0000 byteCount 0x0000_0004 data 0x1234_5678 Response: upon successful execution of the command, the target (MCU flashloader) returns a GenericResponse packet with a status code set to kStatus_Success, or to an appropriate error status code. MCU Flashloader Reference Manual, Rev. 5, 11/2018 42 NXP Semiconductors Chapter 4 MCU flashloader command API 4.13 FlashReadOnce/eFuseReadOnce command The FlashReadOnce/eFuseReadOnce command returns the contents of the program once field by given index and byte count. The FlashReadOnce command uses 2 parameters: index and byteCount. Table 4-22. Parameters for FlashReadOnce command Byte # Parameter Description 0-3 index Index of the program once field (to read from) 4-7 byteCount Number of bytes to read and return to the caller (must be 4 for eFuseReadOnce) Host Target FlashReadOnce: index = 0, byteCou nt = 4 0x5a a4 0c 00 c1 a5 0f 00 00 02 00 00 00 00 04 00 00 00 Process Command ACK: 0x5a a1 Generic Response: 00 00 00 04 00 00 00 78 56 34 12 0x5a a4 10 00 3f 6f af 00 00 03 00 ACK: 0x5a a1 Figure 4-10. Protocol sequence for FlashReadOnce command Table 4-23. FlashReadOnce packet format example FlashReadOnce Parameter Value Framing packet start byte 0x5A packetType 0xA4 length 0x0C 0x00 crc 0xC1 0xA5 commandTag 0x0F – FlashReadOnce flags 0x00 Command packet Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 43 Configure Memory command Table 4-23. FlashReadOnce packet format example (continued) FlashReadOnce Parameter Value reserved 0x00 parameterCount 0x02 index 0x0000_0000 byteCount 0x0000_0004 Table 4-24. FlashReadOnce response format example FlashReadOnce response Parameter Value Framing packet start byte 0x5A packetType 0xA4 length 0x10 0x00 crc 0x3F 0x6F commandTag 0xAF flags 0x00 reserved 0x00 parameterCount 0x03 status 0x0000_0000 byteCount 0x0000_0004 data 0x1234_5678 Command packet Response: Upon successful execution of the command, the target returns a FlashReadOnceResponse packet with a status code set to kStatus_Success, a byte count and corresponding data read from Program Once Field upon successful execution of the command, or returns with a status code set to an appropriate error status code and a byte count set to 0. 4.14 Configure Memory command The Configure Memory command configures an external memory device using a preprogrammed configuration image. The parameters passed are memory ID and memory address containing the configuration data. The configuration data is written to a RAM or MCU Flashloader Reference Manual, Rev. 5, 11/2018 44 NXP Semiconductors Chapter 4 MCU flashloader command API flash location and then this command directs the flashloader to use the data at that location to configure the external memory devices. See Chapter 6, External Memory Support, for configuration data details. Table 4-25. Parameters for Configure Memory command Byte # Command 0–3 Memory ID 4–7 Configuration block address Response: The target (MCU flashloader) returns a GenericResponse packet with a status code either set to kStatus_Success upon successful execution of the command, or set to an appropriate error code. 4.15 ReceiveSBFile command The ReceiveSBFile command starts the transfer of an SB file to the target. The command only specifies the size in bytes of the SB file that is sent in the data phase. The SB file is processed as it is received by the flashloader. Table 4-26. Parameters for Receive SB File command Byte # 0-3 Command Byte count Data Phase: The Receive SB file command has a data phase. The host sends data packets until the number of bytes of data specified in the byteCount parameter of the Receive SB File command are received by the target. Response: The target returns a GenericResponse packet with a status code set to the kStatus_Success upon successful execution of the command, or set to an appropriate error code. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 45 ReceiveSBFile command MCU Flashloader Reference Manual, Rev. 5, 11/2018 46 NXP Semiconductors Chapter 5 Supported peripherals 5.1 Introduction This section describes the peripherals supported by the MCU flashloader. 5.2 UART peripheral The MCU flashloader integrates an autobaud detection algorithm for the UART peripheral, thereby providing flexible baud rate choices. Autobaud feature: If UARTn is used to connect to the flashloader, then the UARTn_RX pin must be kept high and not left floating during the detection phase in order to comply with the autobaud detection algorithm. After the flashloader detects the ping packet (0x5A 0xA6) on UARTn_RX, the flashloader firmware executes the autobaud sequence. If the baudrate is successfully detected, then the flashloader sends a ping packet response [(0x5A 0xA7), protocol version (4 bytes), protocol version options (2 bytes), and crc16 (2 bytes)] at the detected baudrate. The MCU flashloader then enters a loop, waiting for flashloader commands via the UART peripheral. NOTE The data bytes of the ping packet must be sent continuously (with no more than 80 ms between bytes) in a fixed UART transmission mode (8-bit data, no parity bit, and 1 stop bit). If the bytes of the ping packet are sent one-by-one with more than an 80 ms delay between them, then the autobaud detection algorithm may calculate an incorrect baud rate. Supported baud rates: The baud rate is closely related to the MCU core and system clock frequencies. Typical baud rates supported are 9600, 19200, 38400, and 57600. Packet transfer: After autobaud detection succeeds, flashloader communications can take place over the UART peripheral. The following flow charts show: MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 47 UART peripheral • How the host detects an ACK from the target • How the host detects a ping response from the target • How the host detects a command response from the target Wait for ACK Report an error No Wait for 1 byte from target No Process NAK 0xA2 received? Yes No Reached maximum retries? 0x5A received? No Yes Wait for 1 byte from target 0xA1 received? Yes Yes End Report a timeout error Figure 5-1. Host reads an ACK from target via UART Wait for ping response End Wait for remaining bytes of ping response packet Wait for 1 byte from target No Yes 0x5A received? Yes Wait for 1 byte from target 0xA7 received? No Report Error Figure 5-2. Host reads a ping response from target via UART MCU Flashloader Reference Manual, Rev. 5, 11/2018 48 NXP Semiconductors Chapter 5 Supported peripherals Wait for response End Wait for 1 byte from target No Reached maximum retries? No Wait for payload data from target 0x5A received? Yes Yes Yes Wait for 1 byte from target Report a timeout error (End) 0xA4 received? Payload length less than supported length? Yes Wait for payload length part from target (2 bytes) No Set payload length to maximum supported length Wait for CRC checksum from target (2 bytes) No Figure 5-3. Host reads a command response from target via UART 5.3 USB HID peripheral The MCU flashloader supports loading data into flash via the USB peripheral. The target is implemented as a USB HID class. USB HID does not use framing packets. Instead, the packetization inherent in the USB protocol itself is used. The ability for the device to NAK Out transfers (until they can be received) provides the required flow control. The built-in CRC of each USB packet provides the required error detection. 5.3.1 Device descriptor The MCU flashloader configures the default USB VID/PID/Strings as shown below: Default VID/PID: • For legacy FSL device • VID = 0x15A2 • PID = 0x0073 • For NXP device • VID = 0x1FC9 • PID = 0x007F MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 49 USB HID peripheral Default Strings: • For legacy FSL device • Manufacturer [1] = "Freescale Semiconductor Inc." • Product [2] = "Kinetis bootloader" • For NXP device • Manufacturer [1] = "NXP Semiconductor Inc." • Product [2] = "Kinetis bootloader" 5.3.2 Endpoints The HID peripheral uses 3 endpoints: • Control (0) • Interrupt IN (1) • Interrupt OUT (2) The Interrupt OUT endpoint is optional for HID class devices, but the MCU flashloader uses it as a pipe, where the firmware can NAK send requests from the USB host. 5.3.3 HID reports There are 4 HID reports defined and used by the flashloader USB HID peripheral. The report ID determines the direction and type of packet sent in the report. Otherwise, the contents of all reports are the same. Table 5-1. HID reports Report ID Packet type Direction 1 Command OUT 2 Data OUT 3 Command IN 4 Data IN For all reports, these properties apply: Table 5-2. Report properties Usage Min 1 Usage Max 1 Logical Min 0 Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 50 NXP Semiconductors Chapter 5 Supported peripherals Table 5-2. Report properties (continued) Logical Max 255 Report Size 8 Report Count 34 Each report has a maximum size of 34 bytes. This is derived from the minimum flashloader packet size of 32 bytes, plus a 2-byte report header that indicates the length (in bytes) of the packet sent in the report. NOTE In the future, the maximum report size may be increased, to support transfers of larger packets. Alternatively, additional reports may be added with larger maximum sizes. The actual data sent in all of the reports looks like: Table 5-3. Report data 0 Report ID 1 Packet Length LSB 2 Packet Length MSB 3 Packet[0] 4 Packet[1] 5 Packet[2] ... N+3-1 Packet[N-1] This data includes the Report ID, which is required if more than one report is defined in the HID report descriptor. The actual data sent and received has a maximum length of 35 bytes. The Packet Length header is written in little-endian format, and it is set to the size (in bytes) of the packet sent in the report. This size does not include the Report ID or the Packet Length header itself. During a data phase, a packet size of 0 indicates a data phase abort request from the receiver. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 51 USB HID peripheral MCU Flashloader Reference Manual, Rev. 5, 11/2018 52 NXP Semiconductors Chapter 6 External memory support 6.1 Introduction This section describes the external memory devices supported by the MCU flashloader. To use an external memory device correctly, the device must be enabled with the corresponding configuration profile. If the external memory device is not enabled, then it cannot be accessed by the flashloader. The MCU flashloader enables specific external memory devices using memory identifiers, as shown below. Table 6-1. Memory ID for external memory devices Memory identifier External memory device 0x01 'Serial NOR over QuadSPI module' 0x08 'Parallel NOR over SEMC module' 0x09 'Serial NOR over FlexSPI module' 0x0a 'Serial NOR over SPIFI' 0x100 'SLC raw NAND over SEMC module' 0x101 'Serial NAND over FlexSPI module' 0x110 'Serial NOR/EEPROM over LPSPI module' 0x120 'SD over uSDHC' 0x121 'eMMC over uSDHC' 6.2 Serial NOR Flash through FlexSPI The MCU Flashloader supports read, write, and erase of external Serial NOR Flash devices via the FlexSPI Module. Before accessing Serial NOR Flash devices, the FlexSPI module must be configured properly using a simplified FlexSPI NOR Config option block or a complete 512-byte FlexSPI NOR Configuration Block. The flashloader can generate the 512-byte FlexSPI NOR Configuration Block based on the simplified Flash MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 53 Serial NOR Flash through FlexSPI Configuration Option Block for most Serial NOR Flash devices in the market. To protect Intellectual Property on external Serial NOR Flash, the Flashloader also supports image encryption and programming using OTPMK/SNVS keys if the chip includes the BEE module. See the Security Utility chapter for additional information. 6.2.1 FlexSPI NOR Configuration Block Table 6-2. Memory ID for external memory devices Name Offset Size (bytes) Description Tag 0x000 4 0x42464346, ascii:”FCFB” Version 0x004 4 0x56010000 [07:00] bugfix [15:08] minor [23:16] major = 1 [31:24] ascii ‘V’ - 0x008 4 Reserved readSampleClkSrc 0x00c 1 0 – Internal loopback 1 – loopback from DQS pad 3 – Flash provided DQS csHoldTime 0x00d 1 Serial Flash CS Hold Time Recommend default value is 0x03 csSetupTime 0x00e 1 Serial Flash CS Setup Time Recommend default value is 0x03 columnAdressWidth 0x00f 1 3 – For HyperFlash/ HyperRAM 12/13 – For Serial NAND, see datasheet to find correct value 0 – Other devices deviceModeCfgEnable 0x010 1 Device Mode Configuration Enable feature 0 – Disabled 1 – Enabled deviceModeType 0x011 1 Specify the Configuration command type 0 - Generic Command 1 - Quad Enable 2 - SPI to OPI Others - Reserved Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 54 NXP Semiconductors Chapter 6 External memory support Table 6-2. Memory ID for external memory devices (continued) Name waitTimeCfgCommands Offset 0x012 Size (bytes) 2 Description Wait time for all configuration commands, unit: 100us. 0 - Use read status command to determine the busy status for configuration commands Others - Delay "waitTimeCfgCommads" * 100us for configuration commands deviceModeSeq 0x014 4 Sequence parameter for device mode configuration [7:0] LUT sequence number [15:8] LUT sequence index for this sequence [31:16] Reserved for future use deviceModeArg 0x018 4 Device Mode argument, effective only when deviceModeCfgEnable = 1 configCmdEnable 0x01c 1 Config Command Enable feature 0 – Disabled 1 – Enabled configModeType 0x01d 3 Configure mode type, the same definition as "deviceModeType" configCmdSeqs 0x020 12 Sequences for Config Command, allow 4 separate configuration command sequences - 0x02c 4 Reserved cfgCmdArgs 0x030 12 Arguments for each separate configuration command sequence - 0x03c 4 Reserved controllerMiscOption 0x040 4 Bit0 – Enable differential clock Bit2 – Enable Parallel Mode Bit3 – Enable Word Addressable Bit4 – Enable Safe Config Freq Bit5 – Enable Pad Setting Override Bit6 – Enable DDR Mode Others - Reserved Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 55 Serial NOR Flash through FlexSPI Table 6-2. Memory ID for external memory devices (continued) Name deviceType Offset 0x044 Size (bytes) 1 Description 1 - Serial NOR 2 - Serial NAND sflashPadType 0x045 1 1 – Single pad 2 – Dual pads 4 – Quad pads 8 – Octal pads Others - Invalid value serialClkFreq 0x046 1 Device specific value, check System Boot chapter in the SoC RM for more details lutCustomSeqEnable 0x047 1 0 - Use pre-defined LUT sequence index and number 1 - Use LUT sequence parameters provided in this block Reserved 0x048 8 Reserved sflashA1Size 0x050 4 For SPI NOR, need to fill with actual size For SPI NAND, need to fill with actual size * 2 sflashA2Size 0x054 4 For SPI NOR, need to fill with actual size For SPI NAND, need to fill with actual size * 2 sflashB1Size 0x058 4 For SPI NOR, need to fill with actual size For SPI NAND, need to fill with actual size * 2 sflashB2Size 0x05c 4 For SPI NOR, need to fill with actual size For SPI NAND, need to fill with actual size * 2 csPadSettingOverride 0x060 4 Set to 0 if it is not supported sclkPadSettingOverride 0x064 4 Set to 0 if it is not supported dataPadSettingOverride 0x068 4 Set to 0 if it is not supported dqsPadSettingOverride 0x06c 4 Set to 0 if it is not supported timeoutInMs 0x070 4 Maximum wait time during read/write Not used in ROM commandInterval 0x074 4 Unit: ns Currently, it is used for SPI NAND at high working frequency Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 56 NXP Semiconductors Chapter 6 External memory support Table 6-2. Memory ID for external memory devices (continued) Name dataValidTime Offset 0x078 Size (bytes) 4 Description Time from clock edge to data valid edge, unit ns This field is used when the FlexSPI Root clock is less than 100MHz and the read sample clock source is device provided DQS signal without CK2 support [31:16] data valid time for DLLB in terms of 0.1ns [15:0] data valid time for DLLA in terms of 0.1ns busyOffset 0x07c 2 busy bit offset, valid range : 0-31 busyBitPolarity 0x07e 2 0 – busy bit is 1 if device is busy 1 – busy bit is 0 if device is busy lookupTable 0x080 256 Lookup table lutCustomSeq 0x180 48 Customized LUT sequence, see below table for details - 0x1b0 16 Reserved pageSize 0x1c0 4 Flash Page size sectorSize 0x1c4 4 Flash Sector Size ipCmdSerialClkFreq 0x1c8 4 IP Command Clock Frequency, the same definition as "serialClkFreq" isUniformBlockSize 0x1c9 4 Sector / Block size is identical or not - 0x1ca 2 - serialNorType 0x1cc 1 Serial NOR Flash Type: 0 - Extended SPI 1 - HyperBus 2 - Octal DDR needExitNoCmdMode 0x1cd 4 Reserved, set to 0 halfClkForNonReadCmd 0x1ce 1 Divide the clock for SDR command by 2 Need to set for the device that only supports DDR read, other commands are SDR commands needrestorNoCmdMode 0x1cf 1 Reserved, set 0 blockSize 0x1d0 4 Flash Block size - 0x1d4 44 Reserved MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 57 Serial NOR Flash through FlexSPI NOTE To customize the LUT sequence for some specific device, users need to enable “lutCustomSeqEnable” and fill in corresponding “lutCustomSeq” field specified by the command index below. For Serial (SPI) NOR, the pre-defined LUT index is as following: Table 6-3. Lookup table index pre-assignment for FlexSPI NOR Name Index in lookup table Description Read 0 Read command Sequence ReadStatus 1 Read Status command ReadStatusXpi 2 Read Status command under OPI mode WriteEnable 3 Write Enable command sequence WriteEnableXpi 4 Write Enable command under OPI mode EraseSector 5 Erase Sector Command EraseBlock 8 Erase Block Command PageProgram 9 Page Program Command ChipErase 11 Full Chip Erase ExitNoCmd 15 Exit No Command Mode as needed Reserved 6,7,10,12,13,14 All reserved indexes can be freely used for other purpose 6.2.2 FlexSPI NOR Configuration Option Block The FlexSPI NOR Configuration Option Block is organized by 4-bit unit. It is expandable, and current definition of the block is as shown in the following table. The Flashloader detects FNORCB using the read SFDP command supported by most flash devices that are JESD216(A/B)- compliant. However, JESD216A/B only defines the dummy cycles for Quad SDR reads. In order to get the dummy cycles for DDR/DTR read mode, the flashloader supports auto probing by writing test patterns to offset 0x200 on the external memory devices. To get optimal timing, the readSampleClkSrc is set to 1 MCU Flashloader Reference Manual, Rev. 5, 11/2018 58 NXP Semiconductors Chapter 6 External memory support for Flash devices that do not support external provided DQS pad input. It is set to 3 for flash devices that do support external provided DQS pad input, such as HyperFlash. FlexSPI_DQS pad is not used for any other purpose. Table 6-4. FlexSPI NOR Configuration Option Block Offset 0 Field Option0 Description TAG [31:28] 0x0C Option size [27:24] Size in bytes = (Option Size + 1) *4 Device detectio n type [23:20] Query CMD Pad(s) [19:16] 00-1 QuadSPI 2-4 SDR 3-8 1QuadSPI DDR CMD Pad(s) [15:12] 0-1 2-4 3-8 3HyperFL ASH 3V 8Adesto OPI DDR 0 - PortA 1 - Parallel Mode drive_strength[2 7:24] 3 - Byte order is swapped under OPI DDR mode Devicespecific, see System Boot chapter in SoC RM for more details 4 - QE bit is bit 1 in StatusRe g2, enable comman d is 0x31 6Micron OPI DDR flash_connectio n[31:28] 1 - QE bit is bit 6 in StatusRe g1 Max Freq [3:0] 3 - QE bit is in bit7 in StatusRe g2 4 - MXIC OPI DDR Option1 Optional Misc [11:4] 2 - QE bit is bit 1 in StatusRe g2 2HyperFL ASH 1V8 4 Quad Enable Type [11:8] Reserved [23:8] The drive strength Reserved for future of FlexSPI pad. use See IOMUXC chapter in SoC RM for more details. Dummy Cycle [7:0] 0 - Use autoprobing dummy cycle Others - dummy cycles provided in data sheet • Tag - Fixed as 0x0C. • Option Size - Provide scalability for future use, the option block size equals to (Option size + 1) * 4 bytes. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 59 Serial NOR Flash through FlexSPI • Device Detection type - Software defined device types used for config block auto detection. • Query Command Pad(s) - Command pads (1/4/8) for the SFDP command. • CMD pad(s) - Commands pads for the Flash device (1/4/8). For devices that use 1-1-4, 1-4-4, 1-1-8, or 1-8-8 mode, CMD pad(s) value is always 0x0. For devices that only support 4-4-4 mode for high performance, CMD pads value is 2. For devices that only support 8-8-8 mode for high performance, CMD pads value is 3. • Quad Enable Type - Specify the Quad Enable sequence. Only applicable for devices that are JESD216-compliant. This field is ignored if device supports JESD216A or later version. • Misc - Specify miscellaneous mode for selected flash type. • Max Frequency - The maximum frequency for the specified flash device. • Dummy Cycle - User provided dummy cycles for SDR/DDR read command. 6.2.2.1 Typical use cases for FlexSPI NOR Configuration Block • • • • • • • • • • QuadSPI NOR - Quad SDR Read: option0 = 0xc0000006 (100 MHz). QuadSPI NOR - Quad DDR Read: option0 = 0xc0100003 (60 MHz). HyperFlash 1V8: option0 = 0xc0233007 (133 MHz). HyperFlash 3V0: option0 = 0xc0333006 (100 MHz). HyperFlash 3V0: option0 = 0xc0333006 (100 MHz). MXIC OPI DDR: option0 = 0xc0403006 (100 MHz), for devices where data order is consistent between SDR mode and DDR mode, option0 = 0xc0403036, for device that the data order is inconsistent between SDR mode and DDR mode. Micron Octal DDR: option0=0xc0600006 (100 MHz). Micron OPI DDR: option0=0xc0603006 (100 MHz), SPI->OPI DDR. Micron OPI DDR (DDR read enabled by default): option0=0xc0633006(100 MHz). Adesto OPI DDR: option0=0xc0803007(133 MHz). 6.2.2.2 Programming Serial NOR Flash device using FlexSPI NOR Configuration Option Block The MCU Flashloader supports generating complete FNORCB using the configurememory command. It also supports programming the generated FNORCB to the start of the flash memory using a specific option "0xF000000F". An example for configuring and accessing HyperFlash (assuming it is a blank HyperFlash device)o is mentioned below. blhost -u -- fill-memory 0x2000 0x04 0xc0233007 (write option block to SRAM address 0x2000) blhost -u -- configure-memory 0x09 0x2000 (configure HyperFLASH using option block) MCU Flashloader Reference Manual, Rev. 5, 11/2018 60 NXP Semiconductors Chapter 6 External memory support blhost -u -- fill-memory 0x3000 0x04 0xf000000f (write specific option to SRAM address 0x3000) blhost -u -- configure-memory 0x09 0x3000 (program FNORCB to the start of HyperFLASH) blhost -u -- write-memoryimage.bin 6.3 Serial NAND Flash through FlexSPI Some MCUs support booting from Serial NAND Flash devices via BootROM. The MCU Flashloader works as a companion to program the boot image into the Serial NAND. The Flashloader supports generating corresponding boot data structures like the FlexSPI NAND Firmware Configuration Block (FCB) and Discovered Bad Block Table (DBBT) required by the BootROM. See the System Boot Chapter in the device reference manual for details regarding FlexSPI NAND boot flow. This chapter only focuses on generating FCB, DBBT, and programming FCB, DBBT, and boot images using Flashloader. The Flashloader can configure Serial NAND devices using FCB, or a simplified FCB option block. The Flashloader can generate a complete FCB based on the simplified FCB option block. 6.3.1 FlexSPI NAND Firmware Configuration Block (FCB) FCB is a 1024-byte data structure that contains the optimum NAND timings, page address of Discovered Bad Block Table (DBBT) Search Area firmware info (including the start page address and page count), and more. Table 6-5. FlexSPI NAND Firmware Configuration Block Definition Name Offset Size (bytes) Description crcChecksum 0x000 4 Checksum fingerprint 0x004 4 0x4E46_4342 ASCII: “NFCB” version 0x008 4 0x0000_0001 DBBTSearchStartPage 0x00c 4 Start Page address for bad block table search area searchStride 0x010 2 Search stride for DBBT and FCB search Not used by ROM, max value is defined in Fusemap. See the Fusemap in SoC RM for more details. searchCount 0x012 2 Copies on DBBT and FCB Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 61 Serial NAND Flash through FlexSPI Table 6-5. FlexSPI NAND Firmware Configuration Block Definition (continued) Name Offset Size (bytes) Description Not used by ROM, max value is defined in Fusemap. See the Fusemap in SoC RM for more details. firmwareCopies 0x014 4 Firmware copies Valid range 1-8 Reserved 0x018 40 Reserved for future use Must be set to 0 firmwareInfoTable 0x40 64 This table consists of (up to 8 entries): Field Reserved 0x080 128 Size(By Descrip tes) tion StartPag 4 e Start page of this firmware pageCo 4 unt Pages in this firmware Reserved Must be set to 0 spiNandConfigBlock 0x100 512 Serial NAND configuration block over FlexSPI Reserved 0x300 256 Reserved Must be set to 0 6.3.2 FlexSPI NAND Configuration Block The optimum Serial NAND parameters are defined in FlexSPI NAND Configuration Block (FNANDCB). FNANDCB is a 512-byte data structure as shown in the following table. Table 6-6. FlexSPI NAND Configuration Block Definition Name memCfg Offset 0x00 Size (bytes) 480 Description The same definition as the first 480 bytes in FlexSPI NOR Configuration Block Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 62 NXP Semiconductors Chapter 6 External memory support Table 6-6. FlexSPI NAND Configuration Block Definition (continued) Name Offset Size (bytes) Description pageDataSize 0x1c0 480 Page size in bytes. In general, it is 2048 or 4096 pageTotalSize 0x1c4 4 It equals to 2 ^ width of column address pagesPerBlock 0x1c8 4 Pages per Block bypassReadStatus 0x1cc 1 0 - Perform Read Status 1 - Bypass Read Status bypassEccRead 0x1cd 1 0 - Perform ECC Read 1 - Bypass ECC Read hasMultiPlanes 0x1ce 1 0 - Device has only 1 plane 1 - Device has 2 planes - 0x1cf 1 Reserved eccCheckCustomEnable 0x1d0 1 0 - Use the commonly used ECC check command and masks 1 - Use ECC check related masks provide in this configuration block ipCmdSerialClkFreq 0x1d1 1 Chip specific value, set to 0 readPageTimeUs 0x1d2 2 Wait time during page read, only effective if "bypassReadStatus" is set to 1 eccStatusMask 0x1d4 4 ECC status mask, only effective if "eccCheckCustomEnable" is set to 1 eccFailureMask 0x1d8 4 ECC Check Failure mask, only effective if "eccCheckCustomEnable" is set to 1 blocksPerDevice 0x1dc 4 Blocks in a Serial NAND device - 0x1e0 32 Reserved NOTE For Serial (SPI) NAND, the pre-defined LUT index is as follows: Table 6-7. Lookup Table index pre-assignment for FlexSPI Command Index 0 Name ReadFromCache Index in lookup table 0 Description Read From cache Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 63 Serial NAND Flash through FlexSPI Table 6-7. Lookup Table index pre-assignment for FlexSPI (continued) Command Index Name Index in lookup table Description 1 ReadStatus 1 Read Status 2 WriteEnable 3 Write Enable 3 BlockErase 5 Erase block 4 ProgramLoad 9 Program Load 5 ReadPage 11 Read page to cache 6 ReadEccStatus 13 Read ECC Status 7 ProgramExecute 14 Program Execute 8 ReadFromCacheOdd 4 Read from Cache while page in odd plane 9 ProgramLoadOdd 10 - - Reserved 2, 6, 7, 8, 12, 15 All reserved indexes can be freely used for other purposes 6.3.3 FlexSPI NAND FCB option block FlexSPI NAND FCB option block defines the major parameters required by FCB, such as image info. The detailed configuration block definition is shown below. Table 6-8. FlexSPI NAND FCB option block Offset Field Size Description 0 option0 4 Offset Field Description 31:28 tag Fixed to 0x0C 27:24 searchCount Valid value: 23:20 searchStride 1-4 0 - 64 pages 1 - 128 pages 2 - 256 pages 3 - 32 pages NOTE: This field is aligned with Fuse definition 19:12 Reserved - 11:8 addressType 0 - byte address Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 64 NXP Semiconductors Chapter 6 External memory support Table 6-8. FlexSPI NAND FCB option block (continued) 1 - block address 7:4 Reserved - 3:0 Option size Option size in longword, Min size is 3, Max size is 10 4 nandOptionAddr 4 Address of NAND option defined above 8 imageInfo 4-32 Image info is a map of below info, maximum entry size is 8 • • • • • • Field Size Description blockCount 2 Maximum allowed blocks for this image blockId 2 Start block index for this image NOTE “searchCount” should match the one provisioned in eFUSE “searchStride” should match the one provisioned in eFUSE “addressType” specifies the address type for the start address of erase, write and read operation in Flashloader “Option size” specifies the total size of the option block size in longwords “nandOptionAddr” specifies the address that stores FlexSPI NAND Configuration Option “imageInfo” is an array that holds each image info used during boot. For example, 0x00040002 means the block Id is 4, maximum allowed block count is 2 6.3.4 FlexSPI NAND Configuration Option Block MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 65 Serial NAND Flash through FlexSPI Currently, all Serial NAND devices in the market support the same commands. The differences are the NAND size, page size, and more. This option block focuses on these differences, and the detailed block definitions are shown below: Table 6-9. FlexSPI NAND Configuration Option Block Offset 0 Field option 0 Description TAG [31:28] Option size [27:24] Reserve Flash d [23:20] size [19:16] 0x0c Size in 0 bytes = (Option Size + 1) *4 Has multipla nes [15:12] Pages Per Block [11:8] Page Max Size Freq (Kbytes) [3:0] [7:4] 0512Mb 0-1 plane 0 - 64 2 - 2KB 1 - 128 4 - 4KB 1 - 1Gb 1-2 planes 2 - 2Gb 2 - 256 NAND Freq: Device specific 3 - 32 4 - 4Gb 4 option 1 This field is optional, it is effective if option size in option0 is greater than 0 Reserved [31:8] Manufacturer ID [7:0] Reserved for future use Actual Manufacturer ID provided in Serial NAND device datasheet For example, 0x2C is the manufacture ID assigned to Micron 6.3.5 Example usage with Flashloader Flashloader can generate FCB and DBBT based on a specified FlexSPI NAND FCB option block. Assuming FCB parameters are: • • • • FCB and DBBT copies are 2. Firmware copies are 2. Firmware 0 starts at block 4, maximum block count is 2. Firmware 1 starts at block 8, maximum block count is 2. Assuming Serial NAND parameters are: • Flash size: 1 Gb • Plane number:1 • Pages Per Block: 64 MCU Flashloader Reference Manual, Rev. 5, 11/2018 66 NXP Semiconductors Chapter 6 External memory support • Page Size: 2 KB • Maximum Frequency: 80 MHz Below are the example steps for generating FlexSPI NAND Configuration Option block. Write FlexSPI NAND Configuration Option Block to SRAM: blhost -u -- fill-memory 0x2030 0x4 0xc0010025 Write FlexSPI NAND FCB Option Block to SRAM: blhost blhost blhost blhost -u -u -u -u ----- fill-memory fill-memory fill-memory fill-memory 0x2000 0x2004 0x2008 0x200c 0x4 0x4 0x4 0x4 0xc2000104 0x2030 // nandOptionAddr = 0x2030 0x00040002 // blockId = 4, blockCount = 2 0x00080002 // blockId = 8, blockCount = 2 Configure Serial NAND using FCB option and NAND option: blhost -u -- configure-memory 0x101 0x2000 Erase and Program image blhost blhost blhost blhost -u -u -u -u ----- flash-erase-region 0x4 0x2 write-memory 0x4 image.bin flash-erase-region 0x8 0x2 write-memory 0x8 image.bin 0x101 // Erase 2 blocks 0x101 // Program image.bin 0x101 // Erase 2 blocks 0x101 // Program image.bin starting to block starting to block from block 4 4 from block 8 8 6.4 SD/eMMC through uSDHC Some MCUs supports booting from SD/eMMC devices via BootROM. The MCU Flashloader supports flashing the boot image into the SD/eMMC devices. This section explains the usage of SD/eMMC via Flashloader. 6.4.1 SD Configuration Block The SD Card must be initialized before the Flashloader accesses SD memory. The SD configuration block is a combination of several necessary SD configurations used by Flashloader to initialize the card. Table 6-10 lists the detailed description of each bits in the SD configuration block. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 67 SD/eMMC through uSDHC Table 6-10. SD Configuration Block Definition Word index Bit field Name Description Word0 [31:28] TAG SD configuration block tag used to mark if the block is valid or not 0xD: Valid block Others: Invalid [27:26] RSV 0x0 [25:24] PWR_DOWN_TIME SD power down delay time before power up the SD card Only valid when PWR_CYCLE_ENABLE is enable 0: 20 ms 1: 10 ms 2: 5 ms 3: 2.5 ms 23 PWR_POLARITY SD power control polarity Only valid when PWR_CYCLE_ENABLE is enabled 0: Power down when uSDHC.RST is set low 1: Power down when uSDHC.RST is set high [22:21] RSV 0x0 20 PWR_UP_TIME SD power up delay time to wait voltage regulator output stable Only valid when PWR_CYCLE_ENABLE is enabled 0: 5 ms 1: 2.5 ms 19 PWR_CYCLE_ENABLE Executes a power cycle before starting the initialization progress [1] 0: Disable for non-UHSI timing [2] Enable for UHSI timing 1: Enable [18:15] RSV 0x0 [14:12] TIMING_INTERFACE SD speed timing selection. 0: Normal/SDR12 1: High/SDR25 Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 68 NXP Semiconductors Chapter 6 External memory support Table 6-10. SD Configuration Block Definition (continued) 2: SDR50 3: SDR104 4: DDR50 (not support yet) 5-7: Reserved [11:9] RSV 0x0 8 BUS_WIDTH SD bus width selection. 0: 1 bit 4-bit for UHSI timing 1: 4 bit Word1 [7:0] RSV 0x0 [31:0] RSV 0x0 NOTE Flashloader toggles the uSDHC.RST pin to execute the power cycle progress. This needs board-level hardware support. If the hardware does not support controlling SD power, the power cycle progress cannot fully reset the SD card. NOTE UHSI timing includes SDR50, SDR104, and DDR50. 6.4.2 Example usage with Flashloader This section uses the SDR25 timing and 4-bit bus width as an example. To make sure the SD card is reset before the initialization progress, it is suggested to enable the power cycle. Choose the default settings of power cycle. The hex of the SD configuration block is 0xD0082100. • Write the configuration block to MCU internal RAM. blhost -u –– fill-memory 0x20000000 0x4 0xD0082100 RAM address 0x20000000 is selected as an example. User can select any RAM position which is available to use. The user can also select an address located at an XIP external memory, such as Flex SPI NOR Flash. • Execute the initialization progress using configure-memory command. blhost -u –– configure-memory 0x120 0x20000000 MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 69 SD/eMMC through uSDHC 0x120 is the memory ID of eMMC card device. If the eMMC card is initialized successfully, then a “Success” message is received and SD memory is available to be accessed by Flashloader. If an error occurred, see Chapter 8 Appendix A, "Status and error codes". for debugging. • After SD is initialized, the user can use get the property 25 command to check the SD card capacity. blhost -u –– get-property 25 0x120 • To program the boot image, the user needs to erase the SD card memory first, then program the image. blhost -u –– flash-erase-region 0x0 0x1000 0x120 blhost -u –– write-memory 0x400 C:\Image\bootImage.bin 0x120 0x0 at the flash-erase-region command line and 0x400 at the write-memory command line is the byte offset of the SD memory, not the sector offset. That means 4 K bytes starting from the start address of SD memory are erased, then the boot image C:\Image\bootImage.bin is written to the space starting from SD second Block. • To check if the boot image is programmed successfully, the user can read the data out. blhost –u –– read-memory 0x400 0x1000 0x120 In most cases, the user does not need to read the data out to verify if the boot image is written successfully or not. Flashloader guarantees this. 6.4.3 eMMC Configuration Block Similar to the SD Card, eMMC also must be initialized before accessing it. The eMMC configuration block is used to tell Flashloader how to initialize the eMMC device. To use the fast boot feature offered by BootROM, eMMC also must be pre-configured. The fast boot configuration is also included in the eMMC configuration block. Table 8-11 lists the detailed description of each bits in the eMMC configuration block. Table 6-11. eMMC Configuration Block Definition Word index Bit field Name Description Word0 [31:28] TAG eMMC configuration block tag used to mark if the block is valid or not Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 70 NXP Semiconductors Chapter 6 External memory support Table 6-11. eMMC Configuration Block Definition (continued) 0xC: Valid block Others: Invalid 27 RSV 0x0 [26:24] PARTITION_ACCESS Select eMMC partition which the Flashloader write the image or data to 0: User data area 1: Boot partition 1 2: Boot partition 2 3: RPMB 4: General Purpose parition 1 5: General Purpose parition 2 6: General Purpose parition 3 7: General Purpose parition 4 23 RSV 0x0 [22:20] BOOT_PARTITION_ENABLE Select the boot partition used for fast boot Only valid when BOOT_CONFIG_ENABLE is set 0: Not enabled 1: Boot partition 1 2: Boot partition 2 3-6: Reserved 7: User data area [19:18] RSV 0x0 [17:16] BOOT_BUS_WIDTH Select the bus width used for fast boot 0: x1(SDR), x4(DDR) 1: x4(SDR,DDR) 2: x8(SDR,DDR) 3: Reserved [15:12] TIMING_INTERFACE Select the bus timing when Flashloader accesses eMMC memory 0: Normal 1: HS 2: HS200(Not support yet) 3: HS400(Not support yet) 4-15: Reserved Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 71 SD/eMMC through uSDHC Table 6-11. eMMC Configuration Block Definition (continued) [11:8] BUS_WIDTH Select the bus width when Flashloader accesses eMMC memory 0: x1 SDR 1: x4 SDR 2: x8 SDR 3-4: Reserved 5: x4 DDR 6: x8 DDR 7-15: Reserved [7:6] RSV 0x0 [5:4] BOOT_MODE 0: Normal 1: HS 2: DDR 3: Reserved 3 RESET_BOOT_BUS_CONDI Configure eMMC behavior TIONS after exiting fast boot 0: Reset to x1,SDR,Normal 1: Retain boot config 2 BOOT_ACK Configure eMMC ACK behavior at fast boot. 0: NO ACK 1: ACK 1 RSV 0x0 0 BOOT_CONFIG_ENABLE Determine if write fast boot configurations into eMMC or not [2] 0: Boot configuration will be ignored 1: Boot configuration will be written into device Word1 [31:26] RSV 0x0 [25:24] PWR_DOWN_TIME eMMC power down delay time before power up the eMMC card Only valid when PWR_CYCLE_ENABLE is enabled 0: 20 ms 1: 10 ms 2: 5 ms 3: 2.5 ms 23 PWR_POLARITY eMMC power control polarity. Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 72 NXP Semiconductors Chapter 6 External memory support Table 6-11. eMMC Configuration Block Definition (continued) Only valid when PWR_CYCLE_ENABLE is enabled 0: Power down when uSDHC.RST set low 1: Power down when uSDHC.RST set high [22:21] RSV 0x0 20 PWR_UP_TIME eMMC power up delay time to wait voltage regulator output stable Only valid when PWR_CYCLE_ENABLE is enabled 0: 5 ms 1: 2.5 ms 19 PWR_CYCLE_ENABLE Execute a power cycle before start the SD initialization progress 0: Disable 1: Enable 18 1V8_ENABLE Select if set uSDHC.VSELECT pin 0: Not set vselect pin 1: Set vselect pin high [17:0] RSV 0x0 NOTE Fast boot configuration includes BOOT_PARTITION_ENABLE, BOOT_BUS_WIDTH, BOOT_MODE, RESET_BOOT_BUS_CONDITIONS, and BOOT_ACK. 6.4.4 Example usage with Flashloader This section uses the 8-bit DDR mode as an example, and boot image is written to the user data area. After writing the boot image, the user wants boot ROM to boot the image via fast boot to decrease the boot time. Fast boot also uses the same mode (8-bit DDR mode). ACK is enabled for fast boot. The hex of the eMMC configuration block is 0xC0721625, 0x00000000 MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 73 SD/eMMC through uSDHC • Write the configuration block to MCU internal RAM. blhost -u –– fill-memory 0x20000000 0x4 0xC0721625 blhost -u –– fill-memory 0x20000004 0x4 0x00000000 RAM address 0x20000000 is selected as an example. The user can select any RAM position which is available to use. The user also can select an address located at an XIP external memory, such as Flex SPI NOR Flash. • Execute the initialization progress using configure-memory command. blhost -u –– configure-memory 0x121 0x20000000 0x121 is the memory ID of eMMC card device. If the eMMC card is initialized successfully, then a “Success” message is recieved. If an error occurred, see Chapter 9, "Appendix A: status and error codes" for debugging. • After step 2, eMMC is available to access. The user can use get the property 25 command to check the eMMC card capacity. blhost -u –– get-property 25 0x121 • To program the boot image, the user needs to erase the eMMC card memory before program the image. blhost -u –– flash-erase-region 0x0 0x2000 0x121 blhost -u –– write-memory 0x400 C:\Image\bootImage.bin 0x121 the address of eMMC memory in the command line is byte address, not sector address. That means 8 K bytes starting from the start address of eMMC memory are erased, then the boot image C:\Image\bootImage.bin writes to eMMC 1st Block. • To check if the boot image is programmed successfully, the user can read the data out. blhost –u –– read-memory 0x200 0x2000 0x121 In most cases, the user does not need to read the data out to verify if the boot image is written successfully or not. Flashloader guarantees this when the user gets a “Success” status for write-memory command. If user wants to switch to other partitions of the eMMC device, they need to reconfigure the eMMC devices two times. • Select the Boot partition 1, bus width and speed timing are kept unchanged. Fast boot configuration is not necessary if user does not want to update it. blhost blhost blhost blhost -u -u -u -u –– –– –– –– fill-memory 0x20000000 0x4 0xC1001600 configure-memory 0x121 0x20000000 flash-erase-region 0x0 0x1000 0x121 write-memory 0x400 C:\Image\bootPartitionOneImage.bin 0x121 MCU Flashloader Reference Manual, Rev. 5, 11/2018 74 NXP Semiconductors Chapter 7 Security utilities 7.1 Introduction The MCU Flashloader supports certain security utilities that can generate security related blocks easily. See that the Flashloader itself must be signed first to enable the security utilities correctly. 7.2 Image encryption and programming For devices with the BEE module, it supports two encrypted regions using two unique crypto keys. Each encrypted region can support up to 3 sub-divided FAC regions. See the details of the image decryption and data structure required for image decryption in System Boot Chapter in SoC’s RM. In the section, it focuses on encrypted image generation and programming using Flashloader. Flashloader generates encrypted images based on a simplified PRDB option block, which is defined below. MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 75 Image encryption and programming NOTE The Flashloader only supports image encryption and programming for the first encrypted region using the OTPMK/ SNVS key. Table 7-1. PRDB option block Offset 0 Field Option Size (bytes) Description 4 Tag [31:28] 0xE 4 Fac 8-24 Region info Key source [27:24] Mode [23:20] 01-AES OTPMK / CTR SNVS FAC Region Count [19:16] 1/2/3 Offset Region1 Region2 Region3 LockOpt Protecti Protecti Protecti ion [3:0] on on on Mode Mode Mode [15:12] [11:8] [7:4] 0/1/ 0/1 0/1 Field 0 - No Lock Description 0 Start Fac Region Start 4 Size Fac Region Size NOTE • • • • Tag is fixed as 0x0E. Key Source can be OTPMK/SNVS [255:128]. Mode: It is recommended to use AES-CTR mode. FAC Region Count: Maximum allowed FAC region number is 3 (shared by encrypted region 0 and encrypted region 1). • Region n Protection mode: 0 – No protection, 1 – Debug disabled. • Lock Option: Must be 0. 7.2.1 Example to generate encrypted image and program to Flash Take HyperFlash as an example, assuming the encrypted info is: • Key source: OTPMK/SNVS [255:128]. • FAC region Count: 2. • Region Protection mode: 1. MCU Flashloader Reference Manual, Rev. 5, 11/2018 76 NXP Semiconductors Chapter 7 Security utilities Below are the steps to create a PRDB option block. Configure HyperFlash using FlexSPI NOR Configuration Option Block: blhost blhost blhost blhost -u -u -u -u ----- fill-memory 0x2000 0x04 0xc0233007 //(133MHz) configure-memory 0x9 0x2000 fill-memory 0x3000 0x04 0xf000000f configure-memory 0x09 0x3000 Prepare PRDB0 info using PRDB option block: blhost -u blhost -u //Program blhost -u -- fill-memory 0x4000 0x04 0xe0121100 -- configure-memory 0x09 0x4000 HyperFLASH -- write-memory image.bin 7.3 KeyBlob generation and programming 7.3.1 KeyBlob KeyBlob is a data structure that wraps the DEK for image decryption using AES-CCM algorithm. The whole KeyBlob data structure is shown below. Table 7-2. KeyBlob Data structure Field Header AEAD Size (bytes) Description 4 Offset Field Description 0 tag Fixed value: 0x81 1-2 len Length of KeyBlob block, 16-bit bigendian order 3 par KeyBlob Version, set to 0x42 or 0x43 4 Offset Field Description 0 mode Fixed to 0x66, CCM mode 1 alg Fixed to 0x55, Crypto Algorithm: AES 2 mac_bytes Fixed to 16 3 aad_bytes Fixed to 0 Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 77 KeyBlob generation and programming Table 7-2. KeyBlob Data structure (continued) Field Size (bytes) EBK Description 16 / 32 Blob key is used for DEK encryption, it is a random number generated by TRNG engine Blob key is encrypted to EBK by a key derived from Security Engine such as SNVS or CAAM EDEK 16 / 24 / 32 DEK is used for boot image encryption, it is encrypted to EDEK by the BK with AES algorithm using AES-CCM mode MAC 16 MAC is generated during DEK encryption 7.3.2 KeyBlob Option Block The MCU Flashloader supports KeyBlob generation and programming using a simplified option block called KeyBlob Option Block. Table 7-3. KeyBlob Data structure Offset 0 Field option Size Description 4 Offset Field Description 31:28 Tag Fixed to 0x0B 27:24 type 0 - Update, used to update the keyblob context 1 - Program used to notify memory driver to program Keyblob to destination 23:20 size keyblob_info size must equal to 3 if type = 0, ignored if type =1 19:8 Reserved - 7:4 dek_size DEK size 0 - 128 bits 1 - 192 bits 2 - 256 bits Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 78 NXP Semiconductors Chapter 7 Security utilities Table 7-3. KeyBlob Data structure (continued) Offset Field Size Description Offset Field Description Effective if type = 0, ignored if type = 1 3:0 image_index Boot image index For example, index for firmwareTable effective if type = 1, ignored if type = 0 1 dek_addr 4 Start address for the memory holds DEK 2 keyblob_offset 4 The relative Keyblob offset in the selected image For example, a signed image that contains IVT, encrypted application, CSF, Key blob IVT is at offset 0x400 Encrypted image is at offset 0x2000 CSF is at offset 0xA000 KeyBlob is at offset 0xB000 NOTE: For NAND device, keyblob_offset must be page aligned 7.3.3 Example to generate and program KeyBlob Generate KeyBlob // Write DEK to RAM blhost -u -- write-memory 0x2100 dek.bin // Construct KeyBlob option blhost -u -- fill-memory 0x2080 4 0xb0300000 // tag = 0x0b, type = 0, size = 3, dek_size = 0 (128bits) blhost -u -- fill-memory 0x2084 4 0x2100 // dek_addr = 0x2100 blhost -u -- fill-memory 02088 4 0x80000 // keybob_offset = 0x80000, keybob is located at offset 0x80000 in application image // Update KeyBlob Info MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 79 KeyBlob generation and programming blhost -u -- configure-memory 0x101 0x2080 // Update KeyBlob Info (memory id: 0x101 FlexSPI NAND) // Program KeyBlob blhost -u -- fill-memory 0x2080 0xb1000000 // tag = 0x0b, type = 1, image_index = 0 blhost -u -- configure-memory 0x101 0x2080 // Generate KeyBlob and program it into offset in the selected Image memory region MCU Flashloader Reference Manual, Rev. 5, 11/2018 80 NXP Semiconductors Chapter 8 Appendix A: status and error codes Status and error codes are grouped by component. Each component that defines errors has a group number. This expression is used to construct a status code value. status_code = (group * 100) + code Component group numbers are listed in this table. Table 8-1. Component group numbers Group Component 0 Generic errors 100 Bootloader 101 SB loader 102 Memory interface 103 Property store 104 CRC checker 105 Packetizer 106 Reliable update The following table lists all of the error and status codes. Table 8-2. Error and status codes Name Value Description kStatus_Success 0 Operation succeeded without error kStatus_Fail 1 Operation failed with a generic error kStatus_ReadOnly 2 Property cannot be changed because it is read-only kStatus_OutOfRange 3 Requested value is out of range kStatus_InvalidArgument 4 The requested command's argument is undefined kStatus_Timeout 5 A timeout occurred kStatus_NoTransferInProgress 6 The current transfer status is idle kStatus_SDMMC_NotSupportYet 1800 Not supported this feature kStatus_SDMMC_TransferFailed 1801 Failed to communicate with the device Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 81 Table 8-2. Error and status codes (continued) Name Value Description kStatus_SDMMC_SetCardBlockSizeFail 1802 ed Failed to set the block size kStatus_SDMMC_HostNotSupport 1803 Host doesn't support this feature kStatus_SDMMC_CardNotSupport 1804 The card does not support this feature kStatus_SDMMC_AllSendCidFailed 1805 Failed to send CID kStatus_SDMMC_SendRelativeAddress 1806 Failed Failed to send relative address kStatus_SDMMC_SendCsdFailed 1807 Failed to send CSD kStatus_SDMMC_SelectCardFailed 1808 Failed to select card kStatus_SDMMC_SendScrFailed 1809 Failed to send SCR kStatus_SDMMC_SetDataBusWidthFail 1810 ed Failed to set bus width kStatus_SDMMC_GoIdleFailed Go idle failed 1811 kStatus_SDMMC_HandShakeOperation 1812 ConditionFailed Failed to send operation condition kStatus_SDMMC_SendApplicationCom mandFailed 1813 Failed to send application command kStatus_SDMMC_SwitchFailed 1814 Switch command failed kStatus_SDMMC_StopTransmissionFail 1815 ed Stop transmission failed kStatus_SDMMC_WaitWriteCompleteFa 1816 iled Failed to wait write complete kStatus_SDMMC_SetBlockCountFailed Failed to set block count 1817 kStatus_SDMMC_SetRelativeAddressF 1818 ailed Failed to set relative address kStatus_SDMMC_SwitchBusTimingFaile 1819 d Failed to switch high speed kStatus_SDMMC_SendExtendedCsdFai 1820 led Failed to send EXT_CSD kStatus_SDMMC_ConfigureBootFailed Failed to configure boot 1821 kStatus_SDMMC_ConfigureExtendedCs 1822 dFailed Failed to configure EXT_CSD kStatus_SDMMC_EnableHighCapacityE 1823 raseFailed Failed to enable high capacity erase kStatus_SDMMC_SendTestPatternFaile 1824 d Failed to send test pattern kStatus_SDMMC_ReceiveTestPatternF 1825 ailed Failed to receive test pattern kStatus_SDMMC_InvalidVoltage 1829 Invalid voltage kStatus_SDMMC_TuningFail 1833 Tuning failed kStatus_SDMMC_SwitchVoltageFail 1834 Failed to switch voltage kStatus_SDMMC_SetPowerClassFail 1837 Set power class fail kStatus_UnknownCommand 10000 The requested command value is undefined Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 82 NXP Semiconductors Chapter 8 Appendix A: status and error codes Table 8-2. Error and status codes (continued) Name Value Description kStatus_SecurityViolation 10001 Command is disallowed because flash security is enabled kStatus_AbortDataPhase 10002 Abort the data phase early kStatus_Ping 10003 Internal: Received ping during command phase kStatus_NoResponse 10004 There is no response for the command kStatus_NoResponseExpected 10005 There is no response expected for the command kStatusRomLdrSectionOverrun 10100 ROM SB loader section overrun kStatusRomLdrSignature 10101 ROM SB loader incorrect signature kStatusRomLdrSectionLength 10102 ROM SB loader incorrect section length kStatusRomLdrUnencryptedOnly 10103 ROM SB loader does not support plain text image kStatusRomLdrEOFReached 10104 ROM SB loader EOF reached kStatusRomLdrChecksum 10105 ROM SB loader checksum error kStatusRomLdrCrc32Error 10106 ROM SB loader CRC32 error kStatusRomLdrUnknownCommand 10107 ROM SB loader unknown command kStatusRomLdrIdNotFound 10108 ROM SB loader ID not found kStatusRomLdrDataUnderrun 10109 ROM SB loader data underrun kStatusRomLdrJumpReturned 10110 ROM SB loader return from jump command occurred kStatusRomLdrCallFailed 10111 ROM SB loader call command failed kStatusRomLdrKeyNotFound 10112 ROM SB loader key not found kStatusRomLdrSecureOnly 10113 ROM SB loader security state is secured only kStatusRomLdrResetReturned 10114 ROM SB loader return from reset occurred kStatusMemoryRangeInvalid 10200 Memory range conflicts with a protected region kStatusMemoryReadFailed 10201 Failed to read from memory range kStatusMemoryWriteFailed 10202 Failed to write to memory range StatusMemoryCumulativeWrite 10203 Failed to write to unerased memory range kStatusMemoryAppOverlapWithExecute 10204 OnlyRegion Memory range contains a protected executed only region kStatusMemoryNotConfigured 10205 Failed to access to un-configured external memory kStatusMemoryAlignmentError 10206 Address alignment Error kStatusMemoryVerifyFailed 10207 Failed to verify the write operation kStatusMemoryWriteProtected 10208 Memory range contains protected memory region kStatus_UnknownProperty 10300 The requested property value is undefined kStatus_ReadOnlyProperty 10301 The requested property value cannot be written kStatus_InvalidPropertyValue 10302 The specified property value is invalid kStatus_AppCrcCheckPassed 10400 CRC check passed kStatus_AppCrcCheckFailed 10401 CRC check failed kStatus_AppCrcCheckInactive 10402 CRC checker is not enabled kStatus_AppCrcCheckInvalid 10403 Invalid CRC checker kStatus_AppCrcCheckOutOfRange 10404 CRC check is valid but addresses are out of range kStatus_NoPingResponse 10500 Packetizer did not receive any response for the ping packet Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 83 Table 8-2. Error and status codes (continued) Name Value Description kStatus_InvalidPacketType 10501 Packet type is invalid kStatus_InvalidCRC 10502 Invalid CRC in the packet kStatus_NoCommandResponse 10503 No response received for the command kStatus_ReliableUpdateSuccess 10600 Reliable update process completed successfully kStatus_ReliableUpdateFail 10601 Reliable update process failed kStatus_ReliableUpdateInacive 10602 Reliable update feature is inactive kStatus_ReliableUpdateBackupApplicati 10603 onInvalid Backup application image is invalid kStatus_ReliableUpdateStillInMainApplic 10604 ation Next boot will still be with Main Application image kStatus_ReliableUpdateSwapSystemNo 10605 tReady Cannot swap flash by default because swap system is not ready kStatus_ReliableUpdateBackupBootload 10606 erNotReady Cannot swap flash because there is no valid backup bootloader image kStatus_ReliableUpdateSwapIndicatorA 10607 ddressInvalid Cannot swap flash because provided swap indicator is invalid MCU Flashloader Reference Manual, Rev. 5, 11/2018 84 NXP Semiconductors Chapter 9 Appendix B: GetProperty and SetProperty commands Properties are the defined units of data that can be accessed with the GetProperty or SetProperty commands. Properties may be read-only or read-write. All read-write properties are 32-bit integers, so they can easily be carried in a command parameter. Not all properties are available on all platforms. If a property is not available, GetProperty and SetProperty return kStatus_UnknownProperty. The tag values shown in the table below are used with the GetProperty and SetProperty commands to query information about the flashloader. Table 9-1. Tag values GetProperty and SetProperty Name Writable Tag value Size Description CurrentVersion no 0x01 4 Current flashloader version AvailablePeripherals no 0x02 4 Set of peripherals supported on this chip FlashStartAddress no 0x03 4 Start address of program flash FlashSizeInBytes no 0x04 4 Size in bytes of program flash FlashSectorSize no 0x05 4 Size in bytes of one sector of program flash, this is the minimum erase size FlashBlockCount no 0x06 4 Number of blocks in the flash array AvailableCommands no 0x07 4 Set of commands supported by the flashloader CRCCheckStatus no 0x08 4 Status of the application CRC check Reserved n/a 0x09 n/a Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 85 Table 9-1. Tag values GetProperty and SetProperty (continued) Name VerifyWrites Writable yes Tag value 0x0a Size 4 Description Controls whether the bootloader verifies writes to flash. The VerifyWrites feature is enabled by default. 0 - No verification is done 1 - Enable verification MaxPacketSize no 0x0b 4 Maximum supported packet size for the currently active peripheral interface ReservedRegions no 0x0c n List of memory regions reserved by the flashloader. Returned as value pairs ( , ) • If HasDataPhase flag is not set, then Response packet parameter count indicates number of pairs • If HasDataPhase flag is set, then the second parameter is the number of bytes in the data phase RAMStartAddress no 0x0e 4 Start address of RAM RAMSizeInBytes no 0x0f 4 Size in bytes of RAM SystemDeviceId no 0x10 4 Value of the Kinetis System Device Identification register FlashSecurityState no 0x11 4 Indicates whether Flash security is enabled 0 - Flash security is disabled 1 - Flash security is enabled UniqueDeviceId no 0x12 n Unique device identification, value of Unique Identification registers (16 for K series devices, 12 for KL series devices) Table continues on the next page... MCU Flashloader Reference Manual, Rev. 5, 11/2018 86 NXP Semiconductors Chapter 9 Appendix B: GetProperty and SetProperty commands Table 9-1. Tag values GetProperty and SetProperty (continued) Name FlashFacSupport Writable no Tag value 0x13 Size 4 Description FAC (Flash Access Control) support flag 0 - FAC not supported 1 - FAC supported FlashAccessSegmentSi no ze 0x14 4 Size in bytes of 1 segment of flash FlashAccessSegmentC no ount 0x15 4 FAC segment count (The count of flash access segments within the flash model) FlashReadMargin 0x16 4 The margin level setting for flash erase and program verify commands yes 0=Normal 1=User 2=Factory QspiInitStatus no 0x17 4 The result of the QSPI or OTFAD initialization process 405 - QSPI is not initialized 0 - QSPI is initialized TargetVersion no 0x18 4 Target build version number ExternalMemoryAttribut no es 0x19 24 List of attributes supported by the specified memory Id (0=Internal Flash, 1=QuadSpi0), see description for the return value in the section ExternalMemoryAttribut es Property MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 87 MCU Flashloader Reference Manual, Rev. 5, 11/2018 88 NXP Semiconductors Chapter 10 Revision history 10.1 Revision history This table shows the revision history of the document. Table 10-1. Revision history Revision number Date Substantive changes 0 04/2016 Kinetis Bootloader v2.0.0 release 1 10/2017 Update for Flashloader application for i.MX RT Series of devices 2 01/2018 Update for Flashloader application for QuadSPI NOR Flash device that is only JESD216-compliant 3 05/2018 MCU Bootloader v2.5.0 release 4 09/2018 MCU Bootloader v2.6.0 release 5 11/2018 MCU Bootloader v2.7.0 release MCU Flashloader Reference Manual, Rev. 5, 11/2018 NXP Semiconductors 89 Revision history MCU Flashloader Reference Manual, Rev. 5, 11/2018 90 NXP Semiconductors How to Reach Us: Home Page: nxp.com Web Support: nxp.com/support Information in this document is provided solely to enable system and software implementers to use NXP products. There are no express or implied copyright licenses granted hereunder to design or fabricate any integrated circuits based on the information in this document. NXP reserves the right to make changes without further notice to any products herein. NXP makes no warranty, representation, or guarantee regarding the suitability of its products for any particular purpose, nor does NXP assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. “Typical” parameters that may be provided in NXP data sheets and/or specifications can and do vary in different applications, and actual performance may vary over time. All operating parameters, including “typicals,” must be validated for each customer application by customerʼs technical experts. NXP does not convey any license under its patent rights nor the rights of others. NXP sells products pursuant to standard terms and conditions of sale, which can be found at the following address: nxp.com/SalesTermsandConditions. While NXP has implemented advanced security features, all products may be subject to unidentified vulnerabilities. Customers are responsible for the design and operation of their applications and products to reduce the effect of these vulnerabilities on customer's applications and products, and NXP accepts no liability for any vulnerability that is discovered. Customers should implement appropriate design and operating safeguards to minimize the risks associated with their applications and products. NXP, the NXP logo, NXP SECURE CONNECTIONS FOR A SMARTER WORLD, COOLFLUX, EMBRACE, GREENCHIP, HITAG, I2C BUS, ICODE, JCOP, LIFE VIBES, MIFARE, MIFARE CLASSIC, MIFARE DESFire, MIFARE PLUS, MIFARE FLEX, MANTIS, MIFARE ULTRALIGHT, MIFARE4MOBILE, MIGLO, NTAG, ROADLINK, SMARTLX, SMARTMX, STARPLUG, TOPFET, TRENCHMOS, UCODE, Freescale, the Freescale logo, AltiVec, C-5, CodeTEST, CodeWarrior, ColdFire, ColdFire+, C-Ware, the Energy Efficient Solutions logo, Kinetis, Layerscape, MagniV, mobileGT, PEG, PowerQUICC, Processor Expert, QorIQ, QorIQ Qonverge, Ready Play, SafeAssure, the SafeAssure logo, StarCore, Symphony, VortiQa, Vybrid, Airfast, BeeKit, BeeStack, CoreNet, Flexis, MXC, Platform in a Package, QUICC Engine, SMARTMOS, Tower, TurboLink, and UMEMS are trademarks of NXP B.V. All other product or service names are the property of their respective owners. AMBA, Arm, Arm7, Arm7TDMI, Arm9, Arm11, Artisan, big.LITTLE, Cordio, CoreLink, CoreSight, Cortex, DesignStart, DynamIQ, Jazelle, Keil, Mali, Mbed, Mbed Enabled, NEON, POP, RealView, SecurCore, Socrates, Thumb, TrustZone, ULINK, ULINK2, ULINK-ME, ULINK-PLUS, ULINKpro, μVision, Versatile are trademarks or registered trademarks of Arm Limited (or its subsidiaries) in the US and/or elsewhere. The related technology may be protected by any or all of patents, copyrights, designs and trade secrets. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. The Power Architecture and Power.org word marks and the Power and Power.org logos and related marks are trademarks and service marks licensed by Power.org. © 2018 NXP B.V. Document Number MCUFLSHLDRRM Revision 5, 11/2018
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No XMP Toolkit : Adobe XMP Core 5.4-c005 78.147326, 2012/08/23-13:03:03 Fsl Dita Plugin Version : 20160510 Fsl Ssds Version : 4.7.1 Format : application/pdf Creator : NXP Semiconductors Title : MCU Flashloader Reference Manual Description : The MCU flashloader is a configurable flash programming utility that operates over a..serial connection on MCUs. It enables quick and easy programming of MCUs through..the entire product life cycle, including application development, final product..manufacturing, and more. The MCU flashloader will be delivered as binary or full source..code that is highly configurable. Host-side command line and GUI tools are available to..communicate with the flashloader. Users can utilize host tools to upload and/or download..application code via the flashloader. Subject : MCUFLSHLDRRM Create Date : 2018:11:29 11:01:56-07:00 Creator Tool : AH XSL Formatter V6.1 MR2 for Linux64 : 6.1.6.12685 (2013/09/18 10:39JST) Modify Date : 2018:11:29 22:53:47-06:00 Metadata Date : 2018:11:29 22:53:47-06:00 Producer : Antenna House PDF Output Library 6.1.425 (Linux64); modified using iText® 5.1.3 ©2000-2011 1T3XT BVBA Trapped : False Document ID : uuid:5535fd02-5b4a-4e41-9054-a926129571d0 Instance ID : uuid:e8343434-daa9-45d8-988e-31d3ce44715e Page Mode : UseOutlines Page Count : 91 Author : NXP Semiconductors Keywords : MCUFLSHLDRRM Warning : [Minor] Ignored duplicate Info dictionaryEXIF Metadata provided by EXIF.tools