117 lines
4.5 KiB
Markdown
117 lines
4.5 KiB
Markdown
# lezyne-rear-light-firmware
|
||
|
||
**🚧 Work in progress. No complete firmware yet 🚧**
|
||
|
||
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](#dependencies)
|
||
- [Setup Build Environment](#setup-build-environment)
|
||
- [Building the Project](#building-the-project)
|
||
- [Flashing the Firmware](#flashing-the-firmware)
|
||
- [Reading Flash Content](#reading-flash-content)
|
||
- [Hardware Setup](#hardware-setup)
|
||
- [License](#license)
|
||
|
||
---
|
||
|
||
## Dependencies
|
||
|
||
Ensure the following tools are installed on your system:
|
||
|
||
- **GCC AVR toolchain** (supports ATtiny 0/1-series)
|
||
```bash
|
||
sudo zypper install avr-gcc avr-libc
|
||
```
|
||
- **CMake**
|
||
```bash
|
||
sudo zypper install cmake
|
||
```
|
||
- **Python 3, pip and venv**
|
||
```bash
|
||
sudo zypper install python3 python3-pip python3-venv
|
||
```
|
||
- **VS Code** (optional but recommended)
|
||
- **CMake Tools extension** for VS Code
|
||
|
||
## Setup Build Environment
|
||
1. Clone the repository:
|
||
```bash
|
||
git clone https://git.mosad.xyz/localhorst/lezyne-rear-light-firmware
|
||
cd lezyne-rear-light-firmware
|
||
```
|
||
2. 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
|
||
1. Press F7 or Ctrl+Shift+B to build.
|
||
2. 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.
|
||
1. Create and activate a Python virtual environment:
|
||
```bash
|
||
python3 -m venv pyupdi-env
|
||
source pyupdi-env/bin/activate
|
||
```
|
||
2. Install pymcuprog inside the environment:
|
||
```bash
|
||
pip install pymcuprog
|
||
```
|
||
3. Verify installation:
|
||
```bash
|
||
pymcuprog --version
|
||
```
|
||
4. Flash using pymcuprog:
|
||
```bash
|
||
pymcuprog -t uart -u /dev/ttyUSB0 -d attiny202 write -f build/main.hex
|
||
```
|
||
## Hardware Setup (FT232 → ATtiny202 UPDI)
|
||
```bash
|
||
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](./LICENSE) for details. |