设备在连接间隔期间发送的数据量取决于中心允许外设发送的数据包。使用标准MTU选择的每个数据包的有效负载为20字节。所以你发送的每个数据最多可以携带20个字节。你不能控制BLE在一个连接间隔内发送多少数据包,因为这取决于连接的主人。如果你想发送超过20字节的数据,你就必须增加你的MTU大小,那么L2CAP将取走剩余的部分,将数据切碎,并将它们放入多个包中。具体来说,设备可以通过空中发送的字节数受MTU (Maximum Transfer Unit)的限制,缺省情况下,MTU被限制在23字节,包括ATT层开销,因此有效负载是20字节。通过增加MTU大小,这意味着您可以通过空中发送更多字节。在你的情况下,最大的传输单元应该是你想发送的字节数+ 3个额外的字节。您应该修改user_config.h头文件的user_gapm_conf结构的.max_mtu。在此之后,为了与中央执行交换,您应该在有连接(在user_on_connection中)时发送GATTC_EXC_MTU_CMD, 580将执行交换。 There is no API implemented for the MTU exchange functionality, but you can use the snippet below:
嗨GGQ_in,
设备在连接间隔期间发送的数据量取决于中心允许外设发送的数据包。使用标准MTU选择的每个数据包的有效负载为20字节。所以你发送的每个数据最多可以携带20个字节。你不能控制BLE在一个连接间隔内发送多少数据包,因为这取决于连接的主人。如果你想发送超过20字节的数据,你就必须增加你的MTU大小,那么L2CAP将取走剩余的部分,将数据切碎,并将它们放入多个包中。具体来说,设备可以通过空中发送的字节数受MTU (Maximum Transfer Unit)的限制,缺省情况下,MTU被限制在23字节,包括ATT层开销,因此有效负载是20字节。通过增加MTU大小,这意味着您可以通过空中发送更多字节。在你的情况下,最大的传输单元应该是你想发送的字节数+ 3个额外的字节。您应该修改user_config.h头文件的user_gapm_conf结构的.max_mtu。在此之后,为了与中央执行交换,您应该在有连接(在user_on_connection中)时发送GATTC_EXC_MTU_CMD, 580将执行交换。 There is no API implemented for the MTU exchange functionality, but you can use the snippet below:
谢谢,PM_Dialog
嗨PM_Dialog,
当我试图改变MTU 276,我发现默认的属性值类型是uint8,限制其最大值255和512年未能达到最大值,所以我想自己写一个函数来更新属性值,但我不知道它的功能结构模型。如何使属性值的最大值更大?
我的主要目的是让580在1S内发送或读取至少10000B,同时忽略主从设备的低功耗。你有更好的计划或建议吗?
谢谢。
嗨GGQ_in,
你能指出你在哪里发现默认属性值类型是uint8吗?长特性的最大大小是512字节。DA14580上支持的MTU可以增加到512字节。但是与对端设备连接的MTU将是两个设备所支持MTU的最小值。在你的设置中什么是中心?是手机还是DA14580?
谢谢,PM_Dialog
嗨PM_Dialog,
我的中心设备是DA14580。
Attmdb_att_set_value (uint16_t句柄,att_size_t长度,uint8_t*值);
这个函数中的value参数是uint8_t指针,当我将#define DEF_TEST_LONG_VALUE_CHAR_LEN的值设置为大于255,并使用下面的函数设置属性值时,设备无法正常进行数据传输。外围设备的属性值随计时器的增加而增加,如下所示:
int i = 0;
空白ind_char_update_handler(空白)
{
if(i < (MAX_NUM_TRA - 1))
{
dis_temp[我]=(5 ');我+ +;
attmdb_att_set_value (test_env。shdl + TEST_IDX_LONG_VALUE_VAL), sizeof(dis_temp), (uint8_t*)&(dis_temp));
}
app_timer_set(sa_send,task_app,10);
}
有什么需要改进的地方吗?
谢谢。
嗨PM_Dialog,
谢谢你的回答。当我将UUID的长度更改为16位时,这个问题就解决了。
嗨GGQ_in,
很高兴你解决了你的问题,谢谢你接受我的回答。
谢谢,PM_Dialog