【资源共享】CC2541之新手常见问题集

来源:互联网 发布:伦敦奥运会易建联数据 编辑:程序博客网 时间:2024/06/10 05:26

本篇博文最后修改时间:2017年05月22日,19:53。


一、简介

本文集合了香瓜整理的CC2541的新手常见问题,不断更新


二、版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i


三、新手问题集

1、新手入门,有什么好资料吗?

答:

1)开发板购买地址(阿莫开发板):https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-15079397444.5.rERmvK&id=38116104998

2)开发资源(必装软件+书籍):http://blog.csdn.net/feilusia/article/details/49031709


3)学习博客:

①甜甜的大香瓜(897503845):http://blog.csdn.net/feilusia

②Naner(317243293):http://blog.csdn.net/zhuangjitongxue

③阿莫(11940507):http://blog.csdn.net/mzy202

④ziye334:http://ziye334.lofter.com/view

⑤将来将来(804023718):http://blog.csdn.net/xiaoshideyuxiang


4)学习交流群:

①香瓜BLE之CC2541:127442605

②香瓜BLE之CC2640:557278427

香瓜BLE之Android群:541462902

④香瓜单片机之STM8/STM32:164311667

香瓜单片机之Linux群:512598061

香瓜单片机之职场交流群:450154342


2、新手入门,如何学习较快?

答:所谓“磨刀不误砍柴工”,该看的书要看,书不在多,看完任何一本都可入门。

该跑的例程要跑,多自己想办法解决问题,仅靠问别人来学习,那是像驴一样被鞭策前进。

我提供我的学习方法:

1)看完整本《蓝牙4.0 BLE开发完全手册》。

2)把开发板的初级到高级的例程全部跑完,详细看例程对应的每个pdf文档。

3)技术群、论坛中多交流,不局限于提问,多帮助他人。

4)将技术知识写成博客,分享给大家,让大家一起阅读、测试你的博客,一起完善你的博客。

5)做项目。


3、为什么有些工程会异常(打开时软件崩溃退出、编译没错而仿真却出错、使用别人的工程出错)?

答:很可能是移动过了文件夹导致了IAR查找不到了文件路径。

要养成好的习惯,拿到别人的工程,要做以下两步:

1)将整个工程文件夹放到“无中文、简短”的路径下,如“E:\”。

2)打开工程后rebuild all。


4、为什么我的串口收发不正常、串口乱码?

答:http://blog.csdn.net/feilusia/article/details/47431659


5、为什么有些函数中有些变量前加void?

答:这是防止编译警告。去掉这一句,IAR会警告这个id没被使用。


6、为什么工程中有些是灰色的文件? 


答:IAR中的文件都可以选择“编译”或“不编译”。打叉的文件是不编译的,如果工程中需要编译它,可以点击该文件右键——Options——把Exclude form build的勾去除。


7、工程中的“CC2541DK-MINI Keyfob”是什么?

答:iar允许在一个工程中自定义多个配置,用于同一套代码对不同板子的快速切换。

“CC2541DK-MINI Keyfob”就是TI公司的一块开发板对应的工程配置,我们通常会选择“CC2541”这个配置(推荐)。



8、CC2541的工程能下到CC2540中、CC2540的工程能下到CC2541中吗?

答:不能。


9、为什么我的packet sniffer抓不到通信数据包?

答:http://blog.csdn.net/mzy202/article/details/32408223


10、手机端有什么蓝牙app好用吗?

答:

安卓端APP: BLE Device Monitor、truthblue

IOS端APP:Lightblue


11、下载线需要几根?如何连接?

答:http://blog.csdn.net/feilusia/article/details/48680611


12、CC2540和CC2541有什么区别?

答:http://blog.csdn.net/feilusia/article/details/47068757


13、从机怎么给主机发送数据?

答:http://blog.csdn.net/feilusia/article/details/47020073


14、为什么我的按键按了没反应?

答:http://blog.csdn.net/feilusia/article/details/47336473


15、我用HalLedSet函数开led,为什么有时会闪烁?

答:如果开启了低功耗,在主轮询期间会间歇性进入低功耗,在HalSleep.c中的halSleep函数内会短暂关闭led。

(调用的是“HalLedEnterSleep();”)

解决闪烁问题的两种方法:

1)不使用低功耗。

2)在iar设置中先“HAL_LED=FALSE”,然后直接对寄存器操作。


16、IAR版本与协议栈版本该如何选择?

答:

建议使用如下对应关系:

1)iar8.10.4可以使用1.3.2的协议栈

2)iar8.20.2可以使用1.3.2和1.4.0的协议栈

3)iar9.10可以使用1.4.1的协议栈 


注:当高版本的iar(如9.10版本)使用低版本协议栈(如1.4.0版本),可作如下图的修改来达到编译通过。



17、CC2541通信时一个数据包最多能传几个字节?

答:20个应用数据+几个底层数据。


18、怎么样的手机才支持蓝牙4.0?

答:软硬件方面同时达到以下要求:

1)软件上:安卓4.3版本以上。

2)硬件上:支持蓝牙4.0。

注:苹果手机iphone4S开始支持蓝牙4.0。


19、为什么手机自带的蓝牙软件扫描不到CC2541的广播?

答:

支持蓝牙4.0的手机的蓝牙大多数都是双模的,也就是支持CC2541这类的BLE蓝牙,还支持蓝牙耳机这种大数据类型的传统蓝牙。

而自带的蓝牙软件就是可搜索蓝牙耳机,而不能搜索到BLE,因为他们协议不一样。

如果想搜索到CC2541,需要下载一个支持BLE的APP来搜索。


20、为什么2541flash只有256K,却能下载大于256K的hex?

答:因为实际下载进2541的flash里的是bin文件。hex可以理解为“包头数据+bin+校验数据”(详情自行百度),总之hex比bin大,hex大小约为bin

的2倍多一些。


21、如何查看工程的bin大小?

答:

1)生成bin文件后查看:生成bin的方法请参考论坛上方的香瓜博客,《CC2541之OAD》。

2)在IAR的编译信息中查看:

点击iar上方的Tools——Options进行下图的设置,然后rebuild all。就可以看到代码中实际的flash使用情况。




22、CC2541是否能同时使用两个串口?

答:可以,一个使用dma方式,一个使用isr方式。


24、为什么阿莫开发板的smart rf的oled不亮?

答:阿莫开发板的lcd与ti的oled不一样,所以需要拿阿莫开发板的oled驱动替换掉协议栈的oled驱动。
详情:http://blog.csdn.net/feilusia/article/details/48878347


25、使用BTool软件时显示超时,是怎么回事?
答:http://blog.csdn.net/feilusia/article/details/50817128


26、为什么有时候IAR中设置不了断点?

答:IAR断点最多设置3个。可以点击view-breakpoint,将已有的断点全部删除后,重新设置不超过3个的断点。


27、仿真状态下,为什么查看的变量值看不到?

答:因为变量被优化了,只需关闭IAR优化后,再次仿真,即可通过watch窗口查看变量值。



28、IAR8.20、IAR9.20破解版在哪里下?
答:http://blog.csdn.net/feilusia/article/details/49031709


29、为什么看到别人代码中使用notify时,用到的特征值句柄为0x002E、0x0035,哪里来的?

答:数值为多少对我们程序员来说并不重要,我们只需要能获取到这个值就可以了。

详情:http://blog.csdn.net/feilusia/article/details/47020073


30、为什么看到别人代码中使用GATT_Notification(0, &pReport, FALSE)的连接句柄是0?

答:数值为多少对我们程序员来说并不重要,我们只需要能获取到这个值就可以了。

详情:http://blog.csdn.net/feilusia/article/details/47020073


31、进行修改了CC2541端的名称、修改了CC2541端的特征值等操作,为什么手机上显示的仍然是之前的显示数据?
答:

原因是app缓存了这些数据。在更新过CC2541的代码之后,都需要清除手机端的缓存!!!

常用几种清缓存的方法:

1)关闭app、关闭蓝牙总开关、打开蓝牙总开关、打开app。

2)手机重启。


32、win10下安装PL2303的驱动,出现感叹号,安装不成功怎么办?

答:http://jingyan.baidu.com/article/c85b7a646f1db5003bac95be.html


33、设备的蓝牙广播几秒后停止、蓝牙通信连接容易断开,是怎么回事?

答:

1)信号不好。

2)(最常见)设备中有耗费大量时间的事件在处理,导致广播周期被迫停止、导致连接通信超时。如:采集adc耗费了500ms,很容易造成广播停止、蓝牙断开。

解决方法:增大连接间隔(CC2541默认连接间隔为80ms,可增大为100ms+)、缩短事件处理时间(如将adc的500ms压缩至50ms,总之这个时间必须小于连接间隔)。


35、哪里有CC2541生产时使用的一拖多下载器?

答:

阿莫有售卖此套设备,链接:

https://amomcu.taobao.com/category-1134731048.htm?spm=a1z10.5-c-s.w4010-15079397457.9.h7LMfb&search=y&parentCatId=1134731046&parentCatName=%CD%D1%BB%FA%C9%D5%C2%BC+%2F+%C1%BF%B2%FA%B9%A4%BE%DF&catName=%A9%C7CC2541%CD%D1%BB%FA%C9%D5%C2%BC%C6%F7+1%CD%CF16#bd


36、如何添加特征值、如何修改特征值长度?

答:http://blog.csdn.net/feilusia/article/details/48235691


37、CC2541主机端如何实现自动连接、断线后自动重连?

答:可以参考《CC2640之主机端自动连接》:http://blog.csdn.net/feilusia/article/details/52687155


38、CC2540、CC2541都能作为packet sniffer的抓包工具,进行抓包吗?

答:CC2540可以,CC2541不可以。TI没提供2541的抓包hex。


39、CC2541被手机连接上以后,是否还能广播数据让其他设备搜到?

答:连接状态下可再广播,但需要IAR设置中修改宏成PLUS_BROADCASTER。

可以参考《CC2541之连接时广播》:http://blog.csdn.net/feilusia/article/details/49125777


40、32M、32K外部晶振能不能省略?

答:

1)需要用到蓝牙功能时,32M外部晶振不能省略。

2)需要用到低功耗时,32K外部晶振不能省略。

可以参考《CC2541之32.768kHZ外部晶振》:http://blog.csdn.net/feilusia/article/details/48543029


41、CC2541的OSAL中使用的定时器是哪个定时器?

答:timer2。

详情:http://www.deyisupport.com/quest ... y/f/45/t/23544.aspx


42、请问协议栈中的SimpleBLECentral例程,如何修改才能搜索周围的ble设备(如手环等)?

答:SimpleBLECentral例程在扫描时做了扫描过滤。

1)如果想把所有设备添加进来,把simpleBLEFindSvcUuid函数的使用注释掉即可。

2)如果想增加一个UUID的从机设备,添加:

else if(simpleBLEFindSvcUuid(……))//新的UUID

{

//增加设备
}


可以参考《CC2541之解析simpleBLECentralEventCB》加强理解:http://blog.csdn.net/feilusia/article/details/48678067


43、CC2541的RF工作频率是多少?

答:

CC2540:RF frequency range 2402~2480MHz

CC2541:RF frequency range 2379~2496MHz


44、CC2541的adc采样位有几位?

答:12bit,最高位为符号位,实际有效采样为11bit。


45、CC2541从机如何获取主机MAC地址?

答:

在simplebleperipheral.c中有:

uint8_t peerAddress[B_ADDR_LEN];

GAPRole_GetParameter(GAPROLE_CONN_BD_ADDR, peerAddress);


46、主机端接收灵敏度如何设置?

答:




47、BLE的认证是怎么回事?

答:

如果产品上有蓝牙logo,则要BQB认证。

如果要出货到美国,要FCC认证。

如果要出货到欧洲,要CE认证。


48、ANCS是什么?

答:

苹果通知中心(Apple Notification Center Service, ANCS)。

1)CC2541是从机,IOS是主机且不需要app。

2)CC2541是客户端、IOS是服务器。 

3)ANCS必须要绑定(不一定要密码)。

4)基本步骤如下:

①CC2541广播。

②IOS连接。

③绑定过程。

④CC2541扫描IOS的服务和特征值。

⑤CC2541打开IOS的notify开关。

⑥IOS有来电时,发送notify消息提醒包给CC2541。

⑦CC2541发送读取电话的指令给IOS。

⑧IOS返回电话数据。


49、CC2541从机的广播间隔拉长为3S,导致CC2541主机连接很慢,怎么解决?

答:

可以在CC2541主机端开启高速扫描:

TI的GAPCentralRole_EstablishLink连接函数的第一个参数,false改为ture。


50、simpleBLEcentral工程连接simpleBLEperipheral后,发现服务很慢,如何解决?

答:


工程在连接之后默认为延时1S才去发现服务,可以缩短这个时间。


51、如何知道一块CR1632(120mAh)在自己的设备上能用多久?

答:

1)使用示波器测试设备电流以及电流持续时间。

2)通过测得的数据,算出电流平均值。

例如:1秒1次RF通信、RF通信持续1ms,其中RF通信时电流有18ma,其他时间段为10uA。

那么电流平均值=1秒内总电流/1秒=(18000uA*0.001S+10uA*0.999S)/1S=28uA。

3)计算有效电池电量

例如:CC2541有效电压是2V以上,CR1632是额定电压3V,因此CR1632的120mAh对于CC2541都是有效电池电量。

4)计算使用时长=有效电池电量/电流平均值=120mAh/28uA=120000uAh/28uA=4285.7h=178.6天。


52、如果从机申请更新参数失败了,会执行什么操作?

答:

GAPRole_SendUpdateParam函数中的最后一个形参,即是更新参数失败后的执行操作。

它一共有3个选项(无动作、重发、断开连接):

#define GAPROLE_NO_ACTION                    0 // Take no action upon unsuccessful parameter updates  

#define GAPROLE_RESEND_PARAM_UPDATE          1 // Continue to resend request until successful update  

#define GAPROLE_TERMINATE_LINK               2 // Terminate link upon unsuccessful parameter updates  


53、为什么我用GAPRole_GetParameter(GAPROLE_CONN_ADDR,peerAddress)获取主机(手机)的mac地址后,每次重启后mac地址就变了?

答:由于手机安全机制,不会以真实mac地址去连接蓝牙设备。但cc2541作为从机可从绑定信息中获取真实的mac地址,参考代码如下:

idx = gapBondMgrResolvePrivateAddr( pDevAddr );

if ( (idx < GAP_BONDINGS_MAX) && (pResolvedAddr) )
{
        VOID gapBondMgrGetPublicAddr( idx, pResolvedAddr );
}
break;


54、如何将多个hex合成一个hex?

答:

1)写多个hex进芯片里。

2)从芯片里读出1个hex。

3)就可以拿这个hex下载带多个芯片中。


55、蓝牙从机设备生产时该如何测试?

答:

蓝牙从机设备内部增加测试指令,用于测试的手机使用测试app,不停地连接、发送测试指令、断开从机,收到测试指令的从机关闭广播一段时间。


56、packet sniffer如何过滤出某个设备的广播包信息?

答:

http://blog.csdn.net/zhuangjitongxue/article/details/51141688


57、假设特征值6的数据长度是20,如何能让app发送少于20字节数据给CC2541?

答:

默认是只允许发指定字节的,可通过如下方法修改:





2 0