11帖子 / 0新
最后一篇文章
马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
BLE传输

你好,

我正在使用DA14583DEVKT-B板上的SDK 5.0.3软件。
我采用了“ ble_app_peripheral”(给出的示例项目)。我已经修改了两个特征(即单独的UUID)。

我的要求是每5毫秒发送一次特定于应用程序的数据。
我想知道以下细节。
1.我可以传输BLE数据包的最大速率。
2.可以在每个BLE包中传输最大薪酬负载。
3.我一次启用了多少最大特征。
4.影响传输的另一个因素是什么。
5.到哪个采样是可靠的。

请分享信息,并指导我需要参考的哪些文档了解上述因素。

问候,
Mahesh Chandana。

设备:
mt_dialog
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨,马赫什,

嗨,马赫什,

1.您可以使用BLE计时器触发通知,但内核计时器仅具有10毫秒的分辨率,除了我认为您可以使用580的计时器触发通知,以获取所需的频率。TRASMIT速率取决于连接间隔和每个设备可以发送的数据包(每个设备的功能都不同,例如580能够发送和每个连接间隔最多10个数据包,但这并不意味着连接的中央将允许)。

2.通过增加MTU的大小,每个数据包在空气上的最大有效载荷约为20个字节,并且只有当数据涉及相同特征的情况下,在相同的连接间隔上,在下一个数据包上,这可以将其增加到27个。

3.最大特征取决于数据库堆的大小,它增加了您将获得更多空间来创建更多特征。

4.快速传输的因素是系统可以支持的每个连接间隔中的连接间隔和数据包数。

5.您的最后一个问题非常通用。

为了了解影响BLE传输的因素以及数据包的转移方式,您将必须了解BLE协议的工作原理,我建议阅读BLE规范以获取有关两个BLE协议如何交换数据的更详细信息。

谢谢mt_dialog

马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
你好,

你好,
谢谢你的快速反应。

我采用了“ ble_app_peripheral”(给出的示例项目)。我已经修改为在一项服务下处理两个特征(用于发送传感器1数据和传感器2数据)。
这意味着,我的应用程序必须在每10毫米秒内发送(即DA14583)2个数据包(即一个用于传感器1数据,另一个用于传感器2数据)。移动侧我正在使用Android应用程序记录数据。

对于每个数据包,我都有数据包计数来识别任何数据包丢失。有时,DA14583(即BLE外围)发送重复数据包(即两次发送数据包)并缺少实际数据包。示例:我需要发送数字为0、1、2、3、4、6、7、8、9、10的数据包,但它发送0、1、2、2、4、4、6,6,(包数据包丢失也发生)9,10。

上述问题,我面对10毫秒的样本率。如果样本率增加到20毫秒,则不会丢失数据包,也没有重复。它适用于20毫秒。

请指导我解决这个问题。

问候,
Mahesh Chandana。

mt_dialog
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨,马赫什,

嗨,马赫什,

您如何触发项目中的通知?当您说有时会说一次,一次发生一次?另外,这两个设备建立的实际连接间隔是什么(连接参数是由主而不是从从设置的,从属可以指示他想要的连接间隔,但这并不是主人遵循的必要条件)。您发送的数据有多大?我在外围项目中介绍了以下片段(在ADC2特征中添加了通知并在计时器处理程序上粘贴了以下摘要),并且似乎可以通过sniffer log检查虚拟值。

// ****************************************************************************************************************************************************************** //
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;

req-> conhdl = app_env-> conhdl;
req-> handle = cust1_idx_adc_val_1_val;
req-> length = def_cust1_adc_val_1_char_len;
memcpy(req-> value&sample,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);

// ********************************************************************************************************************************************************************************************** //
静态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_val_2_val;
req_2-> length = def_cust1_adc_val_2_char_len;
memcpy(req_2-> value,&sample_2,def_cust1_adc_val_val_2_char_len);

ke_msg_send(req_2);

谢谢mt_dialog

马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
你好,

你好,
我正在Mobile上触发Android应用程序的通知。
重复发生不一致。通常,它在1.5秒至2秒之间(我的BLE样品时间为10毫秒)。这种重复发生为70至300毫秒。从从属中,我表示连接间隔,在主侧也配置了相同的连接间隔。我的数据包大小是20个字节的数据。我对值1和值2使用了单独的通知2。您是否正在为ADC1和ADC2提供单独的通知?

问候,
Mahesh Chandana。

马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
你好,

你好,

是否有规定将批量数据传输转移到BLE中。

问候,
Mahesh Chandana。

mt_dialog
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨,马赫什,

嗨,马赫什,

我无法通过10 ms的计时器和10 ms连接间隔复制您正在实验的内容,即使设置两个不同的计时器触发,通知的发送正确,并用sniffer检查。我可以假设的是,两个设备之间链路之间的连接间隔未设置为最佳(连接间隔都达到中心来决定外围只能指示它想要什么)。我看不到580方面的任何其他原因导致此数据丢失并具有这种行为,也许这是电话上应用程序的问题。

谢谢mt_dialog

马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
你好,

你好,

感谢您的信息。我需要更多有关“是否有规定将批量数据传输的规定转移到BLE中?”

问候,
Mahesh Chandana。

mt_dialog
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨,马赫什,

嗨,马赫什,

我没有问题,您能给您一些澄清吗?

谢谢mt_dialog

马赫什
离线
最后一次露面:3年3个月前
加入:2016-01-04 14:03
你好,

你好,
我想知道BLE堆栈是否会支持“蓝牙规格4.2版”。

截至目前,我们能够以每个特性发送20比较。是否可以在每个特征上传递大量转移(在每个传输上),例如256个字节(在每个传输上)。

问候,
Mahesh Chandana。

mt_dialog
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨,马赫什,

嗨,马赫什,

580堆栈为4.2合格,并支持4.2蓝牙规范的强制性要求,但不支持可选的规范。

关于第二个问题,您可以增加特征和MTU的大小,但是您将成功更新多少个特征,以及您将成功发送多少数据包受到我在Post#2中提到的因素的限制。

谢谢mt_dialog