Best way to update firmware on the RT1064?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Best way to update firmware on the RT1064?

1,428 Views
nplayle
Contributor I

Hi, 

We're developing an application and will be using the RT1064 as the primary MCU. 

Our application requires field firmware updates via USB, and we'd like to be able to do them without the user interacting with the hardware. 

Our current application is on an STM32F7 MCU, and our update process is as follows:

  1. Firmware receives command from USB host (via USB CDC) which changes option bytes in the STM32 to force it to boot from internal bootloaders, which effectively forces it into USB DFU. 
  2. Issue an NVIC reset command to restart the chip, which comes up as a USB DFU device
  3. perform update via DFU
  4. return to main application
  5. main application checks image. if image is OK, write to external flash and continue as normal. If fail, return to DFU and try update again. 

In addition to the above, there is a button and power on combination that forces the device into DFU mode.

We'd like to do something similar on the RT1064. 

As far as I can tell however, the boot mode is determined by the eFUSEs, and while I can't find any documentation stating one way or another (in the datasheet or reference manual), the name "eFUSE" would imply that it's OTP, meaning that once we program the chip and switch to 'normal' boot mode, it won't be possible to switch back to the serial loader as the default boot device. Is this the case? 

We want to boot from the serial loader as the primary device in case a firmware update fails or is interrupted. This gives us the opportunity to load our own bootloader to internal RAM and then program the internal flash via USB CDC, or if possible, program the internal flash directly. However, if the internal flash program is corrupted, we want the device to restart without user input back into the serial downloader mode, to allow for automatic retries. 

As best I can tell, the RT1064 reads BOOT_MODE[1:0] on release from reset and decides how to boot from that. In our case, sometimes we want to force booting the serial downloader, and other times we want to force booting the internal boot. How can we do that? Are efuses actually OTP or are they configurable / rewriteable? 

Section 9.3.3 of the RT1064 reference manual might be saying I can rewrite the efuses, but it's still not clear to me:

Setting the BT_FUSE_SEL=0 forces the ROM code to jump directly to the Serial Downloader. This allows a bootloader to be downloaded which can then provision the
boot device with a program image and blow the BT_FUSE_SEL and the other boot configuration eFUSEs. After the reset, the boot ROM code determines that the BT_FUSE_SEL is blown (BT_FUSE_SEL = 1) and the ROM code performs an internal boot according to the new eFUSE settings. This allows the user to set BOOT_MODE[1:0]=00b on a production device and burn the fuses on the same device (by forcing the entry to the Serial Downloader), without changing the value  of the BOOT_MODE[1:0] or the pullups/pulldowns on the BOOT_MODE pins.

It's not clear to me if this is implying we can set BT_FUSE_SEL to 0 multiple times, or just once? 

Thanks,

Nick

 

0 Kudos
2 Replies

1,403 Views
mjbcswitzerland
Specialist V

Hi

eFUSEs can be blow (from 0 to 1) once and never changed again.

Take a look at the uTasker boot loader which is a turn key solution for (secure) boot loading on the i.MX RT 1064, with in-field loading and OTA with many flexible loading possibilities.

https://www.utasker.com/iMX/developers.html

Regard

Mark

- i.MX RT 1064: https://www.utasker.com/iMX/RT1064.html
- Boot loader concept including XiP on-the-fly decryption, clone protection or AES256 protected RAM execution.
-- Boot Loader concept flow chart: https://www.utasker.com/docs/iMX/Loader.pdf and usage reference https://www.utasker.com/docs/iMX/uTaskerLoader_TestDrive.pdf
-- Serial Loader features: https://www.utasker.com/docs/uTasker/uTaskerSerialLoader.pdf
-- Building the loader with MCUXpresso: https://www.utasker.com/docs/iMX/MCUXpresso.pdf (and video guide https://youtu.be/p_eUGo6GypY ) - the guide document explains how to use with any application (eg. SDK) and to enabling its operation with On-The-Fly decryption in 5 minutes
-- Building the loader with IAR: https://www.utasker.com/docs/iMX/IAR.pdf (and video guide https://youtu.be/XPCwVndP99s )
-- Building the loader with VisualStudio and GCC: https://www.utasker.com/docs/iMX/GCC.pdf (and video guide https://youtu.be/0UzLLSXABK8 )
Video Guide to encrypting NXP SDK examples to run from XiP memory using on-the-fly decryption and uploading with the µTasker loader: https://www.youtube.com/watch?v=5iT7KP691ls&list=PLWKlVb_MqDQEOCnsNOJO8gd3jDCwiyKKe&index=10
Video Guide to encrypting NXP SDK examples to run at optimal speed in internal RAM and uploading with the µTasker loader:
https://www.youtube.com/watch?v=fnfLQ-nbscI&list=PLWKlVb_MqDQEOCnsNOJO8gd3jDCwiyKKe&index=11
Video Guide for Embedded Artist OEM Module for i.MX RT 1062 showing precise secured application operation analysis: https://youtu.be/o7hQbOqhJoc

0 Kudos

1,414 Views
jeremyzhou
NXP Employee
NXP Employee

Hi,
Thank you for your interest in NXP Semiconductor products and for the opportunity to serve you.
1) The eFuse is the once writeable area.
2) For the update process, it needs to adapt actually, maybe you can try the below process.
a) i.MX RT1064 boot from the Fuses mode and works well.
b) Firmware receives a command from USB host or other serial peripherals, then Firmware load a Flashloader to RAM and jump to the Flashloader to run.
Note: Flashloader has been programmed to a specified address in advance.
c) Utilizing the commanders of Flashloader, receive the updated firmware and program it to the internal Flash.
d) After that, reset the MCU and run the updated firmware.
Have a great day,
TIC

-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!

 

- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------

0 Kudos