* ReadMe: update flashing scripts section * Furi: add record exists method to record store. * FuriHal: early OS init and i2c timeouts based on os ticks. * Storage: replace malloc with furi_alloc, fix errors found by pvs. * iButton: properly handle shutdown in cli search command * SubGhz: proper argument type in sscanf and incorrect position of logging in switch.
6.1 KiB
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
+↩ Back
for reset - Release
↩ Back
and keep holding← Left
until 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