你好,
我在DA14583DEVKT-B板上使用SDK 5.0.3软件。
我拍摄了“BLE_APP_PERITELAL”(给出了BLE示例项目)。我修改了两个特征(我是一个单独的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_PERITELAL”(给出了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 musts1_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;
req-> conhdl = app_env-> conhdl;
req-> handle = cust1_idx_adc_val_1_val;
req-> length = def_cust1_adc_val_1_char_len;
memcpy(req->值,和样本,def_cust1_adc_val_1_char_len);
KE_MSG_SEND(REQ);
struct susts1_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 ********************************* //
静态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-> length = 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堆栈是否会支持“蓝牙规范4.2”。
截至目前,我们能够在每个特征上发送20字节。是否可以在每个特征上传输批量传输(在每个传送上)。
问候,
Mahesh Chandana。
嗨mahesh,
580堆栈为4.2合格,并支持4.2蓝牙规范的强制性要求,但不是可选的要求。
关于您的第二个问题,您可以增加您的特征和MTU的大小,但您将成功更新的特点以及您将能够成功发送的数据包数量受到在第2章中提到的因素的限制。
谢谢mt_dialog.