How To Replace and Program a Honda Key FOB for < $100

UPDATE 2022-08-31: It turns out that in order to program Honda key fobs for cars w/ a push to start button (one button start), you need to be running the beta Honda module V2.01.54, which only runs on 64-bit Android phones, and which you must request from Autel (Instructions here: https://clarity-phev.github.io/Battery-Capacity-Read/AP200_Instructions.pdf). The regular Honda module only programs keys via a separate external module, which plugs into the car’s DLC port. If you aren’t able to obtain the beta Honda module, then you’re out of luck, unfortunately.

Several months ago, I misplaced one of the key fobs from my 2019 Honda Clarity. The MSRP of the fob itself is $467, and I found the OEM part online for $314. Local locksmiths all wanted $150 to program it. Outrageous.

I started searching around for cheaper sources of fobs, and found one on eBay for $22.24:

I was pleasantly surprised when I received it. It’s pretty much identical to the OEM part, except that the spot for a plastic insert in the back is empty. It even comes with a blank key, which slides out, just like the original. Next, I had to figure out how to program it. I called a bunch of locksmiths, and they all wanted $150 to program it, which is crazy. Then I remembered that I had an Autel MaxiAP200 bluetooth dongle, which I used for OBD-II diagnostics.:

It’s a steal, because it can do most of the functions that their standalone professional OBD-II units can do, but a fraction of the price. I bought mine on AliExpress for $50 from the official Autel store (the price is higher on the screenshot above). You can also find them on Amazon. Autel sells several different models of bluetooth dongle at different price points. Make sure to buy the MaxiAP200. The other models force you to pay an annual fee, while the MaxiAP200 includes a lifetime license for one vehicle make, with free updates. You can add on other makes later on, but they will need to be renewed annually. It connects to both Android an iOS phones. I will not go into how to install the app and pair the device, because you can find that info elsewhere.

Anyway, I started looking around the functions that were available in the app, and discovered that it has the capability to program key fobs! I will walk you through the easy procedure. Note: Some of the screens may be missing in the walkthrough below.. there were so many that I think I forgot one or two, but the app walks you through step-by-step. Just follow the prompts.

Launch the MaxiAP200 app on your phone, and select Service from the main menu.

Next, select the Immo Keys module:

Then select your vehicle brand:

Next, you’ll be prompted to select the vehicle:

Then your vehicle’s country of sale:

It will scan for your VIN, and then give you the following confirmation screen:

Next select Hot functions:

Tap One-push start:

Tap Registration, which takes you to the functions for adding/removing fobs:

Select Add a keyless access Remote:

This launches you into the procedure for registering a new fob. Sorry, this is the part where I am missing some screens below. I can’t remember exactly, but it walks you through several steps.. pushing the car’s Start button w/ a working key fob in the vehicle, turning the car off, pushing the Start button w/ they fobs in and out of the car, etc. Just follow the prompts. I don’t remember the exact order. Below is one of the prompts:

After you walk through all the steps, if you did everything correctly, you get this screen:

Now, the moment of truth! Try using your newly programmed fob to lock/unlock the doors, and start the car!

Converting Cheap Chinese USBHID Fake USBasps Into Real USBasps

I recently ordered some USBasps from Amazon, which looked interesting, because unlike the typical USBasps, which are just bare PCBs, these had metal cases:

They are also common on AliExpress.

Unfortunately, when I plugged one into my computer, it detected as a USBHID device with VID=03EB and PID=C8B4, rather than as a USBasp. I tried overriding the USBHID driver on my Windows 10 machine, but that didn’t work.

Thankfully, after doing a bit of searching on the Internet, I found that others had encountered the same problem, and had found a solution. It seems that the firmware loaded into these things from the factory is proprietary, and require that you use the manufacturer’s janky software … it’s not AVRdude compatible!

Thankfully, the hardware is actually compatible w/ USBasp firmware with a minor tweak, and you just have to flash it with modified USBasp firmware.

I have a bunch of real USBasps, so I used a USBasp to convert the fakes into real USBasps! In order to program it, slide off the metal case. Next need to connect a jumper across the two holes labeled –> UP <–. The jumper enables programming of the onboard ATmega88V. Then plug it into your other USBasp or other ISP programmer, using the 10-pin ICSP cable:

So where do you get the special firmware? GreenPhotons has graciously compiled a modified firmware for us. Next use AVRdude to program the USBasp firmware into our target:

avrdude -cusbasp -pm88 -Uflash:w:20161227_mega88_usbasp.hex

You can use any ISP you already have, if you don’t have another USBasp. Just substitute the programmer in the -c parameter (e.g. -cusbtiny for a USBtiny). If you don’t have another ISP programmer, you can use an Arduino. This guy shows you how, as well as another way to get firmware.

If you get the following error, then your USBHID ISP has an ATmega88P instead of an ATmega88V

D:\hacking\arduino\USBasp\convert_usbhid>avrdude -cusbasp -pm88  -Uflash:w:20161227_mega88_usbasp.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e930f
avrdude: Expected signature for ATMEGA88 is 1E 93 0A
         Double check chip, or use -F to override this check.

Just substitute -pm88p for -pm88 in the avrdude command line:

avrdude -cusbasp -pm88p -Uflash:w:20161227_mega88_usbasp.hex

If you have an old copy of avdude that doesn’t like -pm88p, you can instead use -F to force avrdude to ignore the device signature:

avrdude -cusbasp -F -pm88 -Uflash:w:20161227_mega88_usbasp.hex

Downloads:

modified ATmega88 firmware for USBHID USBasp

References:

Making USBasp Chinese Clones Usable

Hacking An AVR Programmer

Hacking An AVR Programmer II

I found this great resource after writing this article:

USBasp on a Clone