亲爱的所有,
在一个项目中,我使用DA14531芯片将数据从传感器传输到智能手机。
该传感器通过SPI每2毫秒(500 Hz)提供16位。
为了通过BLE传输数据,我使用了这段代码:
char testVal [2];Uint8_t string_len = 2;//testVal在另一个函数中更新void user_update() {struct custs1_val_ntf_ind_req* req = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ, prf_get_task_from_id(TASK_ID_CUSTS1), TASK_APP, custs1_val_ntf_ind_req, string_len);申请- > conidx = 0;申请- >通知= true;申请- >处理= SVC1_IDX_EEG_VAL_VAL;申请- >长度= string_len;memcpy(请求- >值、testVal string_len);ke_msg_send(要求的);app_easy_timer(期间,user_update); }
我的问题是:
我尝试将string_len改为50。然而,我的智能手机应用程序(nRF连接)只显示20字节。“一次”发送的最大数据量是多少?
先谢谢你
设备:
嗨MathieuB,
谢谢您在线问题,并符合您对DA14531 BLE解决方案的兴趣。为延迟道歉。
让我们以6.0.14.1114\projects\target_apps\ble_examples为例
ble_app_peripheral的示例SDK作为参考。
请检查app_adcval1_timer_cb_handler()回调函数,它是向对等设备发送BLE通知的函数。
DEF_SVC1_ADC_VAL_1_CHAR_LEN是要通知的特征的长度——当然,长度应该根据您的需求而定。因此,请将它相应地设置到数据库中(user_custs1_def.h),并在user_update()中使用它。
设备在连接间隔期间发送的数据量取决于中央允许外设发送的数据包。使用标准MTU选择的每个数据包的有效负载为20字节。所以你发送的每个数据最多可以携带20个字节。你不能控制BLE在一个连接间隔内发送多少数据包,因为这取决于连接的主人。如果要发送超过20字节的数据,就必须增加MTU的大小。具体来说,设备可以通过空中发送的字节数受MTU (Maximum Transfer Unit)的限制,缺省情况下,MTU被限制在23字节,包括ATT层开销,因此有效负载是20字节。通过增加MTU大小,这意味着您可以通过空中发送更多字节。在你的情况下,最大的传输单元应该是你想发送的字节数+ 3个额外的字节。因此,您应该在user_config.h头文件中修改user_gapm_conf结构的.max_mtu。
在我们的支持门户上有一个类似的SW示例。这是下载链接-DA14585-DA14531动态DLE和L2CAP包大小优化
-这个例子旨在说明:
-如何做一个对等特性请求,以确定对等DLE能力
—如何请求DLE并利用较大的数据包来提高吞吐量
—L2CAP基本原理:报文利用率为100%
-非DLE设备的包优化
请参阅Readme文件以获取更多信息,该文件位于da14585-da14531-dynamic_dle_l2cap_packet_size_optimization\project_environment路径下。
这个示例与我们所有的SW示例一样,不包含SDK,所以在运行它之前,您应该将它链接到SDK6.0.14。你会在上面找到指示使用Python链接脚本设置软件示例文档。
然而,这个例子包含了一个以前SDK版本的旧python脚本——我将要求团队内部更改它。请按照以下步骤进行更换:
> python dlg_make_keil5_env_v2.000.py -sdkpath“”
例如:
> python dlg_make_keil5_env_v2.000.py -sdkpath " C: dev\6.0.14 "
PS:在你最初的帖子中将设备选择从DA14580更改为DA14531。
谢谢,PM_Dialog