微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > simpleProfile_WriteAttrCB能否串口透传任意长度数据

simpleProfile_WriteAttrCB能否串口透传任意长度数据

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

有一个项目 需要从app发送大量数据给蓝牙, 数据大小不定 但从几百到几千个字节都有可能

看到别家的模块可以不断的连续把蓝牙数据从串口输出,cc254x方案默认最长20个字节接收

跟踪调试到底层simpleProfile_WriteAttrCB

static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 len, uint16 offset )

{
...............
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
{
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch ( uuid )
{
     case SIMPLEPROFILE_CHAR1_UUID:
            HalUARTWrite(0, pValue, len);    

这里直接串口输出 而不管更上层的调用。这里len的定义是uint8,肯定不能超过255, 测试发现几千个字节下来, 串口只输出部分数据。  

这里不确定ios在发送蓝牙数据的时候是否有分包发送。如果没有,为什么别人家的方案(非TI方案)可以正常接收串口连续输出?

麻烦指导一下,谢谢。

T没有针对这一块的例程,可以参考下其他人的经验: http://www.jianshu.com/p/29bd630077b4

谢谢 Viki 这里对于offset比较好奇

今天又具体进行了测试 

static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 len, uint16 offset )

// pValue为本次有效数据 len为本次有效字节长度
// 只有一个包 len最多20个字节(MTU) offset为0
// 如果有多个包 len最多18个字节 0ffset为前面已经接收的字节数
// 举例 总共一个包 len最大=20 offset=0
// 总共2个包 第一包len=18 offset=0 第二个包len最大=18 offset=18
// 总共3个包 第一包len=18 offset=0 第二个包len=18 offset=18 第三个包len最大=18 offset=36

请问这个原理是什么?是不是ios自动进行了分片传输? 之前没有收到一串输出一串,我估计是如果把收到的数据直接串口输出 速度是不够的 

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

网站地图

Top