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.

CC1352P: Questions about RF antenna switch IO.

Part Number: CC1352P

Hi TI.

My target is based on SimpleLink SDK v5.20 sensor example. There are 3 RF control IOs to switch antenna as below:

I test the RF IOs level in 2.4G rx and SubG rx using an oscilloscope, and the IO level waveform is as below:

The first waveform is when target is receiving 2.4G packets and another target is sending 2.4G packets.

The second waveform is when target is receiving SubG packets and another target is sending SubG packets.

We can see there is a little different between the two waveform.

In 2.4G rx, the high_pa IO (DIO29)  keeps low and 2.4G IO (DIO28) keeps high when receiving 2.4G packets, and this phenomenon is reasonable.

In SubG rx, the high_pa IO (DIO29) also keeps low, this is reasonable. However the SubG IO (DIO30) doesn't keep high, instead, DIO30 goes down (this will turn off RF path) after each SubG packets received and then goes up.

And then, we use CC1352P1 LaunchPad and Smart RF Stuido to do the same test and get the same phenomenon.

So, my question is 

1, is the SubG IO (DIO30) waveform reasonable? is it as TI expacted?

2, based on question 1, if so, why is subg IO (DIO30) different from 2.4G rx (DIO28 always keeps high) and why does SubG IO (DIO30) go down after each packet received which will turn off the RF path?

3, based on question 1, if not, where is the problem, how to solve the problem to make subg IO (DIO30) keep high when receiving packets?

Thank you very much.

  • Hi,

    Your oscilloscope plots should show all three control signals instead of just two of the three control signals.

    Based upon CC1352P1 LaunchPad, the truth table is correct.

    After the completion of the data packet, there is no need to power the switch (via the control lines) since this will consume current. 

    DIO30 will be high for both sub-1 Tx 14 dBm and sub-1 Rx.

    Ideally, DIO28 should go low after completion of a 2.4 GHz Tx/Rx data packet to save current but this could be the default setting of the switch in the code when not in use. 

    Regards, Richard

  • Hi,

    The complete switch algorithm can be seen by stepping through the code in SW and can be found in ti_drivers_config.c.

    Regards, Richard

  • Thanks. Here is my switch config code and it is the same as collector example's orignal code.

    First, I test 2.4G rx and SubG rx in high PA mode (20dBm tx config), so the switch config should be in the red boxes.

    When I test 2.4G rx, RF_24G(DIO28) and RF_HIGH_PA(DIO29) should be connected to RFC_GPO0 and RFC_GPO3, and RF_SUBG(DIO30) should be a GPIO and keep low. In the first waveform, RF_SUBG(DIO30) is always low and I have tested this, so I don't show RF_SUBG(DIO30) to simplify the waveform.

    When I test SubG rx, RF_SUBG(DIO30) and RF_HIGH_PA(DIO29) should be connected to RFC_GPO0 and RFC_GPO3, and RF_24G(DIO28) should be a GPIO and keep low. In the second waveform, RF_24G(DIO28) is always low and I have tested this, so I don't show RF_24G(DIO28) to simplify the waveform.

    So, when target receives packets, RF_24G(DIO28) or RF_SUBG(DIO30)  is connected to RFC_GPO0, however, in the two waveforms, RF_24G(DIO28) and RF_SUBG(DIO30)  are different, one keeps always high and another don't keep always high.

    And, the switch IO config is as below, their when not in use configs are identical:

    So still confused about the difference between RF_24G(DIO28) and RF_SUBG(DIO30) which are connected to the same IO —— RFC_GPO0.

    Thanks.

  • I am not sure I understand exactly what you are asking about and where you see a problem.

    Below I have tried to better explained the switching algorithm.

    Please be very specific as to where you see different behavior then what is expected.

    /*
     * ======== Antenna switching ========
     */
    /*
     * ======== rfDriverCallbackAntennaSwitching ========
     * Sets up the antenna switch depending on the current PHY configuration.
     *
     * Truth table:
     *
     * Path       DIO28 DIO29 DIO30
     * ========== ===== ===== ===== 
     * Off        0     0     0
     * 2.4 GHZ    1     0     0
     * HIGH PA    0     1     0
     * SUB1 GHZ   0     0     1
     */
    void __attribute__((weak)) rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
    
        if (events & RF_GlobalEventRadioSetup) {
            bool    sub1GHz   = false;
            uint8_t loDivider = 0;
    
            GPIO_write(CONFIG_RF_24GHZ, 0);								// CONFIG_RF_24GHZ   = 0			TX: 0, RX: 0
            GPIO_write(CONFIG_RF_HIGH_PA, 0);							// CONFIG_RF_HIGH_PA = 0			TX: 0, RX: 0
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);							// CONFIG_RF_SUB1GHZ = 0			TX: 0, RX: 0
    
    		// Sub-1 GHz
            if (sub1GHz)
    		{
                // High PA
    			if (paType == RF_TxPowerTable_HighPA)
    			{
                    GPIO_setMux(CONFIG_RF_24GHZ,   IOC_PORT_GPIO);		// CONFIG_RF_24GHZ		= GPIO: 	TX: 0, RX: 0 (Set to 0 initially)
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);  // CONFIG_RF_HIGH_PA  	= "PA": 	TX: 1, RX: 0
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_RFC_GPO0);  // CONFIG_RF_SUB1GHZ  	= LNA:  	TX: 0, RX: 1
                }
    			// Normal PA
    			else
    			{
                    GPIO_setMux(CONFIG_RF_24GHZ,   IOC_PORT_GPIO);		// CONFIG_RF_24GHZ    	= GPIO: 	TX: 0, RX: 0 (Set to 0 initially)
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);		// CONFIG_RF_HIGH_PA  	= GPIO: 	TX: 0, RX: 0 (Set to 0 initially)
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);		// CONFIG_RF_SUB1GHZ  	= GPIO: 	TX: 1, RX: 1 (Set to 1 below)
                    GPIO_write(CONFIG_RF_SUB1GHZ, 1);					// CONFIG_RF_SUB1GHZ  	= 1
                }
            } 
    		// 2.4 GHz
    		else 
    		{
                // High PA
    			if (paType == RF_TxPowerTable_HighPA)
                {
                    GPIO_setMux(CONFIG_RF_24GHZ,   IOC_PORT_RFC_GPO0);	// CONFIG_RF_24GHZ		= LNA:  	TX: 0, RX: 1
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);  // CONFIG_RF_HIGH_PA    = "PA": 	TX: 1, RX: 0
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);      // CONFIG_RF_SUB1GHZ	= GPIO: 	TX: 0, RX: 0 (Set to 0 initially)
                } 
    			// Normal PA
    			else
    			{
                    GPIO_setMux(CONFIG_RF_24GHZ,   IOC_PORT_GPIO);		// CONFIG_RF_24GHZ		= GPIO:		TX: 1, RX: 1 (Set to 1 below)
                    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);		// CONFIG_RF_HIGH_PA	= GPIO:		TX: 0, RX: 0 (Set to 0 initially)
                    GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);		// CONFIG_RF_SUB1GHZ	= GPIO:		TX: 0, RX: 0 (Set to 0 initially)
                    GPIO_write(CONFIG_RF_24GHZ, 1);						// CONFIG_RF_24GHZ		= 1
                }
            }
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
    
            GPIO_write(CONFIG_RF_24GHZ, 0);								// CONFIG_RF_24GHZ   = 0			TX: 0, RX: 0
            GPIO_write(CONFIG_RF_HIGH_PA, 0);							// CONFIG_RF_HIGH_PA = 0			TX: 0, RX: 0
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);							// CONFIG_RF_SUB1GHZ = 0			TX: 0, RX: 0
    
            /* Reset the IO multiplexer to GPIO functionality */
            GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);				// CONFIG_RF_24GHZ   = GPIO
            GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);				// CONFIG_RF_HIGH_PA = GPIO
            GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);				// CONFIG_RF_SUB1GHZ = GPIO
        }
    }
     /*
     * Freq.		PA Type		Active Mode	DIO28	DIO29	DIO30
     *										24GHZ	HIGH_PA	SUB1GHZ
     * -------------------------------------------------------------
     * Sub-1 GHz	High PA		RX			0		0		1
     * Sub-1 GHz	High PA		TX			0		1		0
     * Sub-1 GHz	Normal PA	RX			0		0		1
     * Sub-1 GHz	Normal PA	TX			0		0		1
     * 2.4 GHz		High PA		RX			1		0		0
     * 2.4 GHz		High PA		TX			0		1		0
     * 2.4 GHz		Normal PA	RX			1		0		0
     * 2.4 GHz		Normal PA	TX			1		0		0

    Siri

  • Thanks for your patience.

    Let's focus on only two lines of your code —— line 36 and line 53.

    Line 36 : GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_RFC_GPO0);

    Line 53 : GPIO_setMux(CONFIG_RF_24GHZ,   IOC_PORT_RFC_GPO0);

    According to these two lines of code, CONFIG_RF_SUB1GHZ(DIO30) and CONFIG_RF_24GHZ(DIO28) are controlled by the same pin——RFC_GPO0.

    So in highPA mode, whether it is SubG receiving or 2.4G receiving, the corresponding switch IO (DIO30 or DIO28) is controlled by RFC_GPO0.

    So it is reasonable to expect that DIO30's behavior in SubG receiving should be as same as DIO28's behavior in 2.4G receiving. Because they(DIO30 and DIO28) are both controlled by the same pin —— RFC_GPO0.

    However, in my two waveforms, DIO28 and DIO30 obviously behave differently —— in 2.4G rx waveform, DIO28 keeps always high, in SubG rx waveform, DIO30 goes down and goes up.

    So this is the quesion, in my waveforms, DIO30 and DIO28 behave differently, but they should behave the same.

    Thank you.

  • You are correct that DIO30 for sub1-GHz should behave the same way as DIO28 for 2.4 GHz

    This is shown in the table I posted in my last post.

    However, on the P1 Launchpad the high PA is used for sub1-GHz and the 5 dBm PA(normal PA) is used for 2.4 GHz.

    That means that when you operate on 2.4 GHz, the settings for the 3 control signals are determined by line 60-63 in the code, and DIO28 will he 1 for both RX and TX.

    It is not possible to have 20 dBm out on both frequency bands. If you need high PA on 2.4 GHz, you need to use the P2 LP.

    Siri

  • Thank you. 

    It is not possible to have 20 dBm out on both frequency bands.

    I've seen this limitation in TI's relevant documentation. I would like to ask, is this limitation caused by hardware limitations of different demo boards or software limitations?

    If on my own CC1352P target, is it possible to have 20dBm out on both frequency bands? For example, 20dBm 2.4G BLE and 20dBm SubG 15.4.

  • Hi,

    The passive filter design of the 20 dBm limits operation at both subG and 2.4 GHz at the same time. LaunchXL-CC1352P1 - 20 dBm filter has been optimized for operation at 915 MHz and LaunchXL-CC1352P-2 optimized for 2.4 GHz.

    It is possible to make a dual-band design with a wide-band balun that can cover both 915 MHz and 2.4 GHz but this requires a different schematic that incorporates a wide-band balun, a switch connected to 915 MHz LPF and also to 2.4 GHz LPF. This solution will have compromised performance for both frequency bands.