新手在初玩TI的zigbee时,如果没有官方的demo板,上手会比较麻烦。因为官方协议栈为了兼容多个demo板,定义了很多宏。自己最初玩CC2530时,在网上买了个CC2530的开发板(其实只能算模块),带CC2592这个FEM。刚买到模块时把Z-Stack中的sample light 和sample switch烧录到板子上时,发现不能发现网络,也无法组网,sniffer只能断断续续的收到一些包,收到的包的RSSI非常低。(Zstack 例程中需要配合ui操作才能配网,我修改为上电后延时1秒开始组网)。
怀疑可能是FEM并没有正常工作,导致输出信号弱,而且官方例程默认状态是不带PA_LNA的,我还没修改。查看了CC2592的datasheet,这颗FEM的控制引脚有3个,分别是PA_EN,LNA_EN和 HGM。不同工作状态下,真值表如下图。
实测发现CC2592的这几个引脚确实一直为低电平,用示波器抓包也并没有发现有拉高的脉冲。
回去检查买到的模块电路连线,发现PA的引脚不是官方demo板上用的P1.1 P1.0 和 P0.7,而是用的P1.3 P1.4 控制 LNA 和 PA,LGM 好像用的 P0.1。再回到TI 例程,去修改hal_board_cfg.h这个文件(外设配置基本都在这里)。我这里用的FEM 是CC2592,宏定义的位置就在这个文件的头几行。将xHAL_PA_LNA_CC2592 改为 HAL_PA_LNA_CC2592。那么在后续的HAL_BOARD_INIT() 中,首先会配置HGM 的引脚为输出:
/* Set PA/LNA HGM control P0_7 */ P0DIR |= BV(7);这里需要将这个IO改为自己板子上的IO。我用的是BV(1)
然后会调用 MAC_RfFrontendSetup() --> HAL_PA_LNA_RX_HGM();
此处的 HAL_PA_LNA_RX_HGM(); 用于控制HGM引脚,也需要修改其宏定义,修改为自己板子上的IO
#define HAL_PA_LNA_RX_HGM() st( P0_7 = 1; ) #define HAL_PA_LNA_RX_LGM() st( P0_7 = 0; )接下来要配置PA_EN 和 LNA_EN ,配置的地方在mac_radio_defs.c 中的 macRadioTurnOnPower()函数
else if(paLnaChip == PA_LNA_CC2592) { /* P1_1 -> PAEN */ RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV; OBSSEL1 = OBSSEL_OBS_CTRL0; /* P1_0 -> EN (LNA control) */ RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV; OBSSEL0 = OBSSEL_OBS_CTRL1; }
CC2530支持3个调试信号的输出,rfc_obs_sig0, rfc_obs_sig1, and rfc_obs_sig2 这三个信号具体输出什么信号,通过对应的 RFC_OBS_CTRLx 来控制,通过查阅CC2530 user guide 可以知道。这三个调试信号的IO 只能通过 P1.0~P1.5 输出,配置方式为修改 相应的OBSSELx。
官方代码是用的P 1.1 和P1.0,网上模块上时P1.3(PA_EN) 和 1.4(LNA_EN),按照上面规则修改成下面的配置:else if(paLnaChip == PA_LNA_CC2592) { /* P1_3 -> PAEN */ RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV; OBSSEL3 = OBSSEL_OBS_CTRL0; /* P1_4 -> EN (LNA control) */ RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV; OBSSEL4 = OBSSEL_OBS_CTRL1; }
致此,TI CC2530 修改PA LNA 引脚的过程就完成了,三个控制引脚都需要检查一下。修改完过后,可以发现抓包器里面抓到的包的RSSI明显比修改前强,而且用示波器抓控制引脚上的包可以看到周期的脉冲,对应是协议里 mac 层心跳包。(data poll)


-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
-
- xiaomiking
-
1147 发帖6357 回复18609 积分
- 私信他 +关注
回复于 2018-06-28
6#
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖