打印

【转】CC2541/CC2640之新手常见问题集

[复制链接]
6761|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
南国先生|  楼主 | 2017-2-25 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、新手入门,有什么好资料吗?
答:
1)开发板购买地址:https://item.taobao.com/item.htm ... 46Ag&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
③Java零基础入门交流群:541462902
④香瓜单片机之STM8/STM32:164311667

2、新手入门,如何学习较快?
答:所谓“磨刀不误砍柴工”,该看的书要看,书不在多,看完任何一本都可入门。
该跑的例程要跑,多自己想办法解决问题,仅靠问别人来学习,那是像驴一样被鞭策前进。
我提供我的学习方法:
1)看完整本《蓝牙4.0 BLE开发完全手册》。
2)把amo的从初级到高级的例程全部跑完,详细看例程对应的每个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、为什么amo的smart rf的lcd不亮?
答:amo的lcd与ti的lcd不一样,所以需要拿amo的lcd驱动替换掉协议栈的lcd驱动。
详情: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)信号不好。
3)(最常见)设备中有耗费大量时间的事件在处理,导致广播周期被迫停止、导致连接通信超时。如:采集adc耗费了500ms,很容易造成广播停止、蓝牙断开。
解决方法:增大连接间隔(CC2541默认连接间隔为80ms,可增大为100ms+)、缩短事件处理时间(如将adc的500ms压缩至50ms,总之这个时间必须小于连接间隔)。

34、AmoMcu.apk在哪里?
答:这个apk是**早期的apk,改版了。
1)可以使用**后期的版本


2)可以使用替代的apk,在香瓜BLE之CC2541群(127442605)的群共享里,可进群下载。


35、哪里有CC2541生产时使用的一拖多下载器?
答:
**有售卖此套设备,链接:
https://amomcu.taobao.com/catego ... %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的认证是怎么回事?
答:
如果产品上有蓝牙**,则要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,不停地连接、发送测试指令、断开从机,收到测试指令的从机关闭广播一段时间。

相关帖子

沙发
南国先生|  楼主 | 2017-2-25 12:21 | 只看该作者
1、如何快速入门CC2640、如何正确安装IAR等软件?
答:《CC2640之快速入门》:http://blog.csdn.net/feilusia/article/details/52191556

2、出现如下图该怎么办?

答:
《CC2640之快速入门》:http://blog.csdn.net/feilusia/article/details/52191556。

3、协议栈默认是针对7x7封装的,如何修改才能使工程能在5x5封装的2640中运行?
答:

ti文档只提到较上方的红框中的修改,实际上还需要做下方红框中的修改,否则会报如下错误:



4、如何让CC2640发送数据给app?
答:使用notify函数即可实现,可参考下面博文中的notify使用。
《CC2640之添加自定义服务》:http://blog.csdn.net/feilusia/article/details/52333664



5、CC2640的串口如何使用?
答:
《CC2640之串口》:http://blog.csdn.net/feilusia/article/details/52252833

6、CC2640的按键如何使用?
答:
《CC2640之按键》:http://blog.csdn.net/feilusia/article/details/52221525
《CC2640之自定义按键》:http://blog.csdn.net/feilusia/article/details/52223339

7、如下图,仿真时全速进不了初始化,停止全速时显示超堆栈,是怎么回事?

答:经香瓜多次测试研究,这是因为你的设备中下载的协议栈与本工程不匹配。
仿真时只能更新app或者stack,而不能同时更新。
因此在仿真simpleBLEperipheral工程的app时,如果你设备中使用的是之前下载的simpleBLEcentral工程的stack。此时就会出现如上图的情况。
解决方法:
1)

2)

执行上面两步,则能统一更新stack与app。

8、ti的demo没有问题,但**的demo打开、编译出错等问题,怎么回事?
答:
1)demo不能放在中文、过长的路径下,请将demo放在d:\该路径下,再测试。
2)检查iar与协议栈版本,请使用**提供的iar7.40、协议栈2.01,再测试。

9、flash programmer2使用注意事项
答:
1)xp系统只支持flash programmer2的1.6.1版本,win7以上才支持1.7版本。
2)芯片版本如果是V2.3,则需使用1.7版本。
因此,建议xp系统安装1.6.1版本,win7系统以上的建议安装1.7版本。

10、遇到如下错误怎么办?

答:是工程的路径太长,其实不影响工程使用。解决办法就是路径改短(如:工程名称缩短)。

使用特权

评论回复
板凳
caijie001| | 2018-3-9 20:24 | 只看该作者
感谢

使用特权

评论回复
地板
51xlf| | 2018-3-12 12:55 | 只看该作者

使用特权

评论回复
5
i1mcu| | 2018-3-12 12:56 | 只看该作者
用于 Bluetooth® 低功耗 应用

使用特权

评论回复
6
pmp| | 2018-3-12 12:57 | 只看该作者
CC2640芯片内部的bootloader怎么样

使用特权

评论回复
7
51xlf| | 2018-3-12 13:01 | 只看该作者
很全面的资料。

使用特权

评论回复
8
i1mcu| | 2018-3-12 13:01 | 只看该作者
一个16位的MCU,独立主MCU Cortex-M3

使用特权

评论回复
9
pmp| | 2018-3-12 13:01 | 只看该作者
有些芯片内部的ROM中固化了芯片厂商的bootloader

使用特权

评论回复
10
1949zbh| | 2018-10-11 14:24 | 只看该作者
总结太全面了,学习了!

使用特权

评论回复
11
力佳纽扣电池| | 2020-4-9 10:59 | 只看该作者
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天。

补充一点点,嘻嘻,纽扣电池还有2%的自放电率需要考虑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

160

帖子

3

粉丝