蓝牙BLE如何设置AFH(调频自适应)?
使用的是CC2541单片机,想刚上电的时候设置AFH和周期性的设置AFH。使用的是1.4的BLE协议栈。这个在哪里设置,如何设置?有没有参考资料。不好意思,问的问题比较多。。
yanda,
CC2541 和 传统蓝牙不一样,没有用AFH。。。
Yan,
据我的了解,蓝牙低功耗BLE有用到跳频技术,主从设备连接之后,主给从(或从给主)发送数据,每次数据发送的信道不完全一样的。
你指的是CC2541这个芯片没有做AFH功能,还是蓝牙低功耗BLE没有做BLE功能?
另外AFH功能对我的产品很重要,麻烦确定!
BLE有类似的定义,但是名称不叫AFH.
4.5.8 Data Channel Index Selection 4.5.8.1 Channel Classification The master’s Link Layer shall classify data channels into used channels (used for the connection) and unused channels (not used for the connection). This is called the channel map. The minimum number of used channels shall be 2. The Host may provide channel classification information to the Link Layer. The Link Layer may use the information provided by the Host. The slave shall receive the channel map from the master in the CONNECT_REQ PDU. If the master changes the channel map it shall notify the slave as specified in Section 5.1.2.
J-X, channel map如何设置和获取?
J-X, channel map如何设置和获取?
yanda,
BLE 不叫AFH,叫做channel map, 是以固定的序列跳,不是随机,然后一段时间改变一次。
既然你了解AFH,你可以看一下蓝牙的spec,看一下BLE 的channel map 机制,对你来说肯定不难理解。
yanda,您好
说实在的一年多了有点忘记了,当初研究的也不是很深入,找了之前的邮件日志,贴出来您凑合着看一下吧,希望有点点帮助
其实对于rf,做应用无所谓的,搞清楚你要适配的profile就好了,当然如果是要设计硬件等等那就必须要搞清楚如何进行基础的测试,深入的我不懂,不作说明。
邮件一:
1、CC2540的RF测试工程:
1)添加按键触发的功能,采用按键触发进入不同的测试命令。
2)通过硬件仿真,观察每一个函数独立运行的返回值都为0x00(success),说明程序结构没有问题。
3)主要保留了LL层、HCI层、HAL层的相关函数,删除所有的profile。
4)未在仪器上测试,明天使用smartRF抓包看看是否有数据。
相关函数:
HCI_EXT_SetTxPowerCmd 设置发射功率
HCI_EXT_ModemTestTxCmd 开始连续的发送测试,需要指定信道和是否调制
HCI_EXT_ModemHopTestTxCmd 开始连续的发送测试,发送37Byte 数据包(伪随机数),且信道从0-39递增
HCI_EXT_ModemTestRxCmd 开始接收测试,需要指定信道
HCI_EXT_EndModemTestCmd 停止测试
2、协议栈Profile的理解:
1)对比了不同示例程序的profile异同点,其实对于一个完整的profile基本上有一个统一的框架。
2)不同的应用程序虽然profile结构相似,但是应用不同,有的包含service discovery等等,所以在统一上还需要做很多复杂的处理。
3)停留在看代码的层面上效果不好,接下来只要是修改示例程序的应用程去做一些实际的调试,先前都是一些key、led、uart的调试,未涉及协议层面。
3、第一阶段时间计划:
1)07-11至07-25主要用于协议层的代码调试。
2)07-25至07-31完成相关内容的总结工作。
4、和之前购买套件的淘宝沟通:
1)他们光盘中有个TX_node、RX_node未提供源代码,已经反馈给他们技术支持,等待回复。
2)该程序我猜测是基于协议栈的收发测试程序,要过来参考一下。
邮件二:
1、总结CC2540_RF测试相关的文档,等第一阶段小结后统一上传到共享文件夹。
2、找到自行编写的CC2540_RF测试程序的问题所在,HCI_EXT_ModemTestTxCmd函数的参数信道是函数自行定义的而并不是实际的物理信道。
1)该函数使用 RF Channel = (BLE Frequency – 2402) / 2 所以2402MHz对应的是0信道(逻辑信道),实际2402MHz对应的是37信道(物理信道)。
2)修改参数后测试与SmartRF Studio测试的现象一致,说明程序结构没有问题。
3、测试与协议相关的函数。
Yan, 好的。 CC2541的底层有做channel map功能吗?
yanda,
必须有,不然无法完成BLE 功能。
CC2541用什么API函数可以读取和设置信道表呢?
yanda,
读取可以用 HCI_LE_ReadChannelMapCmd().
设置的话,只有做为master 设备才可以: HCI_LE_SetHostChanClassificationCmd()
请问,用 HCI_LE_ReadChannelMapCmd() 读取channelMap,在pMsg中保存的吗? channelmap是动态的吗?是实时反映发送数据包所用信道的信息吗·?
谢谢