CC2540手机连接的问题
尊敬的ti的工程师、各位网友们:
问题一、为什么CC2540与iphone5相连只有用LightBlue这个软件才能搜索到,直接用蓝牙不能搜索到,是不是lightBlue做了什么处理,如果是,做了什么处理?
问题二、我用CC2564同样搜索不到CC2540,CC2540发出的广告数据偶尔可以搜到一次,但是仅仅是一次,然后就找不到了,是不是载波频率的问题?或者有什么其它问题?
问题三、CC2540与手机通信和CC2540与CC2564通信应该是一个原理吧,是不是我需要向iphone一样设置什么才能搜索到CC2540呢?求知道的详细解释一下,急需
谢谢各位大神,请知道的大神多多留言
1. BLE设备都需要安装APP程序才能使用除了LightBlue你安装TI官方的APP也可以搜索到
2. 用CC2564应该是可以搜到CC2540的,可能是搜索时间太短的原因。因为CC2564是双模的蓝牙芯片搜索一般先执行标准蓝牙的搜索再执行BLE蓝牙的搜索。
3.回答同问题1
WBJ:
首先谢谢您的回复!麻烦您再帮忙看一下下面的问题
问题一、为什么非要用TI的App?TI的APP中对蓝牙作了什么处理?
问题二、你所说的搜索时间太短是什么意思是程序之中CC2564单次的搜索时间吗?请问如何修改单次的搜索时间
需要安装APP的原因是协议栈只支持到GATT GAP层 BLE所有上层的协议栈都在APP层实现 这是必须要安装APP才能正常使用BLE设备的原因 并不是说一定要TI的APP才可以 客户也可以基于iOS的BLE接口开发自己的APP 同时TI也提供iOS APP的例程供参考
LightBlue是网络上开放的通用的BLE的程序 不是TI的程序
请问您用的是哪一个程序?
WBJ:
再次感谢你,您帮忙解决
我CC2540用的是simpleBLEPeripheral例程,cc2564+tm4c123g我用的是SPPLEDemo,我觉得您说的搜索时间短或许就是那样子单次搜索时间短,但是这个时间在哪里设置呢?您要是方便又平台的话能不能帮忙测试一下,麻烦您了
WBJ:
大神,帮人帮到底吧,帮忙解决一下,相信还会有很多朋友会遇到这种问题的,麻烦您了,帮忙在你们的平台上试一下,帮忙找一下解决办法吧,帮忙把这个贴给完结了吧
目前我手上没有和你完全一样的平台 我在尝试M3上试试 有消息回复您 请不要着急
您好 我在M3+CC2564的板子上跑SPPLEDemo程序 CC2540EM板子跑 SimpleBLEPrepheral程序
在M3上执行StartScanning 能够马上搜索到CC2540的广播包如下
SPP+LE>etLE_Advertising_Report with size 36.
1 Responses.
Advertising Type: rtScanResponse.
Address Type: atPublic.
Address: 0x7c669d785598.
RSSI: 0xffffffd3.
Data Length: 30.
AD Type: 0x09.
AD Length: 0x13.
AD Data: 0x53 0x69 0x6d 0x70 0x6c 0x65 0x42 0x4c 0x45 0x50 0x65 0x72 0x69 0x70 0x68 0x65 0x72 0x61 0x6c
AD Type: 0x12.
AD Length: 0x04.
AD Data: 0x50 0x00 0x20 0x03
AD Type: 0x0a.
AD Length: 0x01.
AD Data: 0x00
从M3的例程上看标准蓝牙的搜索和BLE蓝牙的搜索命令是分开的 而且不输入stopscanning命令的话 搜索操作是不会停止的
另外 我在一开始选择Role的时候 选择的是Server 不知道您执行命令的顺序是什么样的?
WBJ:
您好!
我开始选择的是 client,然后执行startscanning,然后就什么也搜索不到,您的执行流程是什么呢?
WBJ:
我的邮箱1953185400@qq.com,您能把你的代码发给我吗?代码您改什么东西了吗?您的详细测试流程是什么样的?方便加个好友吗qq:1953185400?
我执行的流程是
Server
Startscanning
就能搜到了
我这边使用的都是TI原始的例程 没有做过任何修改
我刚才尝试使用Client 和Startscanning 返回是Invaild Command
所以建议您尝试Server 和 Startscanning
WBJ:
我刚才又试了一下,我发现我们公司的模块同样的电路,我烧写的是官方的程序进行的测试,但是有的可以搜索到,有的搜索不到,您知道大概怎么回事吗?软件硬件都是一样的,为什么有的不行呢,可能是哪儿的问题啊
WBJ:
我们公司自己做的CC2540模块,模块间通信没有问题,但是与CC2540通信,打印信息是这样子的
正确的:
SPP+LE>
etLE_Advertising_Report with size 36.
1 Responses.
Advertising Type: rtConnectableUndirected.
Address Type: atPublic.
Address: 0x78c5e59a996c.
RSSI: -30.
Data Length: 7.
AD Type: 0x01.
AD Length: 0x01.
AD Data: 0x06
AD Type: 0x02.
AD Length: 0x02.
AD Data: 0xf0 0xff
SPP+LE>
etLE_Advertising_Report with size 36.
1 Responses.
Advertising Type: rtScanResponse.
Address Type: atPublic.
Address: 0x78c5e59a996c.
RSSI: -30.
Data Length: 30.
AD Type: 0x09.
AD Length: 0x13.
AD Data: 0x53 0x69 0x6d 0x70 0x6c 0x65 0x42 0x4c 0x45 0x50 0x65 0x72 0x69 0x70 0x68 0x65 0x72 0x61 0x6c
AD Type: 0x12.
AD Length: 0x04.
AD Data: 0x50 0x00 0x20 0x03
AD Type: 0x0a.
AD Length: 0x01.
AD Data: 0x00
有问题的:
SPP+LE>
etLE_Advertising_Report with size 36.
1 Responses.
Advertising Type: rtConnectableUndirected.
Address Type: atPublic.
Address: 0x883314d6adc5.
RSSI: -31.
Data Length: 7.
AD Type: 0x01.
AD Length: 0x01.
AD Data: 0x06
AD Type: 0x02.
AD Length: 0x02.
AD Data: 0xf0 0xff
SPP+LE>
etLE_Advertising_Report with size 36.
1 Responses.
Advertising Type: rtConnectableUndirected.
Address Type: atPublic.
Address: 0x883314d6adc5.
RSSI: -31.
Data Length: 7.
AD Type: 0x01.
AD Length: 0x01.
AD Data: 0x06
AD Type: 0x02.
AD Length: 0x02.
AD Data: 0xf0 0xff
您能看出来这是怎么回事吗?为什么有的模块不能往下进行了呢?
WBJ:
我上一帖的意思是:CC2540与CC2540通信没问题,但是与CC2564通信有问题,串口输出信息如上:
感觉还是有搜到东西的
只是搜到的结果是rtConnectableUndirected的设备 区别在于需要另外发送SCAN_REQ PDU去获得SCAN_RSP从而获取更多的数据
WBJ:
首先,谢谢您的耐心帮忙
我的CC2540是一样的模块,我们公司自己做的,用手机可以搜索到,CC2564模块用的是同一个,但就是出现了上述问题,我现在不确定是硬件问题还是软件问题,您说的需要发送SCAN_REQ PDU来获取,正常的那个模块我也没有发送,但是自动就获取了,我现在纠结的是CC2540模块一样程序一样,不知道是CC2540的问题还是CC2564的问题,软件的问题还是硬件的问题,您帮忙分析一下
您可以做交叉测试看看 同一个CC2540硬件模块和软件 和 不同的CC2564硬件模块和同一个软件 的结果
同一个CC2564硬件模块和同一个软件 和 不同的CC2540硬件模块和同一个软件的结果
WBJ:
我用这种方法测试过,不同的CC2564,与正常的CC2540模块结果也是正常的,与不正常的CC2540模块结果还是不正常的,现在好纠结阿
从严格的意义上来说 我觉得问题不大 可能是CC2564对收到了ADV_IND之后的反应和手机不太一样的可能 因为返回这两种结果对于BLE设备来说 感觉从SPEC的角度来说 都是可能的
如果是你认为有问题的CC2540设备 被CC2564搜索 如果一直持续的搜索返回的结果都一样吗?
另外不同CC2540模块的软件都是一样的吗?
WBJ:
持续搜索返回的结果都是一样的,我用了网上的卖的模块可以,他们的模块支持AT指令,他们的程序是在哪儿下载的呢|?你知道吗?不同的CC2540软件都是一样的,除了网上买的那个
WBJ:
谢谢您!!!
我发现一个问题,CC2540如果搜索到rtScanResponse返回数据的,执行指令ConnectLE 连接速度很快,但是另一种情况,只搜索到rtConnectableUndirected数据的连接速度非常的慢,我觉得那里应该还是有问题吧,协议栈也不是太懂,您帮分析分析
WBJ:
您好!
CC2564与CC2540之间怎么发送数据呢?通过128bit的UUID?能不能把发送数据的流程跟我说一下啊?
我不知道CC2564中的RegisterSPPLE到了CC2540种应该如何配置,我在CC2564中执行到DiscoverSPPLE可以执行成功,但是貌似没有找到CC2540的service UUID
请你看一下BLE的training视屏
http://processors.wiki.ti.com/index.php/Category:BluetoothLE
WBJ:
我看完了你们的培训视频了,现在还是不知道CC2564和CC2540该怎么建立连接,如何发送数据,您能帮忙用你们的平台给测试一下吗?然后把流程告诉我一下,上面您不是可以发现设备了吗?那么如何建立通信呢?希望您可以帮忙告知一下
发现之后可以通过ConnectLE来连接
wbj:
您上班了阿,我输入连接指令可以连上,但是我不知道连接之后我需要怎么进行通信,相互发送数据,连接指令输入之后如下:
SPP+LE>ConnectLE 78c5e59a996c
Connection Request successful.
SPP+LE>
etLE_Connection_Complete with size 16.
Status: 0x00.
Role: Master.
Address Type: Public.
BD_ADDR: 0x78c5e59a996c.
SPP+LE>
etGATT_Connection_Device_Connection with size 16:
Connection ID: 1.
Connection Type: LE.
Remote Device: 0x78c5e59a996c.
Connection MTU: 23.
SPP+LE>
SPP+LE>
etLE_Connection_Parameter_Update_Request with size 14.
BD_ADDR: 0x78c5e59a996c.
Minimum Interval: 100.
Maximum Interval: 1000.
Slave Latency: 0.
Supervision Timeout: 10000.
Attempting to accept connection parameter update request.
GAP_LE_Connection_Parameter_Update_Response() success.
SPP+LE>
etLE_Connection_Parameter_Updated with size 14.
Status: 0x00.
BD_ADDR: 0x78c5e59a996c.
Connection Interval: 1000.
Slave Latency: 0.
Supervision Timeout: 10000.
接下来我该怎么进行数据通信呢?这个比较纠结
首先你的CC2540要支持SPP的协议,然后应该可以尝试使用DiscoverSPPLE的服务去获取通讯句柄
我就是这里不清楚了,我怎么修改CC2540支持SPP协议呢?能不能给点资料或者帮忙详细说一下,我用DiscoverSPPLE现在就是找不到通讯句柄,如下:
SPP+LE>DiscoverSPPLE 78c5e59a996c
GATT_Start_Service_Discovery success.
SPP+LE>
Service Discovery Operation Complete, Status 0x00.
SPP+LE>
大神,帮忙详细说一下吧,真心不知道咋改阿,给点资料也可以
CC2654这边的DiscoverSPPLE的功能在代码里面是能够看到的,它要寻找的符合SPPLE协议的UUID也在代码里面可以找到
所以要修改CC2540这边的代码,让CC2540支持SPPLE的协议,然后通过UUID下的特征值就可以完成读写操作了
TI没有现成的代码提供,建议你可以基于SimpleBLEPeripheral的代码修改CC2540的代码
WBJ:
能不能帮忙写段例子代码参考一下?
修改UUID就是相当于写一个自己的profile 改动的地方分布在2 3个文件里 没有很多 研究一下CC2540的代码就行啦
建议你可以交叉着看SimpleBLEPeripheral和Serial to BLE Bridge的代码,因为Serial to BLE Bridge就是在SimpleBLEPeripheral上修改的。
WBJ:
Serial to BLE Bridge的代码在哪里?
看看这个
http://processors.wiki.ti.com/index.php/SerialBLEbridge
wbj:
DiscoverSPPLE函数中的UUID是这个
UUID[0].UUID_Type = guUUID_128;
SPPLE_ASSIGN_SPPLE_SERVICE_UUID_128(&(UUID[0].UUID.UUID_128));
我已经将CC2540的SERVICE UUID配置成了128bit的,但是还是搜索不到,是不是还需要配置别的呢?
另外:在这个函数中GATT_Service_Discovery_Event_Callback,始终都没有进入这个case,
case etGATT_Service_Discovery_Indication:
怎样才能进入这个case呢?
WBJ:
您好,我觉得我找不到句柄的原因是因为CC2564查找句柄的时候多了一个这个UUID[0].UUID_Type = guUUID_128;
我不知道在CC2540中要怎么处理,我现在的128bit的uuid和CC2564的是一样的,也就这里不知道怎么处理了,求指导
你需要注意的是SimpleBLEPrepheral的代码都是使用的16bit的UUID 不是128bit的UUID 因此再添加了新的UUID之后 需要添加对128bit UUID相应的处理
要看一下simpleProfile_ReadAttrCB 和 simpleProfile_WriteAttrCB里面对UUID的回调处理 要添加对128bit UUID的处理哦
WBJ:
您好 ,这部分我修改过了,我是按着你们公司http://processors.wiki.ti.com/index.php/128_Bit_UUID_SimpleBLE这个示例程序改的代码,只是把service的uuid改了一下,改成了CC2564查找的那个,请问还有哪里需要修改呢?我觉得还是CC2564查找的service的UUID时候多出来的128bit那个标志为我这没处理的事儿,不知道怎么处理,求指点阿
wBJ:
您能不能帮忙改一段CC2540可以通信的程序啊,CC2564可以把数据发过来就行我参考一下,真心不知道改哪些内容阿
WBJ:
大神,能帮助一下吗?
WBJ:
问您一下,CC2540 peripheral工程中接收集中器发来的主服务UUID是那个函数阿?
WBJ:
我执行CC2564的DISCOVERYLE 这个命令,应该是向CC2540发送主服务UUID数据的,那么CC2540时在那里接收并判断这些数据的呢?请问,应该不是simpleProfile_WriteAttrCB这个函数
请问下cc2540利用官方例程SimpleBLEPeripheral和iPhone5S手机通讯的时候要注意什么?为什么我的手机装上LighBlue还是无法扫描到cc2540蓝牙
需要把CC2540配置为可发现模式阿simpleBLEPeripheral配置一下预编译宏我得是这样配置的
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
xPOWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=FALSE
HAL_LED=FALSE
HAL_UART=TRUE
xCC2540_MINIDK
您好!我想请问一下 我用的cc2540,用lightblue能用,现在想自己开发一个app 需要注意点什么呢? 想用安卓来开发,但是不知道如何下手,请问安卓方面有像lightblue一样的程序嘛?