Getting Started with Firmware Development
Project Detection
Neural Inverse auto-detects firmware projects by scanning for build system configuration files:
| File | Build System | Confidence |
|---|---|---|
platformio.ini | PlatformIO | High |
*.ioc | STM32CubeMX | High |
sdkconfig | ESP-IDF | High |
prj.conf / west.yml | Zephyr | High |
CMakeLists.txt (with embedded targets) | CMake | Medium |
Makefile (with cross-compiler) | Make | Medium |
Cargo.toml + embedded-hal | Rust embedded | High |
mbed_app.json | Mbed OS | High |
| Arduino includes | Arduino CLI | Medium |
When detected, the IDE extracts:
- MCU variant
- Build system type
- RTOS (if any)
- HAL/framework
- Board name
Creating a Firmware.inverse Manifest
For explicit configuration or when auto-detection isn't sufficient, create a Firmware.inverse file in your workspace root:
{
"neuralInverseFirmware": true,
"version": "1",
"mcu": "STM32F407VGT6",
"board": "STM32F4DISCOVERY",
"rtos": "FreeRTOS",
"buildSystem": "cmake",
"hal": "stm32-hal",
"compliance": ["misra-c-2012"],
"datasheets": ["docs/stm32f407_rm.pdf"],
"svd": "docs/STM32F407.svd"
}Or use the agent tool:
> fw_initThis scans your project and generates the manifest automatically.
Opening the Firmware Console
Press Cmd+Alt+F (macOS) or Ctrl+Alt+F (Linux/Windows) to open the Firmware Environment window.
The console provides 13 tabs:
- Dashboard — Session overview, MCU info
- Pinout — Pin assignments and conflicts
- Architecture — Peripheral schematic
- HW Tools — Instrument status
- Instruments — Logic Analyzer, Power Analyzer, Oscilloscope
- Datasheets — PDF uploads and extraction status
- Registers — Register map viewer with bit field layout
- Serial — Serial monitor, RTT, ITM
- Compliance — Framework violation status
- Build — Build output and errors
- RTOS — Thread inspection, heap analysis
- HIL — Hardware-in-the-loop test runner
- Closed-Loop — Autonomous optimization
MCU Selection
Search the built-in database of 361 MCUs:
> fw_search_mcu STM32F4Or select from the Firmware console's idle screen. The MCU selection loads:
- SVD register maps (peripheral definitions, bit fields, access types)
- Memory layout (flash, RAM, CCM, ITCM, DTCM regions)
- Clock tree constraints
- Known silicon errata
- GPIO alternate function database
- Peripheral list
First Build
Once your project is configured:
> fw_buildThis runs your build system's compile command (e.g., pio run, cmake --build, cargo build --target ...).
After building:
> fw_binary_sizeShows section breakdown (.text, .data, .bss) with Flash% and RAM% usage.
Flashing
Detect available flash tools:
> fw_detect_flash_toolsThen flash:
> fw_flashStatus Bar
The status bar shows:
- MCU family and variant
- Active compliance framework
- Datasheet count
- Peripheral count
Click to focus the Firmware Environment window.
Commands
| Command | Keybinding | Description |
|---|---|---|
neuralInverse.openFirmware | Cmd+Alt+F | Open/focus Firmware console |
neuralInverse.focusFirmware | — | Focus or open Firmware console |
neuralInverse.endFirmwareSession | — | End session, clear state |
neuralInverse.scanFirmwareProject | — | Re-scan workspace for firmware indicators |
neuralInverse.createFirmwareInverse | — | Generate Firmware.inverse manifest |
Last edited