Amlogic HDMI Boot Dongle - superna9999/linux GitHub Wiki

HDMI dongle picture

Schematics of the modified HDMI Display Emulator dongle : hdmi-amlogic-boot-dongle.pdf

The original emulator I bought at : https://www.aliexpress.com/item/4000494867545.html I only changed the A1 pin from GND to VCC.

The Hack

The idea is to heat up the A1 pin (pin 2 of the AT24 EEPROM) and lift it to disconnect it from the PCB (using a fine needle as a lever might help here), then solder a wire to the the VCC pin (pin 8 of the AT24 EEPROM).

Note: some emulators uses EEPROMs with not changeable I2C address (A0 to A2 pins aren't used), the you may need to buy some fresh EEPROMs like the ones from Microchip directly and solder a new one, while making sure A1 is connected to VCC while A0 & A2 to GND to have the 0x52 I2C address: https://www.microchip.com/wwwproducts/en/AT24CS02

If you fail or don't have the skills, please drop a mail to superna9999[at]gmail.com

I also sells some ready dongles on: https://www.tindie.com/products/superna9999/meson-hdmi-recovery-boot-plug/

The Logic

The amlogic BootROM reads 8bytes at the EEPROM address 0x52, offset 0xf8 (248). If the 8bytes content is boot@USB it will force USB boot mode. You should be able force SDCard with boot@SDC and eventually boot@SPI for SPI.

To test, you can connect the HDMI dongle to your laptop (it may not work behing HDMI to DP adapters or HDMI to Type-C adapters) or directly on an Amlogic board, and use i2cdetect over all your i2c busses like :

 sudo i2cdetect -y -r 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- 52 -- -- -- -- -- -- -- 5a -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --          

If 0x50 appears, the address change didn't work, if 0x52 appears, it's a win !

To flash the EEPROM (the linux kernel needs to have the CONFIG_EEPROM_AT24 enabled for the eeprom node to be available below), simply connect the dongle to the HDMI port while linux is running, and add a new i2c device on the hdmi i2c port:

cd /sys/bus/i2c/devices/i2c-0
echo 24c02 0x52 > new_device
cd *-0052
echo -n "boot@USB" | dd of=eeprom bs=1 seek=248 count=8
dd if=eeprom bs=1 skip=248 | hexdump

in my tests, the last byte was not flashed correctly... so I did:

echo -n "B" | dd of=eeprom bs=1 seek=255 count=1