Skip to content

Instantly share code, notes, and snippets.

@bigunclemax
Last active September 3, 2026 18:34
Show Gist options
  • Select an option

  • Save bigunclemax/c566ecfc2f6d92e76e68446e46bdd944 to your computer and use it in GitHub Desktop.

Select an option

Save bigunclemax/c566ecfc2f6d92e76e68446e46bdd944 to your computer and use it in GitHub Desktop.

How to flash reformat on FordSync3 through USB cable

Intro

This method allows to flash Ford Sync 3 multimedia module(APIM) through USB cable even if it was bricked 🧱. You don't need to solder either the eMMC card reader or any other wires. The only thing you need is to disassemble the Sync module and short circuit of two pads.

TL;DR ➡️

Hardware

Ford Sync 3 module consists of two boards:

  • Main board - IPC/CCPU with TI Omap5432 SoC as main CPU, RAM, eMMC flash.
  • Second board - VMCU. CPLD and microcontroller placed on it. This part is responsible for the CAN interface (since Omap5432 doesn't have it) and this board also acts as an external watchdog for the main CPU.

IPC and VMCU communicates through UART interface (speed 500kbps, for packets exchange uses COBS encoding). More on this maybe some other time 🙃

OMAP5432 boot mode

According to public datasheet OMAP5432 Multimedia Device we can get info about ways and order of Omap5432 booting (paragraph 2.6 SYSBOOT configuration).

Boot table. sysboot

Look at sys_boot3. Exact this pin corresponding to boot priority from USB. If pull down sys_boot3 pin to GND, then Omap SoC will be booting from USB at first.

But how to find sys_boot3 ? 🤔

Answer on this question we could find on another datasheet OMAP5432Multimedia Device Engineering Samples 2.0. This paper contains terminal description and ball locations(Figure 2-1. OMAP5432 AAN S-PBGA-N754 Package (Bottom View)).

Looking for sys_boot3 and see that it's located at V31 place. sysboot

But how to get access to V31 ball? 🧐

Since this ball is located under Soc. we can't get to it without a special tools.

Fortunately mate Cusco came to the rescue. He ring out Omap Soc pads and many test points which located at board.
And he found V31!

sysboot

USB boot MY18.5 (Thanks to IgorStr. for this find)

MY18 5_usbboot_short

So, now we ready to boot Sync 3 module from USB.

USBboot

Time to connect Sync to PC with Linux through miniUSB cable. Next we need to wake up Sync by CAN packages. Short two pads circled in red and then enable power 12V.
Look at dmesg log:

kernel: [431083.350475] usb 1-3: new high-speed USB device number 114 using xhci_hcd
kernel: [431083.499541] usb 1-3: New USB device found, idVendor=0451, idProduct=d011, bcdDevice= 0.00
kernel: [431083.499555] usb 1-3: New USB device strings: Mfr=33, Product=37, SerialNumber=0
kernel: [431083.499561] usb 1-3: Product: OMAP5430
kernel: [431083.499566] usb 1-3: Manufacturer: Texas Instruments

Perfect, TI SoC is enumerated on USB bus and awaiting to code download...

But what code we should load to SoC? 🤓

A small remark should be made here. TI Omap5432 USB boot is not actually boot from USB flash drive. Instead we must transfer our executable code (bootloader) to Soc via USB. Then in this bootloader we have to implement the functions to access the Sync eMMC.

After several days of googling, I managed to find links to articles about the TI OMAP5 5432 uEVM ES2.0 (Panda5) debug board refers to http://omapedia.org. Trying to open that links and ... it's redirected to www.ti.com. The site was removed. Fuck! 🤬

However, web.archive.org remember everything, or at least a lot 😌

Most of the links to the source code repositories are still alive. The most interesting tool is UsbBoot(Omapboot). Getting sources git clone git://git.omapzoom.org/repo/omapboot.git usbboot && git checkout 33af7cb409b603cf7988306ab2ea70f052a9a02b and try to compile them.

To build UsbBoot for Omap SoC, we need a toolchain for ARMv7. First option is to get it from Android repository which is linked in the Omap wiki article. Second and easier option is to get assembled toolchain from here.

Compile UsbBoot

export CROSS_COMPILE=/path/to/toolchain/bin/arm-linux-gnueabihf-
make MACH=omap5 BOARD=omap5uevm

And run...

user@pc:~/$ sudo ./out/omap5uevm/usbboot -f
reading ASIC ID
CHIP: 5430
rom minor version: 02
IDEN: 0000000000000000000000000000000000000000
MPKH: 0000000000000000000000000000000000000000000000000000000000000000
CRC0: 071a9a31
CRC1: 00000000
device is GP
using built-in GP iboot of size 23-KB
sending 2ndstage to target...
waiting for 2ndstage response...
received 2ndstage response...

After loading 2ndstage bootloader to Omap and receiving response from it we can try to attach to SoC with fastboot (yes, it's Android tool) and attempt to execute some commands.

fastboot

RE_format

The reformat package is intended for a factory (clean) installation of the Sync 3 OS. It consists of 2 parts:

  1. MLO - bootloader
  2. QNX-IFS-REFORMAT - OS image which performing a factory installation of Sync 3 system.

These are exactly the files that we want to flash on the Sync eMMC.
It remains to understand where exactly in eMMC they should be located.

To do this, let's see at the original reformat installation script. It contains the following line: update_boot -t -i /tmp/QNX-IFS-REFORMAT -m /tmp/MLO

So, there is some utility called update_boot that flashes the bootloader and OS firmware. Let's look under the hood...

First of all do strings update_boot:

Usage: %s [-i] [-m] raw partition

	-i   Path of IFS image file
	-m   Path of MLO image file
	-t   Toggle active IFS partition
	-r   replace current IFS with new one
	raw partition   Path of raw partition to write IFS and MLO image files, default value is /dev/hd0.

Great, we found a help strings, and now we know which params are accepted by this utility.

Well, let's find out what exactly this software does.

Take Ghidra🐉 and import update_boot to it. Deсompilation process will not be described in this article. If someone interesting here is link to shittypseudocode obtained by decompilation.

As a result, we get following layout of Sync 3 eMMC.

Sync3 eMMC layout

block offset name
0x0000 MBR
0x0002 0x0000400 (1024) boot bank info
0x0100 0x0020000 (131072) MLO
0x0184 0x0030800 (198656) IFS first bank
0x7cd2 0x0F9A400 (16360448) IFS second bank

Well, it's time to learn how to flash eMMC Sync with custom images transferred via USB from a PC.

Sync3flash

Omap usbboot which we previously compile already has fuctions for eMMC read\write. Let's modify it a bit by adding ability to flash custom images into MLO and QNX-IFS-REFORMAT offsets.

👉 sync3flash.

Flashing eMMC Sync3

Requirements:

  • PC with Linux (virtual machine may not work1, but you can use a livecd Linux on a flash drive, for example puppy linux)
  • sync3flash tool
  • MLO and QNX-IFS-REFORMAT files from REFORMAT package (you can get patched reformat package here)
  • miniUSB cable

So, now we have everything we needed for flashing Sync 3. Let's start:

  1. Disassembly Sync 3 module to get physical access to main board with Omap SoC.
  2. Connect Sync directly to PC through USB cable. (Don't try to connect through Sync 3 USB hub. This will not work)
  3. Start waking up Sync by sending CAN packages.
  4. Run sync3flash tool sudo ./sync3flash -i QNX-IFS-REFORMAT -m MLO
  5. Short contacts circled in red
  6. Enable 12V power supply to Sync module.

If everything goes smooth, you should see output like that:

user@user-PC:/tmp$ sudo ./sync3flash -m MLO -i QNX-IFS-REFORMAT 
waiting for device...
reading ASIC ID
CHIP: 5430
rom minor version: 02
IDEN: 0000000000000000000000000000000000000000
MPKH: 0000000000000000000000000000000000000000000000000000000000000000
CRC0: 071a9a31
CRC1: 00000000
device is GP
sending 2ndstage to target...
waiting for 2ndstage response...
sending image to target...size (22696-B/22-KB/0-MB)
sending image to target...size (9279956-B/9062-KB/8-MB)

After 30 seconds Sync 3 will reboot and reformat will start. That's it 😎

PS:

This article is for entertainment and educational purposes only. All characters are fictional and coincidences are accidental.

PPS:

Many thanks to Cusco for the hardware help, Sanek2033 and Au{R}oN for inspiration and Lynx for the idea. 🙏


NOTE:
You can use virtualized Linux on Windows to make it work. Below is example for VirtualBox:
Settings -> USB -> Add Empty Filter
Name: OMAP5 sEVM
Vendor Id: 0451
Product Id: d011

Then sudo ./usbboot -f and do as usual with your board:
* first time should fail as drivers will be installed
* next time will work OK.

Note: We don't support this, so if you have any issues please direct it to the omap5 mailing list. 

Footnotes

  1. How to flash using Virtual Box (from OmapWiki)

@ryanb-96

Copy link
Copy Markdown

Managed to repair and update my apim with this process. Huge thanks to all the people here posting their process and notes.

@munaz-bfox

Copy link
Copy Markdown

@ryanb-96 which QNX-IFS-REFORMAT file did you use ?

@ryanb-96

ryanb-96 commented Aug 3, 2026

Copy link
Copy Markdown

I got everything through the link below.

https://disk.yandex.ru/d/9AfkdgpxtOh4rA

@munaz-bfox

Copy link
Copy Markdown

Mine is 2018 ecosport and apim manufactured in July 2023, i followed these step but on the laptop still showing waiting for the device.

@munaz-bfox

Copy link
Copy Markdown

Which version we need to install ? And reformat again or auto detect ?
image

@SachkovDI

SachkovDI commented Aug 27, 2026

Copy link
Copy Markdown

Please tell me what the issue might be. I’m using version 1.1. When I try to flash it, it breaks at the line “unexpected 2nd stage response”.
The board is slightly different from the two options presented. Could that be the problem? I’m doing it on a machine.

@BitwiseGuru

Copy link
Copy Markdown

I'm using version 1.1 and the flash consistently fails at unexpected 2nd stage response.

My board is a non-NAV APIM, 1 GB RAM / 8 GB eMMC.

For comparison, I tested two boards belonging to a friend (NAV variants, 2 GB RAM, 32 GB and 64 GB) and both flashed without any issue. On the hardware side, as shown in the attached picture, the non-NAV board is a noticeably more recent PCB revision with several layout and component optimizations compared to the working ones.

While debugging the SW execution of the USB boot sequence, I noticed it stalls right after the I/O initialization. This could be explained either by a schematic change on this newer revision, or simply by dead hardware.

Has anyone faced a similar failure on the non-NAV 1 GB RAM variant and managed to recover the ECU? Any help would be appreciated.
IMG_5179

@SachkovDI

SachkovDI commented Aug 30, 2026

Copy link
Copy Markdown

I’m having the same situation during flashing. The USB device is activated. But in the end, it ends up the same as yours.

Я использую версию 1.1, и флешка постоянно выходит из строя на unexpected 2nd stage response.

Моя плата — APIM без поддержки NAV, 1 ГБ ОЗУ / 8 ГБ eMMC.

Для сравнения я протестировал две платы, принадлежащие моему другу (варианты с навигацией, 2 ГБ ОЗУ, 32 ГБ и 64 ГБ), и обе прошились без проблем. Что касается аппаратной части, то, как видно на прикрепленном изображении, плата без навигации имеет заметно более новую версию печатной платы с оптимизацией компоновки и компонентов по сравнению с рабочими платами.

При отладке программного обеспечения последовательности загрузки с USB я заметил, что она зависает сразу после инициализации ввода-вывода. Это может быть связано либо с изменениями в схеме новой версии, либо просто с неисправностью оборудования.

Кто-нибудь сталкивался с подобной неисправностью на версии с 1 ГБ оперативной памяти без системы навигации и смог ли восстановить ЭБУ? Буду благодарен за любую помощь. IMG_5179

@SachkovDI

Copy link
Copy Markdown

Uploading IMG_20260828_212354.jpg…

@MarcT

MarcT commented Aug 30, 2026

Copy link
Copy Markdown

I'm using version 1.1 and the flash consistently fails at unexpected 2nd stage response.

My board is a non-NAV APIM, 1 GB RAM / 8 GB eMMC.

For comparison, I tested two boards belonging to a friend (NAV variants, 2 GB RAM, 32 GB and 64 GB) and both flashed without any issue. On the hardware side, as shown in the attached picture, the non-NAV board is a noticeably more recent PCB revision with several layout and component optimizations compared to the working ones.

While debugging the SW execution of the USB boot sequence, I noticed it stalls right after the I/O initialization. This could be explained either by a schematic change on this newer revision, or simply by dead hardware.

Has anyone faced a similar failure on the non-NAV 1 GB RAM variant and managed to recover the ECU? Any help would be appreciated.

Not sure I would say you have a "newer" one per se. Because its missing all the silk screening, I would hazard a guess that its a knockoff/recreation. I have never seen one from Ford without the silk screened numbers. They are serial numbers for manufacturing tracking in addition to the circuit trace locations/identification.

@BitwiseGuru

BitwiseGuru commented Aug 30, 2026

Copy link
Copy Markdown

I'm using version 1.1 and the flash consistently fails at unexpected 2nd stage response.
My board is a non-NAV APIM, 1 GB RAM / 8 GB eMMC.
For comparison, I tested two boards belonging to a friend (NAV variants, 2 GB RAM, 32 GB and 64 GB) and both flashed without any issue. On the hardware side, as shown in the attached picture, the non-NAV board is a noticeably more recent PCB revision with several layout and component optimizations compared to the working ones.
While debugging the SW execution of the USB boot sequence, I noticed it stalls right after the I/O initialization. This could be explained either by a schematic change on this newer revision, or simply by dead hardware.
Has anyone faced a similar failure on the non-NAV 1 GB RAM variant and managed to recover the ECU? Any help would be appreciated.

Not sure I would say you have a "newer" one per se. Because its missing all the silk screening, I would hazard a guess that its a knockoff/recreation. I have never seen one from Ford without the silk screened numbers. They are serial numbers for manufacturing tracking in addition to the circuit trace locations/identification.

I agree with you, it’s the first time I’ve seen a similar variant. But I can confirm it came from Ford, as I’m the first owner of the car and the APIM was never replaced.

After a few hours debugging the board today, I noticed systematic reset occurs right after the I2C exchanges to configure the PMIC. So I think my case is more likely a bricked HW. I’ll give it one more try if I can find a test point for UART3 (AG24 OMAP5432 ball) to get live logs before giving up.

@SachkovDI

SachkovDI commented Sep 3, 2026

Copy link
Copy Markdown
IMG_20260831_072739 I have the same problem with that chip. he doesn't want to write. you couldn't reprogram the story?

Я использую версию 1.1, и прошивка постоянно вылетает на unexpected 2nd stage response. У меня плата APIM без поддержки NAV, 1 ГБ ОЗУ / 8 ГБ eMMC. Для сравнения я протестировал две платы, принадлежащие моему другу (варианты с поддержкой NAV, 2 ГБ ОЗУ, 32 ГБ и 64 ГБ), и обе прошились без проблем. Что касается аппаратной части, то, как видно на прикрепленном изображении, плата без системы навигации представляет собой заметно более новую версию печатной платы с оптимизацией разводки и компонентов по сравнению с рабочими платами. При отладке программного обеспечения последовательности загрузки через USB я заметил, что она зависает сразу после инициализации ввода-вывода. Это может быть связано либо с изменениями в схеме этой более новой версии, либо просто с неисправностью оборудования. Кто-нибудь сталкивался с подобной проблемой на плате с 1 ГБ ОЗУ без системы навигации и смог восстановить ЭБУ? Буду признателен за любую помощь.

Не уверен, что у вас есть «более новая» модель как таковая. Поскольку на ней нет шелкографии, я бы рискнул предположить, что это подделка/копия. Я никогда не видел у Ford моделей без шелкографии с серийными номерами. Это серийные номера для отслеживания производства в дополнение к расположению/идентификации дорожек на печатной плате.

Я с вами согласен, я впервые вижу такой вариант. Но я могу подтвердить, что он от Ford, потому что я первый владелец этой машины, и APIM мне никто не менял.

Сегодня, после нескольких часов отладки платы, я заметил, что систематический сброс происходит сразу после обмена данными по протоколу I2C для настройки PMIC. Так что, скорее всего, проблема в аппаратной части. Я попробую еще раз, если смогу найти тестовую точку для UART3 (AG24 OMAP5432), чтобы получить логи в реальном времени, прежде чем сдаться.

@BitwiseGuru

Copy link
Copy Markdown

I have the same problem with that chip. he doesn't want to write. you couldn't reprogram the story?

I tried, but unfortunately had no success flashing my board with the current version of the flasher. In my free time, I’ve been looking into the board schematic, since no schematic is publicly available (which is understandable 😄), at least to get a better idea of the HW health and hopefully reach a conclusion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment