CC2540连接后,扫描其他从站问题
首先谢谢大家抽空看一眼:
情况如下:
1. 我这里将一个CC2540设备作为主站不断执行一个时常为1s的扫描命令,另一个CC2540作为从站每2s定时发送1帧20位左右广播,还有一个IPhone4s设备作为从站。广播数据使用AES的CBC模式加密。
2. CC2540主站使用HostTestApp程序,使用BTool工具进行设置。从站使用keyfobdemo例程发送广播。
3. 当我仅使用主站CC2540去扫描从站CC2540时,基本可以搜索到从站设备的信息( Event: 060D)。
4. 当我将主站CC2540与IPhone4s连接上之后,很难搜索从站设备的信息,大概5%左右能收到吧。
尝试过以下的方式:
减少每帧广播的数据量,几乎没有影响。
去除AES加密过程,几乎没有影响。
延长主站搜索时间至10s,成功率大概50%。
增加从站发送帧数为每2s发4帧,成功率大概70%。
修改connection Interval,几乎没有影响。
延长主站搜索时间为6s,从站每秒发1帧广播,成功率略大于90%。
问题是:
暂时不清楚为什么为造成连接前后,搜索从站的情况不同,猜测为设备天线连接后为了发送固定的连接帧,影响了正常的搜索。
我希望能够在从站每2s发一帧的情况下,尽量缩短主站搜索的时间与搜索的成功率。
再次感谢大家~
暂时不清楚为什么为造成连接前后,搜索从站的情况不同,猜测为设备天线连接后为了发送固定的连接帧,影响了正常的搜索。
首先肯定和天线无关了。
你这样的意思是从站和IPhone4s所接收的帧的大小(格式)并不一样咯?建议使用Struct的包,有可能从站在没有收到正常包后处理过程中跑飞了?特别是你从站周期间是在做什么?睡眠吗?
从站周期内的确是运行在睡眠状态的,但是我使用sniffer查看时,每一帧都是可以被监测到的。
我从站和主站也不需要连接,仅仅需要搜索到设备以及处理广播数据。
关于我猜测的天线问题我是这样理解的:
因为数据发送和接收信息都是使用同一根天线,那么当主站和IPhone连接上之后,因为主从站会持续发送保持连接的帧(connection events),当然这个发送的帧的间隔可以设置。那么在天线持续工作的情况下,又需要去搜索其他设备,特别是从站每2s仅发送一帧的情况下,是否会造成信号的冲突?虽然广播和数据走的不同的通道。
不是太清楚你说Struct指的是什么?我发送广播的时候是修改一个advertData[]这个数组,然后更新广播信息并发送广播。
单凭你说睡眠模式,我看就很有机会因为这个而没收到了。你snffer收到只是你那个sniffer端不在睡眠模式。
我理解你的意思,我的项目也做成广播的方式,但是理论上当AP给ED发送数据的时候ED就需要在监听模式,至少好像要开RX吧?(这个具体我没实验过)
数据冲突不冲突,那是物理层的事,你只关心你的广播数据就好了,struct 是结构,意思是你最好自己定义一个属于自己格式的数据包,具体资料你兴趣可以自己查查,这个也非必要如果你当前能满足的话。
考虑到会有睡眠模式,我建议你换一个网络架构,ED端醒来发送“I was woke”给AP,接着进入监听模式,AP收到"I was woke"再广播信息出去(这个时候如果你有多个ED那真要考虑数据包结构了,否则EDs不知道那个信息属于它的),ED收到AP的广播后,接着自己也广播一个你要的数据包。接着进入睡眠状态。
我的主站不进入睡眠模式,会一直执行一个扫描广播的命令。
从站是发完广播命令就进入睡眠模式。
我原来的机制仅仅是从站发广播,主站去扫描广播信息而已。
而你说的另一个网络架构相当于在2个设备之间加入了一定的反馈机制,有点类似于主站使用Active Scanning模式。
我想你的ED端应该是我这里的从站(抱歉我对专业术语的了解程度不是很好),你说ED端醒来先发送数据给AP端,这个应该是通过广播发送的,我担心的就是这个广播数据主站在连接后貌似接收不到。
因为我想要从站的功耗做的尽量小,最好能够使用纽扣电池运行6个月以上,不过我会具体尝试一下你的方法,谢谢。
是的,如果你要考虑省电,当然尽量让ED待在PM0模式下的时间尽量短吧?我给你的那个方案你可以考虑下,或者你看看你的情况还能不能优化。