关于ZIGBEE的CC2530+RFX2401C协议栈的修改
2015-12-16 13:58
330 查看
参照网上论坛和一些相关的帖子很容易就找到设置了;小白在这里再详细的总结一下,把遇到的一些问题提出来。
首先在网上买了一对CC2530+RFX2401C的模块,发射功率和1.2公里吹嘘的话也不知道是不是真的,暂时当它是真的吧!手头上也没有什么工具可以测这些参数。
跑题了,还是先看看代码怎么修改吧。我们根据模块的硬件连接线找到RFX24001C的控制线先,根据这颗PA数据手册我们可以清楚地知道PA控制管脚是TXEN和RXEN
知道这两个脚,那我们就很容易在CC2530上面找出控制这两个的引脚,因为ZIGBEE的厂商不一定都是按照官方连接的管脚做的,这样子也为一些不清楚的同学、糊里糊涂测试的同学带回正轨。现在我手上这块模块CC2530使用的是P1.1--TXEN;P1.2--RXEN;然后根据RFX2401C的管脚控制定义进行程序修改
知道这两个之后我们来修改代码:
第一步:在hal_board_cfg.h中找到#define xHAL_PA_LNA,把它改成#define HAL_PA_LNA;这样是打开协议栈的PA使能。
第二步:在mac_radio_defs.c中找到MAC_INTERNAL_API void macRadioTurnOnPower(void)这个函数
/* P1_1 -> PAEN */
RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
OBSSEL1 = OBSSEL_OBS_CTRL0;
/* P1_2 -> EN (LNA control) */
RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV;
OBSSEL2 = OBSSEL_OBS_CTRL1;
把原来那部分屏蔽后,再复制粘贴修改成上述代码。到这里代码已经改完了,我们可以去测试了。
如果做到这里,你的测试完全成功,请不要高兴,因为作为一个研发人员还是需要更深刻的理解的。在这里我就有几个疑问,提出来让大神们指正指正……
1、协议栈中的PA和LNA代表的是什么意思?而RFX2401C中却命名为TXEN和RXEN,这样程序的修改虽然是交给协议栈处理,但协议栈并不知道PA芯片是CC2591还是RFX2401C?这里面的PA控制过程还需要验证。有帖子讲PA是发射电路用的信号放大,LNA是接收信号放大。
2、我们知道有OBSSEL0-OBSSEL4的五个这样控制,分别对应P1.0到P1.4的管脚,OBSSEL_OBS_CTRL0和OBSSEL_OBS_CTRL1给它们赋的值代表的是置0或置1吗?
3、这只是打开PA的使能而已,一些同学测得结果往往不理想,为什么呢?或许你并没有把发射功率设置到最大4.5Dbm。
不知道大神们有没有遇到过更神奇的一些事情,可以一起分享一下!
首先在网上买了一对CC2530+RFX2401C的模块,发射功率和1.2公里吹嘘的话也不知道是不是真的,暂时当它是真的吧!手头上也没有什么工具可以测这些参数。
跑题了,还是先看看代码怎么修改吧。我们根据模块的硬件连接线找到RFX24001C的控制线先,根据这颗PA数据手册我们可以清楚地知道PA控制管脚是TXEN和RXEN
知道这两个脚,那我们就很容易在CC2530上面找出控制这两个的引脚,因为ZIGBEE的厂商不一定都是按照官方连接的管脚做的,这样子也为一些不清楚的同学、糊里糊涂测试的同学带回正轨。现在我手上这块模块CC2530使用的是P1.1--TXEN;P1.2--RXEN;然后根据RFX2401C的管脚控制定义进行程序修改
知道这两个之后我们来修改代码:
第一步:在hal_board_cfg.h中找到#define xHAL_PA_LNA,把它改成#define HAL_PA_LNA;这样是打开协议栈的PA使能。
第二步:在mac_radio_defs.c中找到MAC_INTERNAL_API void macRadioTurnOnPower(void)这个函数
/* P1_1 -> PAEN */
RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
OBSSEL1 = OBSSEL_OBS_CTRL0;
/* P1_2 -> EN (LNA control) */
RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV;
OBSSEL2 = OBSSEL_OBS_CTRL1;
把原来那部分屏蔽后,再复制粘贴修改成上述代码。到这里代码已经改完了,我们可以去测试了。
如果做到这里,你的测试完全成功,请不要高兴,因为作为一个研发人员还是需要更深刻的理解的。在这里我就有几个疑问,提出来让大神们指正指正……
1、协议栈中的PA和LNA代表的是什么意思?而RFX2401C中却命名为TXEN和RXEN,这样程序的修改虽然是交给协议栈处理,但协议栈并不知道PA芯片是CC2591还是RFX2401C?这里面的PA控制过程还需要验证。有帖子讲PA是发射电路用的信号放大,LNA是接收信号放大。
2、我们知道有OBSSEL0-OBSSEL4的五个这样控制,分别对应P1.0到P1.4的管脚,OBSSEL_OBS_CTRL0和OBSSEL_OBS_CTRL1给它们赋的值代表的是置0或置1吗?
3、这只是打开PA的使能而已,一些同学测得结果往往不理想,为什么呢?或许你并没有把发射功率设置到最大4.5Dbm。
不知道大神们有没有遇到过更神奇的一些事情,可以一起分享一下!
相关文章推荐
- 链接后面接等多个参数连接符的问题
- java学习中的困惑
- 查看SQL SERVER数据库运行参数和连接数
- 【设计模式】享元模式
- 我的学习记录
- ajax实现文件下载
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- 通过重构重命名修改项目名称后,运行状态栏显示旧项目名的解决办法
- 安卓手机连接蓝牙打印机实现打印功能
- latex的dvipdfmx编译问题(可以解决生成的中文字体颜色深浅不一的问题)
- 如何看懂源代码--(分析源代码方法)
- surf程序笔记
- 木材加工
- 二叉排序树的删除与插入
- AdapterViewFlipper和StackView的使用
- android 项目中两个监听执行相同操作的简便写法
- Linux下screen命令,一个对运维人员特别有帮助的命令
- 【iOS】网页中调用JS与JS注入
- Android Studio - 目录结构 和 常用功能介绍 浅析
- oracle学习总结