你好,
我在DA14583DEVKT-B板上使用SDK 5.0.3软件。
我采用了“ble_app_peripheral”(给出的BLE示例项目)。我已经修改工作的两个特点(I ..e分离UUID)。
我的要求是每5毫秒发送应用程序特定的数据。
我想知道以下细节。
1.我能传输BLE数据包的最大速率。
2.最大有效载荷可以在每个BLE包中传输。
3.一次启用多少个最大特征。
4.影响传播的其他因素是什么?
5.在哪个采样数据是可靠的。
请分享信息,并指导我需要参考哪些文件来了解上述因素。
问候,
Mahesh Chandana。
设备:
嗨mahesh,
1.你可以使用BLE定时器触发通知,但内核定时器只有10ms的分辨率,除了我认为你可以使用580定时器触发通知的频率你想。传送率依赖于连接间隔和每个设备都可以发送的数据包(每个设备的能力不同,例如580能够发送和间隔10包/连接,但这并不意味着中央连接将允许)。
2.通过增加MTU尺寸,且仅当数据关注相同的特征时,每个分组在空中的最大有效载荷大约为20字节,这可以在相同的连接间隔上的下一个数据包上增加到27。
3.最大特性取决于数据库堆的大小,通过增加您将获得更多空间以创建更多特征。
4.快速传输的因素是连接间隔和系统可以支持的每个连接间隔的包数。
你的最后一个问题非常通用。
为了了解影响BLE传输的因素以及数据包是如何传输的,你必须了解BLE协议是如何工作的,我建议阅读BLE规范以获得关于两个BLE协议如何交换数据的更详细信息。
由于MT_dialog
你好,
谢谢你的快速回复。
我采用了“ble_app_peripheral”(给出的BLE示例项目)。我已经修改为在一个服务下处理两个特性(发送传感器1数据和传感器2数据)。
这意味着,我的应用程序必须发送(即DA14583)2分组(即一个是传感器1数据,另一个是传感器2数据)每10毫秒秒。移动侧我正在使用Android应用程序记录数据。
对于每个包,我都有包计数来确定任何包丢失。有时,DA14583(即BLE外设)发送重复数据包(即发送数据包两次)而错过实际数据包。例如:我需要发送编号为0、1、2、3、4、5、6、7、8、9、10的数据包,但它发送的是0、1、2、2、4、4、6、6、(丢包也会发生)9,10。
上述问题,我面临的是10毫秒的采样率。如果采样率增加到20毫秒,那么就没有丢包,也就没有重复。它在20毫秒内工作正常。
请指导我解决这个问题。
问候,
Mahesh Chandana。
嗨mahesh,
如何触发项目的通知?当你说有时,这种情况发生的频率是多少?还有两个设备建立的实际连接间隔是什么(连接参数是由主设备设置的,而不是由从设备设置的,从设备只能指示他想要的连接间隔,但这不是主设备必须遵循的)。你发送的数据有多大?我已经在外围项目中测试了下面的代码片段(在ADC2特性中添加了通知,并将下面的代码片段粘贴到计时器处理程序上),似乎在我可以通过嗅探器日志检查的虚拟值下工作正常。
//************************************* 自定义值1 *********************************//
struct custs1_val_ntf_req* req = KE_MSG_ALLOC_DYN(custs1_val_ntf_req,
TASK_CUSTS1,
TASK_APP,
custs1_val_ntf_req,
def_cust1_adc_val_1_char_len);
//待采样的ADC值
静态uint16_t样本;
Sample = (Sample <= 0xffff) ?(样本+ 1):0;
申请- > conhdl = app_env - > conhdl;
申请- >处理= CUST1_IDX_ADC_VAL_1_VAL;
req-> length = def_cust1_adc_val_1_char_len;
顺利进行,memcpy(请求- >价值DEF_CUST1_ADC_VAL_1_CHAR_LEN);
KE_MSG_SEND(REQ);
struct custs1_val_ntf_req* req_2 = KE_MSG_ALLOC_DYN(custs1_val_ntf_req,
TASK_CUSTS1,
TASK_APP,
custs1_val_ntf_req,
DEF_CUST1_ADC_VAL_2_CHAR_LEN);
//************************************* 自定义值2 *********************************//
Static uint16_t sample_2 = 100;
Sample_2 = (Sample_2 <=0xffff) ?(sample_2 + 1): 0;
req_2 - > conhdl = app_env - > conhdl;
req_2-> handle = cust1_idx_adc_val_2_val;
req_2 - > = DEF_CUST1_ADC_VAL_2_CHAR_LEN长度;
memcpy(req_2->值,&sample_2,def_cust1_adc_val_2_char_len);
ke_msg_send (req_2);
由于MT_dialog
你好,
我从手机上的android应用程序中触发了通知。
重复发生不一致。主要是它在1.5秒到2秒(我的BLE采样时间为10毫秒)。此重复发生在70至300毫秒的时间内。从从站我表示连接间隔,在主站配置相同。我的数据包大小为20字节的数据。我已经使用单独的值1和值2.是否为ADC1和ADC2提供单独通知?
问候,
Mahesh Chandana。
你好,
在BLE中是否有传输批量数据的规定。
问候,
Mahesh Chandana。
嗨mahesh,
我无法复制您是经验的内容,使用10毫秒的定时器和10 ms连接间隔即使设置两个不同的计时器触发,则通过嗅探器检查通知。我可以假设的是,也许两个设备之间的链路的连接间隔没有设置为最佳状态(连接间隔达到核心来决定外围设备只能指示它想要的)。我不能在580方面看到任何其他原因导致这种数据丢失并具有这种行为,也许这是手机上应用程序的问题。
由于MT_dialog
你好,
感谢您的信息。我需要一些关于“在BLE中的批量数据传输提供的信息”的更多信息
问候,
Mahesh Chandana。
嗨mahesh,
我不明白这个问题,你能再解释一下吗?
由于MT_dialog
你好,
我想知道BLE栈是否支持“BLUETOOTH SPECIFICATION Version 4.2”。
截至目前,我们能够在每个特征上发送20字节。是否可以在每个特征上传输批量传输(在每个传送上)。
问候,
Mahesh Chandana。
嗨mahesh,
580堆栈符合4.2标准,支持4.2蓝牙规范的强制性要求,但不支持可选要求。
关于您的第二个问题,您可以增加您的特征和MTU的大小,但您将成功更新的特点以及您将能够成功发送的数据包数量受到在第2章中提到的因素的限制。
由于MT_dialog