找回密码
 立即注册
  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Serial ISP模式
  在上一篇文章 Boot配置(ISP Pin, OTP) 里痞子衡为大家介绍了i.MXRTxxx Boot的行为配置,其中第1.2节里讲了Boot有三类行为模式:Serial ISP、Serial Boot、Device Boot,后两种都是跟App启动执行相关的行为模式,而Serial ISP模式则是相对独立的Flash下载功能,有了Serial ISP,便可省去专用Flash编程器,今天痞子衡就来详细聊一聊Serial ISP模式。
  痞子衡在前面已经讲过Serial ISP模式是一种串行编程模式,在这种模式下,BootROM通过指定的UART/SPI/I2C/USB-HID口来接收来自Host(恩智浦提供了上位机工具blhost.exe或者MCUBootUtility)的Application数据,并将数据下载进i.MXRTxxx支持的所有外部非易失性存储器中,为后续从外部存储器启动做准备。
一、进入Serial ISP模式

  i.MXRTxxx上电永远是从ROM启动去执行BootROM程序,最顶层的Boot行为模式由OTP memory里的PRIMARY_BOOT_SRC[3:0]位和芯片外部ISP[2:0]管脚状态共同决定。假设我们正处于研发阶段,PRIMARY_BOOT_SRC[3:0]并未烧写,那想进入Serial ISP模式最直接的方式便是将ISP[2:0]输入状态拨成3'b110,在设计i.MXRTxxx的硬件板时ISP[2:0] pins应设计成可通过拨码开关选择输入电平,下图是RT600-EVK板(Rev.E)的参考设计:
153734r3z3dbv3kbuikp9h.png

  拨码开关SW5应拨向SW_DIP-6的6,即设置ISP[2:0]=3'b110,此时便直接进入了Serial ISP模式。
二、blhost的使用

  进入了Serial ISP模式,此时便可以用恩智浦提供的host工具与BootROM进行命令交互,host工具在 MCUBootUtility包 里。下载好MCUBootUtility包之后,在\MCUBootUtility\Tools\blhost2_3\win下可以找到用于与BootROM通信的blhost.exe。
2.1 支持的通信外设pinout

  BootROM支持四种通信外设,分别是UART/SPI/I2C/USB-HID(其中UART和USB比较常用),pinout如下(Pinout适用RT600):
153734ezz6ggxa8jsmffh8.png

2.2 blhost用法

  blhost.exe是命令行工具,使用blhost可以通过上述UART/SPI/I2C/USB-HID口与BootROM进行通信与命令交互。
  在命令行下打开blhost.exe,输入-?命令可以看到blhost使用帮助,blhost支持的命令很多:
  1. PS D:\NXP-MCUBootUtility\tools\blhost2_3\win> .\blhost.exeusage: D:\NXP-MCUBootUtility\tools\blhost2_3\win\blhost.exe                                                                      [-?|--help]                                                                      [-p|--port [,]]                                                                      [-u|--usb [[[,]]]]                                                                      [-t|--timeout ]                                                                      -- command Options:  -?/--help                    Show this help  -p/--port [,]   Connect to target over UART. Specify COM port                               and optionally baud rate                                 (default=57600)                                 If -ftbi, then port is BusPal port  --ftdi spi[,,,,lsb|msb] |              i2c[,,]                               Use SPI or I2C for BusPalTarget link                               All parameters between square brackets are                               optional, but preceding parameters must be                               present or marked with a comma.                               (ex. -b spi,1000,0,1) (ex. --ftdi spi,1000,,lsb)                                 spi:  speed(KHz),                                       polarity(0=active_high | 1=active_low),                                       phase(0=rising_edge | 1=falling_edge),                                       "lsb" | "msb"                                       (default=100,1,1,msb)                                 i2c:  address(7-bit hex), speed(KHz)                                       (default=0x10,100)  -u/--usb [[[,]] | []]                               Connect to target over USB HID device denoted by                               vid/pid (default=0x15a2,0x0073) or device path  -t/--timeout             Set packet timeout in milliseconds                                 (default=5000)Memory ID:  Internal Memory              Device internal memory space    0                            Internal Memory                                 (Default selected memory)    16 (0x10)                    Execute-only region on internal flash                                 (Only used for flash-erase-all)  Mapped External Memory       The memories that are remapped to internal space,                               and must be accessed by internal addresses.                               (IDs in this group are only used for flash-erase-all and                               configure-memory, and ignored by write-memory, read-memory,                               flash-erase-region and flash-image(use default 0))    1                            QuadSPI Memory    9                            FlexSPI NOR Memory  Unmapped External Memory     Memories which cannot be remapped to internal space,                               and only can be accessed by memories' addresses.                               (Must be specified for all commands with  argument)    272 (0x110)                  SPI NOR/EEPROM Memory    288 (0x120)                  uSDHC SD Memory    289 (0x121)                  uSDHC MMC Memory** Note that not all memories are supported on all platforms.Command:  reset                        Reset the chip  get-property  [ | ]                               Return bootloader specific property.                                and  are required by some properties.                                = 0,  = 0, if not specified.                                and  are ignored for the other properties.                               If  is over the range supported by the device, bootloader                               will treat as  = 0.    1                          Bootloader version    2                          Available peripherals    3                          Start of program flash,  is required    4                          Size of program flash,  is required    5                          Size of flash sector,  is required    6                          Blocks in flash array,  is required    7                          Available commands    9                          Last Error    10                         Verify Writes flag    11                         Max supported packet size    14                         Start of RAM,  is required    15                         Size of RAM,  is required    23                         QuadSpi initialization status    24                         Target version    25                         External memory attrubutes,  is required    27                         Flash page size,  is required    28                         Interrupt notifier pin    29                         FFR key store update option  set-property      10                         Verify Writes flag    28                         Interrupt notifier pin                               :                                   bit[31] for enablement, 0: disable, 1: enable                                   bit[7:0] for GPIO pin index                                   bit[15:8] for GPIO port index    29                         FFR key store update option                               :                                   0 for Keyprovisioning                                   1 for write-memory  flash-erase-region   [memory_id]                               Erase a region of flash according to [memory_id].  flash-erase-all [memory_id]  Erase all flash according to [memory_id],                               excluding protected regions.  read-memory   [] [memory_id]                               Read memory according to [memory_id] and write to file                               or stdout if no file specified  write-memory  [[,byte_count]| {{}}] [memory_id]                               Write memory according to [memory_id] from file                               or string of hex values,                               e.g. data.bin (writes entire file)                               e.g. data.bin 8 (writes first 8 bytes from file)                               e.g. "{{11 22 33 44}}" (w/quotes)                               e.g. {{11223344}} (no spaces)  fill-memory    [word | short | byte]                               Fill memory with pattern; size is                               word (default), short or byte  receive-sb-file        Receive SB file  execute                                  Execute at address with arg and stack pointer  call              Call address with arg  configure-memory                                 Apply configuration block at internal memory address                                to memory with ID   key-provisioning  [arguments...]                                                                  Key provisioning enroll. No argument for this operation                                 [,]                                   Send the user key specified by  to bootloader.  is                                   the binary file containing user key plaintext. If  is not                                   specified, the entire  will be sent. Otherwise, only send                                   the first  bytes                                                                    Generate  bytes of the key specified by                                 [memoryID]                                   Write the key to a nonvolatile memory                                [memoryID]                                   Load the key from a nonvolatile memory to bootloader                                [,]                                   Send the key store to bootloader.  is the binary file                                   containing key store. If  is not specified, the entire                                    will be sent. Otherwise, only send the first  bytes                                                                   Read the key store from bootloader to host(PC).  is the                                   binary file to store the key store  flash-image  [erase] [memory_id]                               Write a formated image  to memory with ID                               . Supported file types: SRecord                               (.srec and .s19) and HEX (.hex). Flash is erased                               before writing if [erase]=erase. The erase unit                               size depends on the target and the minimum erase                               unit size is 1K.  list-memory                  List all on-chip Flash and RAM regions, and off-chip                               memories, supported by current device.                               Only the configured off-chip memory will be list.  efuse-program-once   [nolock/lock]                               Program one word of OCOTP Field                                is ADDR of OTP word, not the shadowed memory address.                                is hex digits without prefix '0x'  efuse-read-once                                Read one word of OCOTP Field                                is ADDR of OTP word, not the shadowed memory address.  generate-key-blob                                 Generate the Blob for given Dek Key                                - input, a binary Dek Key (128 Bits) generated by CST tool.                                - output, a generated blob (72 Bytes) in binary format.** Note that not all commands/properties are supported on all platforms.
复制代码
  当使用串口转USB模块连接i.MXRTxxx的Flexcomm UART0或者使用USB Cable连接上USB1口后可以看到PC设备管理器会识别出相关设备:
153734plb28zz8q2qbnbdn.png

  让我们尝试一下使用blhost与BootROM通信,先试一下USB通信:
PS D:\NXP-MCUBootUtility\tools\blhost2_3\win> .\blhost.exe -u 0x1fc9,0x0020 -- get-property 1
  1. Inject command 'get-property'Response status = 0 (0x0) Success.Response word 1 = 1258487808 (0x4b030000)Current Version = K3.0.0
复制代码
  再接着试一下UART通信,似乎通信失败了。需要注意的是,当使用USB通信过一次之后,BootROM已经激活USB外设,不会再去检测其他外设(包括UART),如果想使用UART通信,需要将板子reset一次,使BootROM重回外设检测状态。
PS D:\NXP-MCUBootUtility\tools\blhost2_3\win> .\blhost.exe -p COM25 -- get-property 1
  1. Error: Initial ping failure: No response received for ping command.
复制代码
三、下载更新Application示例

  因为BootROM支持启动的外部存储器很多,所以Serial ISP模式下进行Application更新操作要指定具体的外部存储器类型。在上一节blhost的命令帮助里,我们可以看到Memory ID里已经给各种外部储存器分配了ID号,在使用blhost命令时使用不同的ID号即可操作相应外部存储器。
  其实BootROM里已经把外部存储器的下载更新Application操作封装得很简单也很统一,我们其实只需要3步操作即可完成Application的下载。以备份启动的1bit SPI NOR为例(即Flexcomm SPI NOR Memory,Memory ID=0x110):
  1. // 在SRAM里临时存储1bit SPI NOR配置数据blhost -p COMx -- fill-memory 0x1C000 0x4 0xC0300000 // Flexcomm SPI3, NOR Flash// 使用1bit SPI NOR配置数据去配置Flexcomm SPI接口blhost -p COMx -- configure-memory 0x110 0x1C000// 擦除1bit SPI NOR并将image下载进1bit SPI NORblhost -p COMx -- flash-erase-region 0x0 0x20000 0x110blhost -p COMx -- write-memory 0x1000 bt_image.bin 0x110
复制代码
  其中bt_image.bin是填充了Image类型数据的Application镜像,关于上述命令的具体意义痞子衡会在后续Serial(1-bit SPI) NOR恢复启动的文章里详尽解释,这里只是给大家一个初步体验。
  至此,恩智浦i.MX RTxxx系列MCU的Serial ISP模式痞子衡便介绍完毕了,掌声在哪里~~~

免责声明:本文内容部分来源于网络,出于网络分享目的,如对您的权益版权有异议我们将予以删除,谢谢合作!
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册