Files

119 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# lezyne-rear-light-firmware
**🚧 Work in progress. No complete firmware yet 🚧**
🚀 For pre-build binaries go to [Releases](https://git.mosad.xyz/localhorst/lezyne-rear-light-firmware/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](#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)
![Image of the PCB in doc/ folder.](doc/bottom_side.png "Back of PCB")
![Image of the PCB in doc/ folder.](doc/front_side.png "Front of PCB")
| 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 12 | Output |
| 5 | PA2 | IO | LED 36 | Output |
| 6 | PA3 | IO | LED 78 | 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 12 | LED(s) **OFF** | LED(s) **ON** |
| PA2 | LED 36 | LED(s) **OFF** | LED(s) **ON** |
| PA3 | LED 78 | 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.