This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1310: How to reduct firmware size to fit in 32KB variant of cc1310

Part Number: CC1310
Other Parts Discussed in Thread: CC110L,

Hi,

Recently we have moved from TI's CC110L to TI CC1310. But it comes to us at very high cost on firmware size.

Here are the few examples program analysis (from simplelink SDK):

empty_CC1310_LAUNCHXL_tirtos_ccs
Dependency - tirtos_builds_CC1310_LAUNCHXL_release_ccs_4_20_01_03
         name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
  FLASH                 00000000   00020000  00003f92  0001c06e  R  X
  SRAM                  20000000   00005000  00001e4f  000031b1  RW X
= 0x3f92
~ 16274 Bytes (~15.92 KB)
rfPacketTx_CC1310_LAUNCHXL_tirtos_ccs          name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
  FLASH                 00000000   00020000  00006b32  000194ce  R  X
  SRAM                  20000000   00005000  000023e2  00002c1e  RW X
0x6b32
~ 27442 Bytes
(~26.69 KB)
rfPacketTx_CC1310_LAUNCHXL_nortos_ccs          name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
  FLASH                 00000000   00020000  00005d34  0001a2cc  R  X
  SRAM                  20000000   00005000  00000fc5  0000403b  RW X
0x5d34
~ 23860 Bytes
(~23.30 KB)
rfPacketRx_CC1310_LAUNCHXL_nortos_ccs          name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
  FLASH                 00000000   00020000  00005d8c  0001a274  R  X
  SRAM                  20000000   00005000  00001031  00003fcf  RW X
0x5d8c
~ 23948 Bytes
(~23.38 KB)
rfWakeOnRadioRx_CC1310_LAUNCHXL_tirtos_ccs          name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
  FLASH                 00000000   00020000  0000660a  000199f6  R  X
  SRAM                  20000000   00005000  00002896  0000276a  RW X
0x5d8c
~ 26122 Bytes
(~25.50 KB)

Queries

1. The basic empty program itself takes ~16KB of memory. Is this the minimum memory footprint for firmware to run on CC1310 ?

2. The RX/Tx program takes around ~24KB of memory. So to write vendor code for 32KB variant, one has max 8KB available. It looks like basic rtos/nortos code is occupying large portion of code and leaving very less space user space program. Don't we have minimal example set where we can write firmware fo 32KB (with basic tx/rx capability)

3. I am sure many other vendor might be using 32KB variant for Tx/Rx and power management. Wondering how they are managing to fit the firmware in 32KB. Any pointer ? I am really surprise example set is only for 128KB version but 32KB version is overlooked by the team. 

4. With CC110L (Along with external controller) we could able to fit entire firmware (along with CC110L lib) in 17KB.  I am afraid if 32KB variant of CC1310 provides flexibilty to do so. 

Any pointer for tx/rx & power code optimization on TI CC1310 (32KB) will be highly appreciated . We are blocked on this and don't have any clue whether to drop this variant or still have posibility to reduce memory footprint

  • Hi Satish,

    Have you tried increasing the optimization level in the Build options of the project? You can also optimize for size instead of speed.

    There is also a one additional thing that might help and it is using the RF driver in Single Mode.

    From the documentation:


    Build configuration

    The RF driver comes in two versions: single-client and multi-client. The single-client version allows only one driver instance to access the RF core at a time. The multi-client driver version allows concurrent access to the RF core with different RF settings. The multi-client driver has a slightly larger footprint and is not needed for many proprietary applications. The driver version can be selected in the build configuration by linking either against a RFCC26XX_singleMode or RFCC26XX_multiMode pre-built library. When using the single-client driver, RF_SINGLEMODE has to be defined globally in the build configuration. The multi-client driver is the default configuration in the SimpleLink SDKs.


    After doing this for rfPacketTx_CC1310_LAUNCHXL_nortos_ccs I got the following results:

             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      FLASH                 00000000   00020000  0000558e  0001aa72  R  X
      SRAM                  20000000   00005000  00000f8d  00004073  RW X

    Unfortunately, it is not a lot but still, hopefully it helps. Of course you can probably find some things that can be removed or adjusted in your particular application to get some extra room for your application.

    BR,
    Andres