UBoot recovery for imx6 via JTAG

From Wiki-DB
Jump to navigationJump to search

Technically all JTAG-adapter listed by OpenOCD should work, but DH electronics recommends the Olimex Arm-USB-OCD-Tiny-H. All tests and Documents were made in use of this one.

Needed Hardware

  • JTAG Debugger: Olimex Arm-USB-OCD-Tiny-H

Installation

This installation was made on the Virtual Machine for Application Development. All console expressions refer to this Debian system.

  1. OpenOCD
    • OpenOCD is a Linux package and is as easy to install as sudo apt-get install openocd
  2. Drivers
    • If you use the JTAG-Adapter recommended by DH, then you need to install the FTDI-Drivers as followed:
      • Go to http://www.ftdichip.com/Drivers/D2XX.htm and Download your suitable Driver (32-bit or 64-bit)
      • Navigate into the Download folder cd /home/devel/Downloads
      • Untar the Downloaded zip-file tar xfvz libftd2xx-x86_64-1.4.6.tgz
      • For the next steps you need Admin rights (standard password for the VM is root): su
      • You need to copy the folder cp libftd2xx.* /usr/local/lib
      • Changing the permission chmod 0755 /usr/local/lib/libftd2xx.so.1.4.6
      • Creating a link ln -sf /usr/local/lib/libftd2xx.so.1.4.6 /usr/local/lib/libftd2xx.so
      • Finish the installation exit

uBoot Programing

There are two ways for doing this. The easy way is an automatic Bash-script, which handles all the commands needed for the programing process. In this case you need a specified folder-structure so that the automatic script can find all its needed files. The other one is to type in the required commands. In a few cases this fails then you need to go the other way and program the uBoot manually.

  1. Download the needed files here: Programing Files
    • Here you get the "dhcom_olimex_arm_usb_tiny_h.cfg" and the "u-boot-spl-prog"
  2. Download newest uBoot here: uBoot_iMX6
    • Here you get the "uBoot.imx"
  3. Connecting everything
    • Connect the JTAG-Adapter with your PC and the Debian VM (Player - Removeable Devices)
    • Connect the JTAG interface via the DHCOM JTAG adapter to the i.MX6 module (If you don't have a JTAG adapter, please ask DH electronics)
    • Connect the board with a serial COM-port
  4. Automatic Script
    • Create a new folder (it isn't necessary where the folder is located, you just need to keep the folder structure)
    • The needed folder structure looks like this:
      • DHcom_uBoot_Programmer
        • bin_File (here are the uBoot files)
        • uBoot_Programmer (here are the Programing scripts)
      • Paste the "dhcom_olimex_arm_usb_tiny_h.cfg"-file in the OpenOCD folder at /usr/share/openocd/scripts/board
      • The "uBoot_Programmer_Olimex_arm_usb_tiny_h.sh"-file needs to be in the uBoot_Programmer folder
      • In the bin_Folder belongs the "u-boot-spl-prog.bin" and your own uBoot file
      • You need to adjust the "uBoot_Programmer_Olimex_arm_usb_tiny_h.sh" in terms of the name of your uBoot-file. Paste the name instead of the term "Your uBoot File"
    • Open a terminal and navigate into the folder e.g. cd DHcom_uBoot_Programmer/uBoot_Programmer
    • Power up the board and have a look at the serial output. There must not be any output (no uBoot starting) else go to Delete uBoot
    • Start the programing script: ./uBoot_Programmer_Olimex_arm_usb_tiny_h.sh
    • If some error occures you can try the Manual Programing method below
  5. Manual Programing
    • Power up the board and have a look at the serial output. If there is any uBoot starting:Delete uBoot
    • You need two terminals, one for GDB the other for OpenOCD an a Com-Port to get the serial output
    1. OpenOCD
      • openocd –f board/dhcom_olimex_arm_usb_tiny_h.cfg
      • If OpenOCD does not open like in the picture then close and open it again
    2. GDB
      • gdb --quiet
      • target remote localhost:3333
      • mon load_image /path/to/the/u-boot-spl-prog/file 0x908000
      • mon reg pc 0x908000
      • mon reset
      • mon resume
      • Wait until the message "Searching for IVT header at DDR address 0x18000000" is on the serial output
      • mon halt
      • mon load_image /path/to/the/u-boot-with-spl/file 0x18000000
      • mon resume

Delete uBoot

  1. If there is any uBoot starting, you can delete it with entering uBoot (press DEL after powering up the board)
    • sf probe
    • sf erase 0 f0000
    • Restart the board
    • Go on with your procedure