* Libs: add FreeRTOS submodule. FuriHal: replace ST provided FreeRTOS with original one. FuriHal: for cmsis os hal and patch it for better compatibility with stream buffer. * Makefile: fix svd plugin on blackmagic * Lib: update STM32CubeWB package. Project: update project to match new cube package. * Lib: properly rebase and upload STM32CubeWB * BleGlue: switch ack logging level to trace
Flipper Zero Firmware
Welcome to Flipper Zero's Firmware repo! Our goal is to create nice and clean code with good documentation, to make it a pleasure for everyone to work with.
Update firmware
Get Latest Firmware from Update Server
Flipper Zero's firmware consists of three components:
- Core2 firmware set - proprietary components by ST: FUS + radio stack. FUS is flashed at factory and you should never update it.
 - Core1 Bootloader - controls basic hardware initialization and loads firmware.
 - Core1 Firmware - HAL + OS + Drivers + Applications.
 
All 3 of them must be flashed in order described.
With STLink
Core1 Bootloader + Firmware
Prerequisites:
- Linux / macOS
 - Terminal
 - arm-gcc-none-eabi
 - openocd
 
One liner: make flash
Core2 flashing procedures
Prerequisites:
- Linux / macOS
 - Terminal
 - STM32_Programmer_CLI (v2.5.0) added to $PATH
 
One liner: make flash_radio
With USB DFU
- 
Download latest Firmware
 - 
Reboot Flipper to Bootloader
 
- Press and hold 
← Left+↩ Backfor reset - Release 
↩ Backand keep holding← Leftuntil blue LED lights up - Release 
← Left 
- Run 
dfu-util -D full.dfu -a 0 
Build with Docker
Prerequisites
- Install Docker Engine and Docker Compose
 - Prepare the container:
 
docker-compose up -d
Compile everything
docker-compose exec dev make
Check dist/ for build outputs.
Use flipper-z-{target}-full-{suffix}.dfu to flash your device.
Build on Linux/macOS
macOS Prerequisites
Make sure you have brew and install all the dependencies:
brew bundle --verbose
Linux Prerequisites
gcc-arm-none-eabi
toolchain="gcc-arm-none-eabi-10.3-2021.10"
toolchain_package="$toolchain-$(uname -m)-linux"
wget -P /opt "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/$toolchain_package.tar.bz2"
tar xjf /opt/$toolchain_package.tar.bz2 -C /opt
rm /opt/$toolchain_package.tar.bz2
for file in /opt/$toolchain/bin/* ; do ln -s "${file}" "/usr/bin/$(basename ${file})" ; done
Optional dependencies
- openocd (debugging/flashing over SWD)
 - heatshrink (compiling image assets)
 - clang-format (code formatting)
 - dfu-util (flashing over USB DFU)
 - protobuf (compiling proto sources)
 
For example, to install them on Debian, use:
apt update
apt install openocd clang-format-13 dfu-util protobuf-compiler
heatshrink has to be compiled from sources.
Compile everything
make
Check dist/ for build outputs.
Use flipper-z-{target}-full-{suffix}.dfu to flash your device.
Flash everything
Connect your device via ST-Link and run:
make whole
Links
- Discord: flipp.dev/discord
 - Website: flipperzero.one
 - Kickstarter page: kickstarter.com
 - Forum: forum.flipperzero.one
 
Folders structure
- applications - application and services
- accessor - Wiegand server
 - archive - Archive and file manager
 - bt - BLE service and application
 - cli - Console service
 - debug_tools - different tools that we use on factory and for debug
 - dialogs - service for showing GUI dialogs
 - dolphin - dolphin service and supplementary apps
 - gpio-tester - GPIO control application
 - gui - GUI service
 - ibutton - ibutton application, onewire keys and more
 - input - input service
 - irda - irda application, controls your IR devices
 - irda_monitor - irda debug tool
 - lfrfid - LF RFID application
 - lfrfid-debug - LF RFID debug tool
 - loader - application loader service
 - menu - main menu service
 - music-player - music player app (demo)
 - nfc - NFC application, HF rfid, EMV and etc
 - notification - notification service
 - power - power service
 - power-observer - power debug tool
 - scened-app-example - c++ application example
 - storage - storage service, internal + sdcard
 - storage_settings - storage settings app
 - subghz - subghz application, 433 fobs and etc
 - tests - unit tests and etc
 
 - assets - assets used by applications and services
- compiled - compilation results
 - icons - source icons images
 
 - bootloader - bootloader for flipper
- src - bootloader sources
 - targets - targets' hal and implementation
 
 - core - core libraries: home for furi
 - debug - debug helpers, plugins and tools
 - docker - docker image sources (used for automated firmware build)
 - documentation - documentation generation system configs and input files
 - firmware - firmware for flipper
- targets - targets' hal and implementation
 
 - lib - different libraries and drivers that apps and firmware uses
- ST25RFAL002 - ST253916 driver and NFC hal
 - STM32CubeWB - STM32WB hal
 - app-scened-template - scened template app library
 - app-template - template app library
 - callback-connector - callback connector library
 - common-api - common api declaration library
 - cyfral - cyfral library
 - drivers - drivers that we wrote
 - fatfs - external storage file system
 - fnv1a-hash - fnv1a hash library
 - irda - irda library
 - littlefs - internal storage file system
 - mlib - algorithms and containers
 - nfc_protocols - nfc protocols library
 - onewire - one wire library
 - qrcode - qr code generator library
 - subghz - subghz library
 - toolbox - toolbox of things that we are using but don't place in core
 - u8g2 - graphics library that we use to draw GUI
 
 - make - make helpers
 - scripts - supplementary scripts
 
