lezyne-rear-light-firmware
🚧 Work in progress. No complete firmware yet 🚧
🚀 For pre-build binaries go to Releases.
Open firmware for Lezyne bike rear lights based on ATTINY202
This repository contains a minimal firmware as a C project for the ATtiny202 microcontroller using GCC, CMake, and VS Code. It also includes instructions for programming the chip using an FT232 USB-UART adapter via the UPDI interface with pymcuprog
.
Table of Contents
- Dependencies
- Setup Build Environment
- Building the Project
- Flashing the Firmware
- Reading Flash Content
- Hardware Setup
- License
Dependencies
Ensure the following tools are installed on your system:
- GCC AVR toolchain (supports ATtiny 0/1-series)
sudo zypper install avr-gcc avr-libc
- CMake
sudo zypper install cmake
- Python 3, pip and venv
sudo zypper install python3 python3-pip python3-venv
- VS Code (optional but recommended)
- CMake Tools extension for VS Code
Setup Build Environment
- Clone the repository:
git clone https://git.mosad.xyz/localhorst/lezyne-rear-light-firmware cd lezyne-rear-light-firmware
- Configure the CMake project:
- Open the folder in VS Code.
- Select the AVR-GCC kit in the bottom blue bar.
- Run CMake: Configure (from command palette) if it doesn't auto-run.
Building the Project
- Press F7 or Ctrl+Shift+B to build.
- Output files are generated in the 'build/' folder:
- main.elf → ELF executable
- main.hex → HEX file (flashable)
- main.bin → BIN file
Flashing the Firmware
Hardware: FT232 USB-UART adapter connected to UPDI with a 4.7 kΩ resistor.
- Create and activate a Python virtual environment:
python3 -m venv pyupdi-env source pyupdi-env/bin/activate
- Install pymcuprog inside the environment:
pip install pymcuprog
- Verify installation:
pymcuprog --version
- Flash using pymcuprog:
pymcuprog -t uart -u /dev/ttyUSB0 -d attiny202 write -f build/main.hex
Hardware Setup (FT232 → ATtiny202 UPDI)
FT232 TX ----[4.7kΩ]---- UPDI (Pin 6)
FT232 GND --------------- GND
VCC -------------------- VCC (3.3V or 5V, must match FT232 logic)
Hint: The GPIO PA0 acts as UPDI of ATtiny202 and needs to be disconnected from the PCB during programming.
ATtiny202-SSN Pin Mapping (PCB Usage)
Pin # | Pin Name | Port | PCB Usage | Direction |
---|---|---|---|---|
1 | VDD | — | +VDD (Power) | Power Input |
2 | PA6 | IO | Green LED | Output |
3 | PA7 | IO | Red LED | Output |
4 | PA1 | IO | LED 1–2 | Output |
5 | PA2 | IO | LED 3–6 | Output |
6 | PA3 | IO | LED 7–8 | Output |
7 | PA0 | IO | UPDI / Activation Button | Input (button, pull-up) / UPDI (program) |
8 | GND | — | Ground | Power Ground |
Logic Levels (LEDs & Button)
Signal | PCB Usage | LOW | HIGH |
---|---|---|---|
PA6 | Green LED | LED ON | LED OFF |
PA7 | Red LED | LED ON | LED OFF |
PA1 | LED 1–2 | LED(s) OFF | LED(s) ON |
PA2 | LED 3–6 | LED(s) OFF | LED(s) ON |
PA3 | LED 7–8 | LED(s) OFF | LED(s) ON |
PA0 | Activation Button | Button pressed (GND) | Button released (pull-up) |
License
This project is licensed under the MIT License. See LICENSE for details.
First working firmware
Latest
Languages
C
75.8%
CMake
24.2%