Documentation Index
Fetch the complete documentation index at: https://mintlify.com/analogdevicesinc/codefusion-studio/llms.txt
Use this file to discover all available pages before exploring further.
CodeFusion Studio uses two JSON-based configuration file formats to capture the full hardware and project setup for a workspace. The .cfsworkspace file is a lightweight workspace descriptor created during workspace setup and consumed when reopening or sharing a project. The .cfsconfig file is the detailed SoC configuration produced by System Planner: it records pin assignments, clock configuration, peripheral settings, memory allocations, AI model entries, and the plugin bindings for each processor core. Together these two formats form the machine-readable contract between the CFS UI, the CLI (cfsutil), and code generation plugins.
File naming and location conventions
CFS configuration files follow a predictable naming pattern and live inside a hidden .cfs/ directory at the workspace root:
my-workspace/
├── .cfs/
│ └── <soc>-<package>.cfsconfig # e.g. max32690-tqfn.cfsconfig
├── <workspace-name>.cfsworkspace
├── m4/ # Cortex-M4 project folder
└── rv/ # RISC-V project folder (dual-core SoCs)
The .cfsconfig filename is derived from the SoC name and package variant in lowercase, separated by a hyphen (for example max78000-ctbga.cfsconfig, adsp-21835w-bga_ed.cfsconfig). The .cfsworkspace file sits at the workspace root and carries the workspace name.
The .cfsworkspace file is created when you complete the Workspace Creation Wizard (or run cfsutil workspace configure / cfsutil workspace create). It records which SoC, board, and package were chosen, the plugin bound to each core, and workspace-level metadata.
Top-level fields
| Field | Type | Description |
|---|
DataModelVersion | string | SemVer of the CFS data model schema used to generate this file |
Timestamp | string | ISO 8601 creation or last-modified timestamp |
Soc | string | SoC name (e.g. "MAX32690") |
Package | string | Package variant (e.g. "WLP", "TQFN") |
Board | string | Board identifier (e.g. "AD-APARD32690-SL") |
WorkspacePluginId | string | Reverse-DNS plugin ID for the workspace template plugin, or empty string for manually configured workspaces |
WorkspacePluginVersion | string | SemVer of the workspace plugin |
WorkspaceName | string | Human-readable workspace name |
Location | string | Filesystem path to the workspace root |
Projects | array | Array of per-core project descriptors (see below) |
Projects array entry fields
| Field | Type | Description |
|---|
Id | string | Unique opaque identifier for this core partition |
CoreId | string | Core identifier (e.g. "CM4", "RV", "CM33") |
Name | string | Human-readable core name (e.g. "Arm Cortex-M4F") |
IsPrimary | boolean | Whether this is the primary core of the workspace |
IsEnabled | boolean | Whether code generation is active for this core |
PluginId | string | Reverse-DNS ID of the project plugin for this core |
PluginVersion | string | SemVer of the project plugin |
FirmwarePlatform | string | Firmware platform: "msdk", "zephyr", or "SHARC-FX" |
PlatformConfig | object | Platform-specific settings saved from the Workspace Creation Wizard |
Minimal skeleton (sample.cfsworkspace)
The empty skeleton that CFS generates when initializing a new workspace:
{
"DataModelVersion": "0.0.1",
"Timestamp": "2024-11-18T12:25:18.955Z",
"Soc": "",
"WorkspacePluginId": "",
"Board": "",
"Package": "",
"Projects": [],
"WorkspacePluginVersion": "",
"WorkspaceName": "",
"Location": ""
}
Populated example (persisted-sample.cfsworkspace)
A persisted workspace for the MAX32690 with a Zephyr Cortex-M4 primary project and an MSDK RISC-V secondary project:
{
"DataModelVersion": "0.0.1",
"Timestamp": "2025-03-17T13:17:04.502Z",
"Soc": "MAX32690",
"WorkspacePluginId": "",
"Board": "AD-APARD32690-SL",
"Package": "WLP",
"WorkspacePluginVersion": "1.0.0",
"WorkspaceName": "test-workspace-name",
"Location": "test/workspace/path",
"Projects": [
{
"Id": "corepart_01jrdgezrce69rsqvja125h3v2",
"CoreId": "CM4",
"Name": "Arm Cortex-M4F",
"IsPrimary": true,
"IsEnabled": true,
"PluginId": "com.analog.project.zephyr.plugin",
"PluginVersion": "1.0.0",
"FirmwarePlatform": "zephyr",
"PlatformConfig": {
"ProjectName": "myProject",
"BuildSystem": "ninja",
"ZephyrBoardName": "zephyr_board_name",
"ZephyrVersion": "4.2.0",
"KConfigFlags": "# Build for debug (no optimizations) by default\nCONFIG_DEBUG=y\nCONFIG_NO_OPTIMIZATIONS=y\n\n# Enable thread awareness when debugging\nCONFIG_THREAD_NAME=y\nCONFIG_DEBUG_THREAD_INFO=y\nCONFIG_THREAD_ANALYZER=y\n",
"CMakeArgs": "# Include compiler flags to enable source navigation with ELF File Explorer\nzephyr_cc_option(-fstack-usage)\nzephyr_cc_option(-fdump-ipa-cgraph)\nzephyr_cc_option(-gdwarf-4)\n",
"EnableTFM": false,
"MCUbootImgtoolPath": "${config:cfs.sdk.path}/SDK/zephyr/bootloader/mcuboot/scripts",
"MCUbootKeyType": "rsa-3072"
}
},
{
"Id": "corepart_01jrdgezrce6a8zq3xaqac6wkg",
"CoreId": "RV",
"Name": "RISC-V",
"IsPrimary": false,
"IsEnabled": true,
"PluginId": "com.analog.project.msdk.plugin",
"PluginVersion": "1.1.0",
"FirmwarePlatform": "msdk",
"PlatformConfig": {
"ProjectName": "myProject",
"MsdkBoardName": "msdk_board_name",
"Cflags": "-fdump-rtl-expand\n-fdump-rtl-dfinish\n-fdump-ipa-cgraph\n-fstack-usage\n-gdwarf-4"
}
}
]
}
The WorkspacePluginId is empty for manually configured workspaces (those created via Manually configure the workspace in the wizard). It is populated only when a workspace template plugin was selected.
The .cfsconfig file is the primary hardware configuration artefact. It is read and written by System Planner, and consumed by code generation plugins and cfsutil commands. The file schema is versioned via DataModelVersion (a SemVer range expression) and SchemaVersion (a fixed version string).
Top-level fields
| Field | Type | Description |
|---|
Copyright | string | ADI copyright notice |
DataModelVersion | string | SemVer range (e.g. "^1.1.0") specifying the required CFS data model version |
SchemaVersion | string | Schema version of this file format (e.g. "2.1.0") |
Timestamp | string | ISO 8601 timestamp of the last save |
Soc | string | SoC name (e.g. "MAX78000", "ADSP-21835W") |
Package | string | Package variant (e.g. "CTBGA", "BGA_ED") |
BoardName | string | Board identifier |
Pins | array | Pin multiplexing assignments (populated by Pin Config tool) |
ClockNodes | array | Clock tree node overrides (populated by Clock Config tool) |
Projects | array | Array of per-core project configurations |
Projects array entry fields
| Field | Type | Description |
|---|
CoreId | string | Core identifier: "CM4", "CM33", "RV", "FX" |
ProjectId | string | Unique project identifier within this workspace |
PluginId | string | Reverse-DNS ID of the code generation plugin |
PluginVersion | string | SemVer range of the plugin |
FirmwarePlatform | string | "msdk", "zephyr", or "SHARC-FX" |
ExternallyManaged | boolean | If true, CFS does not manage build tasks for this project |
Secure | boolean | Present on TrustZone-enabled cores: true for the secure world project |
PlatformConfig | object | Plugin-specific project settings (project name, Zephyr board name, etc.) |
Partitions | array | TrustZone memory partition assignments |
Peripherals | array | Peripheral configuration entries (name, signals, config map) |
Dual-core example (MAX78000 MSDK — max78000.cfsconfig)
The MAX78000 exposes a Cortex-M4 (CM4) and a RISC-V core (RV). Each receives its own project entry:
{
"DataModelVersion": "^1.0.25",
"SchemaVersion": "2.1.0",
"Soc": "MAX78000",
"Package": "CTBGA",
"BoardName": "EvKit_V1",
"Pins": [],
"ClockNodes": [],
"Projects": [
{
"CoreId": "CM4",
"ProjectId": "CM4",
"FirmwarePlatform": "msdk",
"PluginId": "com.analog.project.msdk.plugin",
"PluginVersion": "^1.1.0",
"ExternallyManaged": false,
"Partitions": [],
"Peripherals": [
{
"Name": "CM4 SysTick",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
],
"PlatformConfig": { "ProjectName": "m4" }
},
{
"CoreId": "RV",
"ProjectId": "RV",
"PluginId": "com.analog.project.msdk.plugin",
"PluginVersion": "^1.1.0",
"FirmwarePlatform": "msdk",
"ExternallyManaged": false,
"Partitions": [],
"Peripherals": [
{
"Name": "RV mtime",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
],
"PlatformConfig": { "ProjectName": "rv" }
}
]
}
The MAX32690 configuration below assigns a Zephyr plugin to the Cortex-M4 and an MSDK plugin to the RISC-V co-processor:
{
"DataModelVersion": "^1.1.0",
"SchemaVersion": "2.1.0",
"Soc": "MAX32690",
"Package": "TQFN",
"BoardName": "AD-APARD32690-SL",
"Pins": [],
"ClockNodes": [],
"Projects": [
{
"CoreId": "CM4",
"ProjectId": "CM4",
"PluginId": "com.analog.project.zephyr.plugin",
"PluginVersion": "^1.0.0",
"FirmwarePlatform": "zephyr",
"ExternallyManaged": false,
"PlatformConfig": {
"ProjectName": "m4",
"ZephyrVersion": "4.2.0",
"ZephyrBoardName": "max32690-evkit/evkit/m4"
},
"Partitions": [],
"Peripherals": [
{
"Name": "CM4 SysTick",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
]
},
{
"CoreId": "RV",
"ProjectId": "RV",
"PluginId": "com.analog.project.msdk.plugin",
"PluginVersion": "^1.1.0",
"FirmwarePlatform": "msdk",
"ExternallyManaged": false,
"Partitions": [],
"Peripherals": [
{
"Name": "RV mtime",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
],
"PlatformConfig": { "ProjectName": "rv" }
}
]
}
TrustZone example (MAX32657 — max32657-tz.cfsconfig)
The MAX32657 uses ARM TrustZone on its Cortex-M33 core. Two Projects entries share the same CoreId ("CM33") but carry distinct ProjectId values and a Secure boolean flag to separate the secure and non-secure worlds:
{
"DataModelVersion": "^1.0.0",
"SchemaVersion": "2.1.0",
"Soc": "MAX32657",
"Package": "WLP",
"BoardName": "EvKit_V1",
"Pins": [],
"ClockNodes": [],
"Projects": [
{
"CoreId": "CM33",
"ProjectId": "CM33-NS",
"PluginId": "com.analog.project.zephyr.plugin",
"PluginVersion": "^1.0.0",
"FirmwarePlatform": "zephyr",
"Secure": false,
"PlatformConfig": {
"ProjectName": "m33-ns",
"ZephyrVersion": "4.2.0",
"ZephyrBoardName": "max32657evkit/max32657/ns"
},
"Partitions": [],
"Peripherals": [
{
"Name": "CM33 SysTick (NS)",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
]
},
{
"CoreId": "CM33",
"ProjectId": "CM33-S",
"PluginId": "com.analog.project.msdk.plugin",
"PluginVersion": "^1.1.0",
"FirmwarePlatform": "zephyr",
"Secure": true,
"PlatformConfig": { "ProjectName": "m33-s" },
"Partitions": [],
"Peripherals": [
{
"Name": "CM33 SysTick (S)",
"Signals": [],
"Config": { "ENABLE": "FALSE" }
}
]
}
]
}
The manual TrustZone configuration option has been removed from the Workspace Creation Wizard for MAX32657 and MAX32658 in CFS 2.2.0. TrustZone support is available only through the TF-M Secure Partition workspace template, which has been verified to build correctly.
SHARC-FX example (ADSP-21835W — adsp-21835w-bga_ed.cfsconfig)
Single-core SHARC-FX workspace with the com.analog.project.sharcfx.plugin plugin and SHARC-FX firmware platform:
{
"DataModelVersion": "^1.0.25",
"SchemaVersion": "2.1.0",
"Soc": "ADSP-21835W",
"Package": "BGA_ED",
"BoardName": "EV-SOMCRR-EZKIT",
"Pins": [],
"ClockNodes": [],
"Projects": [
{
"CoreId": "FX",
"ProjectId": "FX",
"FirmwarePlatform": "SHARC-FX",
"PluginId": "com.analog.project.sharcfx.plugin",
"PluginVersion": "^1.0.0",
"ExternallyManaged": false,
"Partitions": [],
"Peripherals": [],
"PlatformConfig": { "ProjectName": "fx" }
}
]
}
AI model entries in .cfsconfig
When an AI model is added to a project (via the System Planner’s Embedded AI Tools section or cfsutil ai model add), the model configuration is stored inside the relevant Projects entry in the .cfsconfig file. The AI section contains the backend identifier, model file path, and backend-specific properties (such as Section, Symbol, ArenaSize for tflm, or Softmax, ClockDivider for izer). These values are read by cfsutil ai build and the CFS code generation pipeline to produce the deployable C/C++ source files.
You can inspect and modify .cfsconfig files directly in any text editor. After editing, re-open the file in System Planner or run cfsutil ai build to regenerate code from the updated configuration. Changes to Pins or ClockNodes arrays made outside the GUI require a manual re-trigger of the code generation step.