TI中文支持网
TI专业的中文技术问题搜集分享网站

从机向主机发送数据时,数据包会合并或者丢包

我使用2541作为从机向2540主机发送数据,通过串口从2540接收数据,完全单向传输。

每5ms发送一次数据包,一个数据包有7个字节。算下来速度也不算太快,每秒钟7*200=1400个字节

但是从串口收到的数据来看,有时会收到14个字节的数据包,21个字节的也有,甚至是28个字节的。

随之就是字节数为0的空包。

使用的1.3.2协议栈,这是因为传输速率不够导致的吗?

mark_xu:

1、首先确定一下,你发这么多字节,是在一个事件中一次发送的,还是状态机轮询发送的

2、如果这么多字节一次性发完,最好计算一下时间,如果一个事件在OSAL中阻塞时间太长,会影响蓝牙的传输

mark_xu:

一般不会出现这种情况,请检查您的程序

Yi Huo:

回复 mark_xu:

是当从机被连接后,开始周期事件

case GAPROLE_CONNECTED:osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT , 1000 );break;

然后在SimpleBLEPeripheral_ProcessEvent函数的周期事件里循环

if ( events & SBP_PERIODIC_EVT ) {           int timer=5;           uint8 ParamBuffer[]={0x24,Acce_xh(),Acce_xl(),Acce_yh(),Acce_yl(),Acce_zh(),Acce_zl()};           sbpSerialAppSendNoti(ParamBuffer,sizeof(ParamBuffer));           osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, timer );}

然后在PC上输出每个数据包收到的时间,发现时间间隔都大于10ms。

这可以和i2c设备的存取速度有关吗?

Yi Huo:

回复 mark_xu:

非常感谢你花费时间来解答!!!

我的毕业设计中采用了蓝牙传输数据,但对蓝牙没有更深入学习……

这个函数的原型是这样的

void sbpSerialAppSendNoti(uint8 *pBuffer,uint16 length){    uint8 len;    if(length > 20)        len = 20;    else        len = length;    static attHandleValueNoti_t pReport;    pReport.handle=0x2E;    pReport.len = len;    osal_memcpy(pReport.value, pBuffer, len);    GATT_Notification( 0, &pReport, FALSE );

}

其中pReport.handle=0x2E;就是用到了UUID吧?

mark_xu:

回复 Yi Huo:

1、pReport.handle=0x2E;这个是参数的handle值,而非UUID

2、…

赞(0)
未经允许不得转载:TI中文支持网 » 从机向主机发送数据时,数据包会合并或者丢包
分享到: 更多 (0)