# Build and flash images

The QCC730 Zephyr software package includes the source code of several demo applications. Follow the instructions in the following sections to build the required images and flash them to the QCC730M EVK.

1. Build the required images for the demo application.
2. Flash the images to the QCC730M EVK.
3. Flash the Wi-Fi MAC address to the QCC730M EVK.

## Build QCC730 images

Follow these steps to build a Zephyr image for QCC730:

1. Go to the workspace folder you created when setting up the Zephyr development environment.
2. Activate the Zephyr environment in the workspace folder.

    For instructions about activating or deactivating a Zephyr environment, see the Zephyr  [Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html).
3. Go to the `qapp\qcli_app` folder:

cd qapp\qcli_app
        Copy to clipboard
4. Use one of the following commands to build the Zephyr image for QCC730:

    - For an iPA EVK:

west build -b qcc730mi
            Copy to clipboard
    - For an xPA EVK:

west build -b qcc730mx
            Copy to clipboard

The generated files are under the `qapp\qcli_app\build\zephyr\` directory. The Zephyr image name is `zephyr.bin`.

## Flash QCC730 images

Currently, flashing a Zephyr image to the QCC730M EVK is supported only on Windows. You can use one of the following methods:

- Use the `west flash` command.
- Use the NVM Programmer tool.

If you generated a Zephyr image on Linux, copy the image to a Windows computer and use NVM Programmer to flash it to the QCC730M EVK.

## Use the `west` tool to flash QCC730 images

### Prerequisites

The `west flash` command automatically searches the following required images. Make sure these images are ready.

- The `zephyr.bin` or `zephyr_HASHED.elf` image under the build directory
- The FDT, SBL, and board data file (BDF) images under the `modules\hal\qcom\zephyr\blobs` directory

The QCC730 platform provides two separate storage areas:

- RRAM
- External flash

Because application images can vary in size, the platform supports two storage strategies:

- Store `zephyr.bin` directly in RRAM
- Store `zephyr_HASHED.elf` in external flash

The application selects the appropriate storage strategy by using different firmware description (FWD) files:

- `frn_curr_age_with_app_bin.bin`: Specifies that the application image is in BIN format and stored in RRAM.
- `frn_curr_age_default.bin`: Specifies that the application image is in ELF format and stored in external flash.

The contents and partition layout of the external flash are defined in the following file:

`<prj_dir>\modules\hal\qcom\qfdt\download_config.xml`

The following example shows a segment of this file. You can adjust the size of each segment by modifying the corresponding attributes.

> 
> 
> <fw_upgrade_config>
>         <config FS1_sizeKB="64" FS2_sizeKB="64" RANK="1" FS1IMG="" FS2IMG="" location="flash" />
>         …
>     </fw_upgrade_config>
>     Copy to clipboard

### Flash images

Follow these steps to flash QCC730 images to the QCC730M EVK by using the `west` tool:

1. Go to the workspace folder you created when setting up the Zephyr development environment.
2. Activate the Zephyr environment in the workspace folder.

    For instructions about activating or deactivating a Zephyr environment, see the Zephyr [Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html).
3. Go to the `qapp\qcli_app` folder:

cd qapp\qcli_app
        Copy to clipboard
4. Run one of the following commands to flash the corresponding images to the QCC730M EVK:

    | Command | Description |
    | --- | --- |
    | west flash | Flash the zephyr.bin image |
    | west flash --all | Flash the following images:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>zephyr.bin</p></li><br>> <li><p>frn_curr_age_with_app_bin.bin</p></li><br>> <li><p>qcc730mi_sbl_HASHED.elf or qcc730mx_sbl_HASHED.elf</p></li><br>> <li><p>regdb.bin</p></li><br>> </ul> |
    | west flash --bdf | Flash the following images:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>zephyr.bin</p></li><br>> <li><p>BDF</p></li><br>> </ul> |
    | west flash --all --bdf | Flash the following images:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>zephyr.bin</p></li><br>> <li><p>frn_curr_age_with_app_bin.bin</p></li><br>> <li><p>qcc730mi_sbl_HASHED.elf or qcc730mx_sbl_HASHED.elf</p></li><br>> <li><p>regdb.bin</p></li><br>> <li><p>BDF</p></li><br>> </ul> |
    | west flash -e --all -m flash --bdf | Flash the following images:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>frn_curr_age_default.bin</p></li><br>> <li><p>qcc730mi_sbl_HASHED.elf or qcc730mx_sbl_HASHED.elf</p></li><br>> <li><p>regdb.bin</p></li><br>> <li><p>BDF</p></li><br>> <li><p>firmware_table.bin</p></li><br>> <li><p>zephyr_HASHED.elf</p></li><br>> </ul> |
    | west flash -e --all -m flash --bdf --golden | Flash the following images:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>frn_curr_golden_age_default.bin</p></li><br>> <li><p>qcc730mi_sbl_HASHED.elf or qcc730mx_sbl_HASHED.elf</p></li><br>> <li><p>regdb.bin</p></li><br>> <li><p>BDF</p></li><br>> <li><p>firmware_table.bin</p></li><br>> <li><p>zephyr_HASHED.elf</p></li><br>> </ul> |
    | west flash --caldb | Clear the calibration data. The QCC730M EVK reruns the calibration on the next power-on (cold boot calibration). |

The QCC730M EVK automatically restarts after the command is completed.

## Use NVM Programmer to flash QCC730 images

Follow these steps to flash QCC730 images to the QCC730M EVK by using NVM Programmer:

1. Create a new folder on your Windows computer. For example, `zephyr_flash`.
2. Copy the `<zephyr_workspace>\modules\hal\qcom\tools\qprgc\` folder to the `zephyr_flash` folder.
3. Copy the following files from Zephyr workspace to the `\zephyr_flash\qprgc\` folder:

    - The following files under the `<zephyr_workspace>\modules\hal\qcom\zephyr\blobs\` folder:

        - `bdwlan01.bin`
        - `bdwlan03.bin`
        - `mqm730i.bin`
        - `mqm730x.bin`
        - `regdb.bin`
        - `frn_curr_age_with_app_bin.bin`
        - `frn_curr_age_default.bin`
        - `firmware_table.bin`
        - `qcc730mi_prg.elf` or `qcc730mx_prg.elf`
        - `qcc730mi_sbl_HASHED.elf` or `qcc730mx_sbl_HASHED.elf`
    - `<zephyr_workspace>\qapp\qcli_app\build\zephyr\zephyr.bin`
    - `<zephyr_workspace>\qapp\qcli_app\build\zephyr\zephyr_HASHED.elf`
    - `<zephyr_workspace>\qcc730\boards\qcom\common\qcc730.JLinkScript`
    - `<zephyr_workspace>\qcc730\boards\qcom\common\qcc730_openocd_ch347.cfg`
4. Run the following command in the `\zephyr_flash\qprgc\` folder to flash the images one at a time to the QCC730M EVK:

python nvm_programmer.py -s [ch347|jlink] -i [qcc730mi_prg.elf or qcc730mx_prg.elf] -n rram --server-script [qcc730_openocd_ch347.cfg or qcc730.JLinkScript] -b <offset> -f <file>
        Copy to clipboard

    See the following table to determine the `-b` and `-f` parameters for each image:

    | Image name | Parameters |
    | --- | --- |
    | Firmware descriptor table | -b 0x208000 -f frn\_curr\_age\_with\_app\_bin.bin |
    | Secondary boot loader | -b 0x20a400 -f qcc730mi\_sbl\_HASHED.elf or qcc730mx\_sbl\_HASHED |
    | Regulatory database | -b 0x373000 -f regdb.bin |
    | Board data file -iPA | -b 0x37a000 -f mqm730i.bin |
    | Board data file -xPA | -b 0x37a000 -f mqm730x.bin |
    | Zephyr BIN image | -b 0x222400 -f zephyr.bin |
    | Firmware descriptor table | -b 0x208000 -f frn\_curr\_age\_default.bin |
    | FWD in flash | -n flash -b 0x0 -f firmware\_table.bin |
    | Zephyr elf image | -n flash -b 0x43000 -f zephyr\_HASHED.elf |

    If you have flashed these images to a QCC730M EVK and want to flash a new Zephyr image, you only need to flash the Zephyr image again. All other images require flashing only once. Flashing the BDF image isn’t required because it’s pre-flashed on every QCC730M EVK.
5. Run the following command to reset the QCC730M EVK:

python nvm_programmer.py -s [ch347|jlink] -i [qcc730mi_prg.elf or qcc730mx_prg.elf] --reset
        Copy to clipboard

Important

The factory-prestored 2.4 GHz digital predistortion (DPD) calibration data may be out of date. To ensure accurate calibration, it’s highly recommended that you clear the prestored calibration data and rerun the calibration during the board power-on (cold boot calibration). You need to perform this operation only once for a QCC730M EVK. For details about how to perform this operation, see Rerun calibration for 2.4 GHz DPD.

## Verify the flashed image

To verify that the image was successfully flashed to the QCC730 EVK:

1. Connect the QCC730M EVK to your computer by using a USB cable. The EVK powers on automatically.
2. Identify the COM ports assigned to the QCC730M EVK in **Device Manager**.

    To quickly open **Device Manager** on Windows, select **Windows+X** and then select **Device Manager**.

    The QCC730M EVK is assigned two COM ports when connected to a PC. Typically, the higher-numbered COM port is used. However, if that port doesn’t work, use the other port in the following steps.
3. In the serial communication tool, establish a connection to the higher-numbered COM port with the following settings:

    - **Baud rate**: 115200
    - **Data bits**: 8
    - **Parity**: None
    - **Stop bits**: 1
    - **Flow control**: None
4. Press the **Reset** button on the board to restart the QCC730M EVK.
5. Type the following command in the console:

kernel version
        Copy to clipboard
6. The console should then display the Zephyr version information. For example:

Zephyr version 4.3.0
        Copy to clipboard

## Flash Wi-Fi MAC address

Every QCC730 device that uses Wi-Fi must be assigned a unique 6-byte Wi-Fi MAC address. The Wi-Fi MAC address is stored in the One-Time Programmable memory (OTP). You can flash the MAC address by using the NVM Programmer tool.
The following command examples show how to read and write the Wi-Fi MAC address by using the NVM Programmer tool through CH347.

- Set OTP by the `config.yaml` file:

python nvm_programmer.py -s ch347 -i qcc730mi_prg.elf --config config.yaml
        Copy to clipboard
- Set OTP by key-value pair:

python nvm_programmer.py -s ch347 -i qcc730mi_prg.elf -n otp -k MAC_ADDRESSES=0x101010101010
        Copy to clipboard

    If you set `MAC_ADDRESSES` to `0x101010101010`:

    - The MAC address for the SAP mode is `0x101010101010`
    - The MAC address for the STA mode is `0x101010101011` (incremented by 1)
- Get OTP value by key:

python nvm_programmer.py -s ch347 -i qcc730mi_prg.elf -n otp -g MAC_ADDRESSES
        Copy to clipboard

Last Published: Apr 13, 2026

Previous Topic
 
Set up the development environment Next Topic

References