# ⬆️ Flashing The Firmware

[Open Controller Firmware Page](https://handheldlegend.github.io/opencontroller)

## ESP32 Firmware Flashing

Flashing the initial firmware onto your ESP32 requires you to use the Micro-USB port on the ESP32. Plug in the Micro-USB and click connect on the update website linked above. 


:::hint{type="info"}
You may need to install the CP210x driver provided by Silicon Labs: 

Windows: <https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers.zip>

Mac:

<https://www.silabs.com/documents/public/software/Mac_OSX_VCP_Driver.zip>

:::

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS82ZWU3ZWRmMi1jYmE0LTQ5M2UtOTZjMy1mYmE2MDhiNDEwN2QvQllwNzVyNS5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.p7tiYHODb7udBTaQJdy1C6NMI5cpMwYa3RBs98J8xr8)

You will be asked to select a device, select "CP2102 USB to UART Bridge Controller" 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS8zYWZjYTY0OC1iM2MxLTQ5M2EtYTBmYS1kOTE1YWM5OWVkM2Uvc2xTTkxhbC5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.gyldh_EO_qwWQ46_8xgJfeRnPu1xBgzThS_Bj5ySg-c)

It will then prompt you with a box that says "Install Open Controller Classic", click that button

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS84NDJkOTIyMi01NGM5LTQ5MGEtOTM4OC1hODlmZjEyOGUxYWMvYzRFQkFaVS5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.3XQe7rWMCpKcIeM3IBu53SLEpuhGZfOKhfE2aOrJ3po)

 It will ask you if you want to erase the device; *this is optional and not required.* Click next. 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS80MzFiNDkyYi1hN2I4LTQyMjgtODk3Yi03YjQ4N2EyMjI3ZTcvMDBrU0VjaC5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.JTRTBAd5pCLNIO_MITW7N4oyQiRUYCe3r9QTFKzaXWo)

It will then ask you to confirm the installation

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS81ODA1NmRjYS1mMTdmLTQyZjQtYTU5Mi1mZDE0MDM2MDFlN2QvdkdEV1BwRy5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.w8GnQMtLG_sRsQ8TirAzzZjVcChiIqxaqRTLDW-nbCI)

The install will then start, it may take up to two minutes to complete

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS9kN2ZjNjcyNS0wNDYzLTRlMmItYmE4Mi1lYWEzNzliOWRkNzYvMEpkUlNHaS5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.MPQUsQffNCk_LpY07pXCsRpfDx7g1t0pUkhB0GfsdLI)

When it finishes you will get a confetti symbol showing that the install is complete! You can then close any pops ups left on the screen, and unplug the micro-usb cable. 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS9mNTIwZmE4NS1mOTJmLTRiMWQtYmQ3Ny0yOWI1YzRjNTNhMDQvdE9PRHREdy5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.aTEmk_TQGs2R0aWKwVdXLWzO2d2N6YTkSsAwEKhscS8)

## USB Firmware Flashing

The USB gamepad communications are handled by an EFM8UB1 microcontroller acting as a co-processor as the ESP32 does not have native USB device support. This microcontroller has its own firmware which must be installed.

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS9hOWQ3OTgxYS0xOTQyLTQ0NzktOTZjNC04NDZiNzUyNTlmYjMvcWwyWkJFNS5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.8HUa6ZjeS8U9x3K1QhhehgsGatZQcYhTAq67LcSpFJc)

Download the ZIP file provided on the firmware page. Extract the ZIP file. 

Hold down the button labelled \*\*EN \*\*on the ESP32 devkit while plugging in the USB-C Cable. This will put the USB microcontroller into programming mode.

Run the 'LoadEFM8.bat' file. 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS8xNDI4NWMxYi02ZWQ0LTRiY2UtOTE2Yy1lZjlmNjkzMGIyNTAvdmFKVnJzby5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.gGWKVv7Hhcg1_HjKgUrvV9Dl3SuszxQ6onzVI8-BKT8)

You may end up getting a Windows Defender notification, simply click **more info** and **allow access** to for the flasher to run. 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS9mMmU2NTg4Ny00YWE3LTRlMTAtOTBkZC0zN2Y4MDBmMDA2NjkvM2tqeURFTC5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.cCUyf9ibjZ8EMstiTmopqozmix6bUqYZzom8_6y-3EI)

After a successful update, you will get a message telling you to press any button to exit. 

 ![](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS8yOWRmOTY2Yi1hYTcyLTRmYWUtOTljOC1hNTNjNjQ0YzMzMWMveE1ERUFiQy5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgyMTUwMCwiZXhwIjoxNzkzOTA3OTAwfQ.lQsunJn3sHEGMkEB_hoVUDmKlIzGiIdUj4YGbm9SCpo)

Unplug and replug your device to confirm USB Gamepad function is working properly.