Programmer User Guide¶
The Programmer tool is used to activate and program the CC35XX family of devices. It is currently still in development with new features being added.
Attention
Please note that throughout the activation and initial programming the window should NOT be refreshed at any point. Additionally, the activation and initial programming process should only be done ONCE for each new CC35xx.
In the home page click on the Programmer tool.
This will open a window that will allow you to see any XDS connected device. Select the connected XDS110 device from a drop-down list of XDS-devices connected to the PC.
Next select the flash option
Warning
The flash option with the yellow triangle next to them are “Experimental Flashes” which have not been fully system tested
Note
If you are using a Revision A Launchpad, select IS25WJ064F. For Launchpads Revision E4 or earlier revisions, select IS25WJ032F
After, select the appropriate PSRAM connected to the device
There will also be an Enable OTA and Custom Memory Map checkbox
- The Enable OTA checkbox will configure the memory map to make room for 2 image slots
- The Custom Memory Map checkbox will allow changing the size of NVS, Key Storage, and any extra Vendor dedicated memory region
Based on the CC35xx state (activated or deactivated) you will have different options
Before your device is activated, you are presented three options in the Wi-Fi Toolbox:
You can choose to activate the device, set the fuses, or conduct a memory validation test. Note that if you decide to activate the device, you will end up needing to program the fuses as well.
The following step will require you to select the activation method. There are 3 options for activating the device:
- Vendor Key - Images will be verified using Vendors personal key
- SDK Example Key - Emulate the full vendor operation using an emulation key (TI-provided ‘debug’ key).
- Authentication Bypass - Enable the vendor to load and execute unauthenticated images.
Activation Type Page
Vendor Key
Choosing Vendor Key will require to do a onetime setup in the sign.py script located in simplelink_wifi_toolbox_x_x_x/flash-images-builder/signing_module
import pathlib
import requests
from cryptography.hazmat.primitives.serialization import (
load_pem_public_key,
Encoding,
PublicFormat,
)
from OpenSSL.crypto import FILETYPE_PEM
from OpenSSL.crypto import sign, load_privatekey
PUBLIC_KEY = None
PRIVATE_KEY = None
def buffer_sign(buffer_for_sign: bytes) -> bytes:
if PRIVATE_KEY is not None:
with open(PRIVATE_KEY, "rb") as f:
priv_key_data = f.read()
pkey = load_privatekey(FILETYPE_PEM, priv_key_data)
signature = sign(pkey, buffer_for_sign, "sha256")
return signature
else:
return b""
This script is used by the Wi-Fi toolbox each time it programs the CC35xx device that was activated via “vendor key”.
You will see a PUBLIC_KEY and PRIVATE_KEY field and there are two options to set that up.
- Provide the public and private keys to the script
- Update the signing buffer and public key retrieval functions such that they can access these keys (or a signed application image altogether) from somewhere else (ie. server via API call, etc). How you choose to implement this is up to you.
This is what you will see when choosing the “Vendor Key” without the proper key setup.
SDK Example Key
Since the SDK example key was selected the “Root of Trust” key will be pre-selected. The key is not pre-selected if the Authentication Bypass activation method is chosen.
At the end of the activation process the tool will report a summary for review. In case of failed RoT fuse-programming, the activation/programming process will be halted.
Initial Programming
Once the activation process has concluded, the Initial Programming process will start automatically in the next window. During this process you will download an example image to the CC35xx in addition to flash configuration. As a reminder, please be sure not to refresh the page during this process.
Attention
During early access, initial programming will be done with predefined images and configurations. You will not be able to change the pre-selected inputs.
- Image selectionBoot Sector - Flash partition, calibration, and flash high-speed configuration.
- TI Bootloader - RAM-bootloader (2nd stage BL provided by TI).
- Vendor Demo Image - for FCS versions the image will program the Network Terminal example.
![]()
Figure 10 Initial Programming Page
Press the program button to begin Initial Programming. Once programmed you will be met with the following screen.
Figure 11 Initial Programming Page
Before you program your device for the first time, there fuse settings you must configure before they are locked in place and can never be altered again.
- Authentication Enable
- Flash Reset Type
- Restrict INI
- App OTP
- Country Code
- MAC Address Override
- Wi-Fi 6 Configuration
The images below show the default values of the fuses based on activation type. The authentication enable and flash reset type settings must NOT be changed, but you are free to tinker with anything else.
Use cases of the fuses that you can customize:
- Restrict INI: Gives users the opportunity to require authorization (key) to update RF and regulatory settings.
- App OTP: Reserve section for storing vendor defined data in the OTP.
- Country Code: Restricts the device to only accept a conf file with the corresponding country code.
- MAC Address Override: Gives users the opportunity to program the device with their own MAC address.
- Wi-Fi 6 Configuration: Gives users a one-time decision to either enable or disable Wi-Fi 6.
Use cases of the fuses that you can customize:
- Restrict INI: Gives users the opportunity to require authorization (key) to update RF and regulatory settings.
- App OTP: Reserve section for storing vendor defined data in the OTP.
- Country Code: Restricts the device to only accept a conf file with the corresponding country code.
- MAC Address Override: Gives users the opportunity to program the device with their own MAC address.
- Wi-Fi 6 Configuration: Gives users a one-time decision to either enable or disable Wi-Fi 6.
Use cases of the fuses that you can customize:
- Restrict INI: Gives users the opportunity to require authorization (key) to update RF and regulatory settings.
- App OTP: Reserve section for storing vendor defined data in the OTP.
- Country Code: Restricts the device to only accept a conf file with the corresponding country code.
- MAC Address Override: Gives users the opportunity to program the device with their own MAC address.
- Wi-Fi 6 Configuration: Gives users a one-time decision to either enable or disable Wi-Fi 6.
Use cases of the fuses that you can customize:
- Restrict INI: Gives users the opportunity to require authorization (key) to update RF and regulatory settings.
- App OTP: Reserve section for storing vendor defined data in the OTP.
- Country Code: Restricts the device to only accept a conf file with the corresponding country code.
- MAC Address Override: Gives users the opportunity to program the device with their own MAC address.
- Wi-Fi 6 Configuration: Gives users a one-time decision to either enable or disable Wi-Fi 6.
Note
Note that the above images are only presented when you choose to activate your device. If you decide to undergo partial fuse programming, you will only see the five fuses that you are allowed to change as presented below. Once you set the fuses here, you cannot change them again during the activation process.
If you choose memory validation test(optional but good practice), you can either validate the flash or the PSRAM as shown below. The purpose is to validate memory connection and integrity to the CC35xxE devices.
After your device is activated, you may choose to program it via either the Wi-Fi toolbox or using CCS.
When connecting your toolbox to an activated device, you may see and fill out a menu like this:
Please note the “Activate By” field. What you set there must match how your device was activated.
You will then be taking to the Programming Page
The default binaries will be selected which will program the Network Terminal example. The option to load custom binaries is available by pressing on the + sign on the right of each binary. The following pop ups will appear. Starting with Vendor Image
If OTA is enabled, you will have the option to save the image in either Slot 0 or Slot 1. If you would like to have the image be unsecured choose the Vendor Activation Bypass otherwise use the SDK Example Key. This assumes the devices was activated with the default key, if it was not, select the pre-built image option with an image created using the vendor key.
Changing TI Wireless Firmware
If OTA is enabled, you will have the option to save the image in either Slot 0 or Slot 1. To switch FW version, find the cc35xx_fw.bin you would like to use.
Note
There is a dependency between the Wifi Driver and the cc35xx_fw.bin. Make sure you only load the firmware that came with the SDK from which the driver is being used.
Other binaries should be kept to default binaries. If all the images have been chosen and the device is ready to be programmed, click on the Program button on the bottom right corner. Once the Programming process has been completed you will be met with a summary for review
If using CCS, you must select the correct activation type in SYSCFG based on how you activated your device as shown below:
The CC33XX devices have One Time Programming (OTP) bits that a user can program to store certain information permanently to the device. The OTP bits, or fuses, can be programmed by the Programmer Tool. These OTP bits can be used to store the following information:
- Custom Base MAC Address
- Configuration Key
- Country Code
- Disable Wi-Fi 6
- Enable Rollback Protection
- Vendor Key
- OTP Lock
To begin using the Programming Tool, connect a XDS110 to the BP-CC33x1 board and to the PC with a USB-C cable.
Then, launch the simplelink_wifi_toolbox.exe. When a browser opens, select the “Programmer” box. Select ‘XDS110’ for the Device Connection Interface and ‘CC33XX’ for the Device Part Number, as in the image below. Press the ‘Refresh Device List’ and select the XDS110 from within the ‘XDS110 Serial Number’ drop-down. Finally, click on ‘Start’.
The Programmer tool will now download a specific firmware to enable fuse programming on the CC33XX device. Once successful, the user will be greeted with the following screen:
Note
Fuse programming can only be successfully completed if the user has obtained the Programming Token from a TI representative. This token should not be shared publicly.
User can now select a Field and enter in a new value. Once all fields and values and Programming Token have been entered, pressing ‘Program’ will begin the fuse programming process.
The ‘Lock’ button will permanently lock the device so that future fuse programming will not occur.
The programmer tool can also be used with a CLI interface.
The download_programmer command downloads the radio tool firmware to the device. This is a prerequisite for all other fuse operations.
# Download with default firmware files (from binaries/CC33XX_Fuse_Programmer/)
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto download_programmer
Setting each of the fuse values can be done with the following example commands:
# Program MAC address
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --mac_addr 10:20:30:40:50:60 --token <TOKEN>
# Program Wi-Fi 6 disable
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --wifi6_disable 1 --token <TOKEN>
# Program configuration key (hex format with 0x prefix)
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --conf_key 0xC6789456 --token <TOKEN>
# Program configuration key (hex format without 0x prefix)
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --conf_key C6789456 --token <TOKEN>
# Program country code (automatically enables country code restriction)
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --country_code IL --token <TOKEN>
# Program multiple values at once
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --mac_addr 10:20:30:40:50:60 --wifi6_disable 1 --country_code US --token <TOKEN>
# Program vendor key
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --vendor_key 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF --vendor_key_usage 0 --token <TOKEN>
# Enable rollback protection
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto set --rollback_protection_enable 1 --token <TOKEN>
Finally, the device can be locked, preventing any further programming. This operation is irreversible.
# Lock Fuse (token is required)
simplelink-wifi-toolbox.exe cc33xx-fuse-programmer -i XDS110 -param1 auto lock --token <TOKEN>














