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.

CC2674P10: Can not compile example firmware with changed DIOs for RF

Part Number: CC2674P10
Other Parts Discussed in Thread: CC1354P10, , SYSCONFIG

Inputs:

  1. SDK version: 7_10_02_23
  2. CCS version: 12.2
  3. Firmware to reproduce selected: znp_LP_EM_CC1354P10_6_tirtos7_ticlang (this firmware is build for CC2674P10 RSK - important)
    1. Default pin settings RF:
      1. CONFIG_RF_24GHZ - DIO_34
      2. CONFIG_RF_HIGH_PA - DIO_3
      3. CONFIG_RF_SUB1GHZ - DIO_35
    2. Default pin settings peripheral:
      1. CONFIG_GPIO_RLED - DIO_6
      2. CONFIG_GPIO_GLED - DIO_7
      3. CONFIG_DISPLAY_UART (tx) - DIO_13
      4. CONFIG_DISPLAY_UART (rx) - DIO_12
      5. CONFIG_GPIO_BTN2 - DIO_14
      6. CONFIG_GPIO_BTN1 - DIO_15
    3. Default pin settings SPI:
      1. CONFIG_SPI_0 (poci) - DIO_37;
      2. CONFIG_SPI_0 (pico) - DIO_36;
      3. CONFIG_SPI_0 (sclk) - DIO_39;
      4. CONFIG_NVS_SPI_0 (chip select) - DIO_38;

Aim:

  1. To compile firmware for hw board based on CC2674P10 RGZ that utilizes these pins:
    1. Required pin settings RF:
      1. CONFIG_RF_24GHZ - DIO_28
      2. CONFIG_RF_HIGH_PA - DIO_29
      3. CONFIG_RF_SUB1GHZ - DIO_30
    2. Required pin settings peripheral:
      1. CONFIG_GPIO_RLED - DIO_6
      2. CONFIG_GPIO_GLED - DIO_7
      3. CONFIG_DISPLAY_UART (tx) - DIO_13
      4. CONFIG_DISPLAY_UART (rx) - DIO_12
      5. CONFIG_GPIO_BTN2 - DIO_14
      6. CONFIG_GPIO_BTN1 - DIO_15
    3. Required pin settings SPI:
      1. CONFIG_SPI_0 (poci) - DIO_8;
      2. CONFIG_SPI_0 (pico) - DIO_9;
      3. CONFIG_SPI_0 (sclk) - DIO_10;
      4. CONFIG_NVS_SPI_0 (chip select) - DIO_20;

I need to try standard firmware from SDK on the chip CC2674P10 RGZ version. So basically, i need to change pins for RF only, because i am not going to use SPI in my project. In RF, i amnot ineterested in sub 1Ghz, so need only update pins ...RF_24GHZ and ...RF_HIGH_PA.

Steps to reproduce:

  1. Create new project (CCS -> Import -> CCS Projects -> (Examples\Rtos folder from SDK) -> znp_LP_EM_CC1354P10_6_tirtos7_ticlang
  2. Open znp.syscfg
  3. Show device view
  4. Switch the device and change the chip to CC2674P10 RGZ switch-device.jpg 
  5. Generic errors appear, but you can accept them: generic-errors.jpg
  6. Change RF pins to DIO_28 and DIO_29
  7. Error re RF appears, you can't ignore it: rf-errors.jpg
  8. Build firmware
  9. Errors during compiling
    1. - logs is here logs.txt
    2. - errors summary errors-summary.jpg

Question:

  1. How to build default firmware znp_LP_EM_CC1354P10_6_tirtos7_ticlang
    for chip CC2674P10 RGZ (7*7 48 GPIOs)
    while SDK's template is only for CC2674P10 RSK (8*8 64 GPIOs)?

  • Hello Andrew,

    Thank you for the detailed report.  The best indication of the issue is from errors-summary.jpg where you can see that "More then one DeviceFamily has been defined!" which is caused by Project Properties -> CCS Build -> Arm compiler -> Predefined Symbols where "DeviceFamily_CC13X4" is defined.  Please change this value to "DeviceFamily_CC26X4" to remove this error.  The last change you will need to complete, if not removing the RF antenna switching from Sysconfig, will be to define rfDriverCallbackAntennaSwitching in your project (originally defined in ti_drivers_config.c built by SysConfig):

    #include "ti_drivers_config.h"
    #include <ti/drivers/GPIO.h>
    
    //...
    
    void rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
    
        if (events & RF_GlobalEventRadioSetup) {
            bool    sub1GHz   = false;
            uint8_t loDivider = 0;
    
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_24GHZ, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);
    
            /* Decode the current PA configuration. */
            RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
    
            /* Decode the generic argument as a setup command. */
            RF_RadioSetup* setupCommand = (RF_RadioSetup*)arg;
    
            switch (setupCommand->common.commandNo) {
                case (CMD_RADIO_SETUP):
                case (CMD_BLE5_RADIO_SETUP):
                        loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
    
                        /* Sub-1GHz front-end. */
                        if (loDivider != 0) {
                            sub1GHz = true;
                        }
                        break;
                case (CMD_PROP_RADIO_DIV_SETUP):
                        loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
    
                        /* Sub-1GHz front-end. */
                        if (loDivider != 0) {
                            sub1GHz = true;
                        }
                        break;
                default:break;
            }
    
            if (sub1GHz) {
                /* Sub-1 GHz */
                if (paType == RF_TxPowerTable_HighPA) {
                    /* PA enable --> HIGH PA
                     * LNA enable --> Sub-1 GHz
                     */
                    GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                             de-asserted on CC1352 Rev A. */
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_RFC_GPO0);
                } else {
                    /* RF core active --> Sub-1 GHz */
                    GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
                    GPIO_write(CONFIG_RF_SUB1GHZ, 1);
                }
            } else {
                /* 2.4 GHz */
                if (paType == RF_TxPowerTable_HighPA)
                {
                    /* PA enable --> HIGH PA
                     * LNA enable --> 2.4 GHz
                     */
                    GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_RFC_GPO0);
                    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                             de-asserted on CC1352 Rev A. */
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
                } else {
                    /* RF core active --> 2.4 GHz */
                    GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
                    GPIO_write(CONFIG_RF_24GHZ, 1);
                }
            }
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_24GHZ, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);
    
            /* Reset the IO multiplexer to GPIO functionality */
            GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
            GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
            GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
        }
    }

    You can perform further optimization to remove the Sub-1 GHz portion (not available on CC26XX devices) or only choose between non-PA (< +5 dBm) or high-PA (> +5 dBm) output TX operation.

    Regards,
    Ryan