By default, The AWE SDK uses the AWE Designer to load any signal processing chain. However, once the signal chain is finalised, how to load the signal chain on startup without the use of AWE Designer?
By default, The AWE SDK uses the AWE Designer to load any signal processing chain. However, once the signal chain is finalised, how to load the signal chain on startup without the use of AWE Designer?
AWB stands for Audio Weaver Binary. An AWB is a compiled binary version of a layout and can be loaded directly on-target. AWB’s are most commonly used in production, as they can live directly on the target without any interaction with the PC. There are multiple ways to load an Audio Weaver Binary (AWB) file to start your AWE application on AM275x or AM62D platforms.
The AWE Core supports three different approaches to load your audio processing layout:
In this FAQ, we will be looking at the loading from C array.
Step 1: Generate Target Files from AWE Designer**
To generate target files, first create a valid design and then select the ‘Tools → Generate Target Files’ menu item.
Select the following:

Provide the array name as per your design. Then, click on Generate. This will create two files: [BaseName]_InitAWB.c and [BaseName]_InitAWB.h.
For example, if your layout is named "simple_multichannel_audio", you'll have:
Step 2: Add the Generated Files to your working directory.
For example, I am creating a new folder in audio_app and pasting it there:

Step 3: Update the Makefile to include the generated source file
diff --git a/audio_app/am275/c75_0/ti-c7000/makefile b/audio_app/am275/c75_0/ti-c7000/makefile
index f03823b5..1cd6ed7a 100644
--- a/audio_app/am275/c75_0/ti-c7000/makefile
+++ b/audio_app/am275/c75_0/ti-c7000/makefile
@@ -56,7 +56,8 @@ FILES_common := \
ti_board_open_close.c \
ti_dpl_config.c \
ti_pinmux_config.c \
- ti_power_clock_config.c
+ ti_power_clock_config.c \
+ simple_multichannel_audio_InitAWB.c \
#if OPTI_FLASH_SUPPORT is enabled in top-level makefile
ifeq ($(OPTI_FLASH_SUPPORT), 1)
@@ -67,6 +68,7 @@ FILES_PATH_common = \
.. \
../../../common/src \
generated \
+ ../../../awb/ \Step 4: Update Platform Initialisation Code
Modify your `platform.c` to load the AWB during AWE initialization:
From f818cd68c682c6854188812a7aa112db9cb1ef11 Mon Sep 17 00:00:00 2001
From: Shreyansh Anand <s-anand@ti.com>
Date: Thu, 8 Jan 2026 14:51:06 +0530
Subject: [PATCH] Add loadAWB to AWE Initialisation to load the binary
---
audio_app/common/src/platform.c | 44 +++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/audio_app/common/src/platform.c b/audio_app/common/src/platform.c
index a3125ee2..077c97c3 100644
--- a/audio_app/common/src/platform.c
+++ b/audio_app/common/src/platform.c
@@ -23,9 +23,12 @@
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
+#include <float.h>
+#include <math.h>
#include "platform.h"
#include "TuningDriver.h"
+#include "../../awb/simple_mutichannel_audio_InitAWB.h"
#ifdef ENABLE_OPTIFLASH
#include "asdk_opti_flash.h"
@@ -40,6 +43,7 @@ AWEInstance g_AWEInstance;
/** The only input pin for this core. */
static IOPinDescriptor s_InputPin = {0};
+
/** The only output pin for this core. */
static IOPinDescriptor s_OutputPin = {0};
@@ -287,6 +291,46 @@ void awe_createInstance(void)
// Initialize AWE signal processing instance
awe_init(&g_AWEInstance);
+
+ INT32 ret = 0;
+ UINT32 position;
+ UINT32 layoutInChannels, layoutOutChannels, layoutBlockSize;
+ // Load the .awb from C array
+ ret = awe_loadAWBfromArray(&g_AWEInstance, Multichannel, Multichannel_Len, &position);
+ if (ret != E_SUCCESS)
+ {
+ printf("Error loading AWB from array: error = %d, at offset %u\n", ret, position);
+ exit(1);
+ }
+
+ ret = awe_layoutIsValid(&g_AWEInstance);
+ if (ret != 1)
+ {
+ printf("Error: Loaded layout is not valid: error = %d\n", ret);
+ exit(1);
+ }
+
+ ret = awe_audioIsStarted(&g_AWEInstance);
+ if (ret != 1)
+ {
+ printf("Error: Audio not started: error = %d\n", ret);
+ exit(1);
+ }
+
+ // Get the layout I/O configuration
+ // Input and output blocksizes must be the same
+ //NOTE: Because there can only be one input pin and one output pin, all API's that take the argument "pinIdx" will always pass in 0. This is demonstrated in the function calls below.
+ awe_layoutGetChannelCount(&g_AWEInstance, 0, &layoutInChannels, &layoutOutChannels);
+ ret = awe_layoutGetInputBlockSize(&g_AWEInstance, 0, &layoutBlockSize);
+ if (ret != E_SUCCESS)
+ {
+ printf("Error: GetBlockSize failed: error = %d\n", ret);
+ exit(1);
+ }
+ printf("Layout loaded with inputChannels=%u, outputChannels=%u, blockSize=%u\n", layoutInChannels, layoutOutChannels, layoutBlockSize);
+
+
+
}
--
2.34.1
Please ensure that you are passing in the correct array name to awe_loadAWBfromArray function.
Step 5: Rebuild the audio app binaries and flash

Thanks,
Shreyansh