GB2530 H S 模块打开PA方法

GB2530 H S 模块打开PA方法
新闻来源于:gbanadmin 发表于:2014-1-14 16:21:24 浏览6708次

有很多人回在使用ZStack 协议的时候经常发现距离稍微一大,就掉线或者通讯不稳定,首先应该检查的是程序内部PA是否已经打开,因为在H/S模块内部,CC2530天线部分首先进入PA芯片,然后通过PA芯片放大后在到天线,所以,如果PA没有打开,天线等于没有,所以效果会很差。

在ZStack  工程中,hal_board_cfg.h 文件中有关于PA的配置部分说明,如下

 

/* ------------------------------------------------------------------------------------------------
 *                                       CC2590/CC2591 support
 *
 *                        Define HAL_PA_LNA_CC2590 if CC2530+CC2590EM is used
 *                        Define HAL_PA_LNA if CC2530+CC2591EM is used
 *                        Note that only one of them can be defined
 * ------------------------------------------------------------------------------------------------
 */
#define xHAL_PA_LNA
#define xHAL_PA_LNA_CC2590
 
由于H/S模块采用的是CC2591和2401,控制方式和CC2591的方式是一样的, 区别就是S模块不需要控制接收增益了,就是程序里P0_7脚解放出来可以使用了。但对于PA的使用部分是一样的。 这里我们应该定义HAL_PA_LNA,可以看到程序定义的地方加了一个“x” 我们只需要把前面的X去掉就可以了。
改为如下:
 
#define HAL_PA_LNA
#define xHAL_PA_LNA_CC2590

这样,我们就打开了PA部分。

另外对于S模块,由于已经取消了内部的32.768的晶振 所以注意

 

/* 32 kHz clock source select in CLKCONCMD */
#if !defined (OSC32K_CRYSTAL_INSTALLED) || (defined (OSC32K_CRYSTAL_INSTALLED) && (OSC32K_CRYSTAL_INSTALLED == TRUE))
  #define OSC_32KHZ  0x00 /* external 32 KHz xosc */
#else
  #define OSC_32KHZ  0x80 /* internal 32 KHz rcosc */
#endif
如果要使用internal 32 KHz rcosc,则需要定义OSC32K_CRYSTAL_INSTALLED为FALSE 。
在条件编译前增加
#define OSC32K_CRYSTAL_INSTALLED  FALSE   则定义使用内部RC震荡源了。

再测试通讯,这样通讯就应该正常了,如果还不正常使用SmartRF Studio 7 测试是否模块损坏。SmartRF Studio 7的使用请参照开发板使用说明

 

如果是S模块,由于不需要P0_7来控制PA的接收增益,所以,在使用PA定义后,如果需要使用此IO脚。则在

 

#define HAL_BOARD_INIT()                                         \
{                                                                \
  uint16 i;                                                      \
                                                                 \
  SLEEPCMD &= ~OSC_PD;                       /* turn on 16MHz RC and 32MHz XOSC */                \
  while (!(SLEEPSTA & XOSC_STB));            /* wait for 32MHz XOSC stable */                     \
  asm("NOP");                                /* chip bug workaround */                            \
  for (i=0; i<504; i++) asm("NOP");          /* Require 63us delay for all revs */                \
  CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); /* Select 32MHz XOSC and the source for 32K clock */ \
  while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); /* Wait for the change to be effective */   \
  SLEEPCMD |= OSC_PD;                        /* turn off 16MHz RC */                              \
                                                                 \
  /* Turn on cache prefetch mode */                              \
  PREFETCH_ENABLE();                                             \
                                                                 \
  /* set direction for GPIO outputs  */                          \
  LED1_DDR |= LED1_BV;                                           \
                                                                 \
  /* Set PA/LNA HGM control P0_7 */                              \
  P0DIR |= BV(7);                                                \
                                                                 \
  /* configure tristates */                                      \
  P0INP |= PUSH2_BV;                                             \
                                                                 \
  /* setup RF frontend if necessary */                           \
  HAL_BOARD_RF_FRONTEND_SETUP();                                 \
}
删除绿色的2行内容,并且在

mac_radio_defs.h文件中

 

#define HAL_PA_LNA_RX_HGM()                           st( P0_7 = 1; )
#define HAL_PA_LNA_RX_LGM()                           st( P0_7 = 0; )
部分修改为
#define HAL_PA_LNA_RX_HGM()                         
#define HAL_PA_LNA_RX_LGM()                           
这样,在无线发送和接收的P0_7  就不会影响到了。
posted @ 2017-09-28 14:45  ldavid  阅读(547)  评论(0)    收藏  举报