FEL

From linux-sunxi.org
Jump to: navigation, search

FEL is a low-level subroutine contained in the BootROM on allwinner devices. It is used for initial programming and recovery of devices using USB.

Contents

Tools for talking FEL mode

Our tools repository has some tools for dealing with FEL mode. If you haven't done so already, retrieve the repository and build it.

Entering FEL mode

While there are a few different ways to trigger FEL mode, they are not always equal. Some do low-level initialization (load Boot0 and Boot1), and some don't.

If you are going to use FEL mode to retrieve device information, you need a to pick a method of entering FEL mode that initializes Boot1.

Power off your device

Before you try to enter FEL mode, make sure that your device is truly powered off. Do not leave any cables attached.

Due to a common design flaw, the UART will keep the device in a slightly working state. So before you power up your device again, disconnect your UART, and re-attach it.

Triggering FEL mode

Through a special FEL button

This is either called recovery or uboot or fel. If your device features such a button, you just need to hold it during power-up, and the device should have entered FEL mode just fine.

By holding a standard button

This is usually one of the standard tablet buttons, like the VOL+ key or something.

The following seems to work:

  • Press and hold the suspected or reported FEL key.
  • Press and hold the power key for about 2 seconds.
  • Release the power key, and press it at least 3 times immediately.

Boot1 is initialized using this method.

Through serial console

If you have access to the UART already, you can send the character '1' to the device during power-up.

Boot1 is initialized using this method.

Through a special SD card image

Included in our sunxi-tools repository, there is a small SDCARD boot image that does nothing more than jump to FEL.

Just install it on an sdcard as you would with the u-boot SPL:

dd if=sunxi-tools/bin/fel-sdboot.sunxi of=/dev/sdc bs=1024 seek=8

By having no valid boot image

If the BROM doesn't find any valid boot image, it will automatically enter FEL mode.

Verifying FEL mode

A new USB device appears

When you run lsusb, you should see the following in it:

Bus 001 Device 074: ID 1f3a:efe8

Running the fel tool

> ./fel version
AWUSBFEX soc=00162500(A13) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000

Serial output

If the method you chose initialized boot1, then you should see something like this over serial:

HELLO! BOOT0 is starting!
boot0 version : .3.0
dram size =1024
Succeed in opening nand flash.
Succeed in reading Boot1 file head.
The size of Boot1 is 0x00036000.
The file stored in 0X00000000 of block 2 is perfect.
Check is correct.
Ready to disable icache.
Succeed in loading Boot1.
Jump to Boot1.
[       0.145] boot1 version : 1.3.1a
[       0.145] pmu type = 3
[       0.145] bat vol = 4117
[       0.176] axi:ahb:apb=3:2:2
[       0.176] set dcdc2=1400, clock=1008 successed
[       0.178] key
[       2.486] you can unclench the key to update now
[       2.486] key found, jump to fel

Common Pitfalls

It failed!

Try again, make sure you fully power down the device and make sure you get the order of events right. You'll get there.

Reading over USB fails

If the following happens:

> ./fel read 0x43000000 0x20000 script.bin
libusb usb_bulk_send error -7

Then you probably are trying to read things that only get initialized when boot0 and boot1 have been loaded. Try another method of entering FEL mode, one that does initialize to boot1.

FEL Protocol

The FEL is actually a tiny usb stack implementing special USB protocol.

Part of it is implemented in our tools repository and can be used as reference code.

See also

Personal tools
Namespaces

Variants
Actions
Navigation
Tools