微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540手机连接的问题

CC2540手机连接的问题

时间:10-02 整理:3721RD 点击:

尊敬的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一样的程序嘛?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top