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.

CC2530: SFD

Part Number: CC2530

I output the SFD_SYNC signal, but I find that it doesn't go up every time I sent a message. 

I observe the signal with oscilloscope, and I find that, it will goes up at first for three or four times, and then it stays low, and after 4 or 5 seconds it goes up for one time or more. by the way, I set the coordinator send message every 1 second. It looks likes the coordinator didn't send the message. But through the PC, I know that the coordinator sends the message correctly and the enddevice do receive the message every time.

so why the SFD signal can't change every time I send or receive a message.

  • HI,

    What configuration are you using to output SFD_SYNC? This config works for me for outputting CLK, DATA and SFD_SYNC on OBBSEL0, OBBSEL1, and OBBSEL4. I believe I picked those pins because they were easily accessible on the SmartRF05. Obviously you can change those to any OBBSEL you wish. By the way, are you outputting this on a sleepy device? If so, you must reconfigure the registers when coming out of sleep.

    // in ZMain.c
    
    // in Macros
    /* RF observable control register value to output Sniffer CLK signal */
    #define RFC_OBS_CTRL_SNIF_CLK     0x09
                    
    /* RF observable control register value to output Sniffer DATA signal */
    #define RFC_OBS_CTRL_SNIF_DATA    0x08
    
    /* RF observable control register value to output SFD_SYNC signal */
    #define RFC_OBS_CTRL_SFD_SYNC     0x0F
    
    /* OBSSELn register value to select RF observable 0 */
    #define OBSSEL_OBS_CTRL0             0xFB
    
    /* OBSSELn register value to select RF observable 1 */
    #define OBSSEL_OBS_CTRL1             0xFC
    
    /* OBSSELn register value to select RF observable 2 */
    #define OBSSEL_OBS_CTRL2             0xFD
    
    ...
    // in main() before osal_start_system()
    #ifdef 
      RFC_OBS_CTRL0 = RFC_OBS_CTRL_SNIF_CLK;
      OBSSEL0              = OBSSEL_OBS_CTRL0;
    
      RFC_OBS_CTRL1 = RFC_OBS_CTRL_SNIF_DATA;
      OBSSEL1              = OBSSEL_OBS_CTRL1;
    
      RFC_OBS_CTRL2 = RFC_OBS_CTRL_SFD_SYNC;
      OBSSEL4              = OBSSEL_OBS_CTRL2;
    
      MDMTEST1 |= 0x04;        
    #endif
    
    ...
    // if using a sleepy device, in hal_sleep.c
    
    // redefine the same macros from above in this file as well
    /* RF observable control register value to output Sniffer CLK signal */
    #define RFC_OBS_CTRL_SNIF_CLK     0x09
                    
    /* RF observable control register value to output Sniffer DATA signal */
    #define RFC_OBS_CTRL_SNIF_DATA    0x08
    
    /* RF observable control register value to output SFD_SYNC signal */
    #define RFC_OBS_CTRL_SFD_SYNC     0x0F
    
    /* OBSSELn register value to select RF observable 0 */
    #define OBSSEL_OBS_CTRL0             0xFB
    
    /* OBSSELn register value to select RF observable 1 */
    #define OBSSEL_OBS_CTRL1             0xFC
    
    /* OBSSELn register value to select RF observable 2 */
    #define OBSSEL_OBS_CTRL2             0xFD
    
    ... // in halSleep(), right after the call to HAL_SLEEP_TIMER_DISABLE_INT(), paste this code again: #ifdef ZED_HW_SNIFFER // Initialize integrated sniffer RFC_OBS_CTRL0 = RFC_OBS_CTRL_SNIF_CLK; OBSSEL0 = OBSSEL_OBS_CTRL0; RFC_OBS_CTRL1 = RFC_OBS_CTRL_SNIF_DATA; OBSSEL1 = OBSSEL_OBS_CTRL1; RFC_OBS_CTRL2 = RFC_OBS_CTRL_SFD_SYNC; OBSSEL4 = OBSSEL_OBS_CTRL2; MDMTEST1 |= 0x04; #endif

  • thank u for your reply.

    it seems that I haven't adjust the oscilloscope well.  And I have a new question about SFD.

    I observe that length of sfd_syn is about 1 ms . Are there any methods which can help me adjust the length of the signal?