设备在连接间隔期间发送的数据量取决于中央允许发送外围设备的数据包。具有标准MTU选择的每个数据包的有效载荷为20字节。所以您发送的每个数据都可以载有20个字节。您无法控制BLE在连接间隔期间发送的数据包数量,因为达到连接的主站。如果您想发送超过20个字节的数据,您必须增加MTU大小,那么L2CAP将采取其余的,切断数据并将其符合多个数据包。具体地,设备可以通过空中发送的字节数由MTU(最大传输单元)限制,默认情况下MTU受限于包括ATT层开销的23个字节,因此有效载荷是20个字节。通过增加MTU大小,意味着您可以通过空中发送更多字节。在您的情况下,最大传输单元应该是您想要发送+ 3额外字节的字节数。您应该更改user_config.h头文件的user_gapm_conf结构的.max_mtu。在此之后,为了执行与中央的交换,您应该在具有连接时发送GattC_EXC_MTU_CMD(在USER_ON_CONNECTIONCE)中,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(最大传输单元)限制,默认情况下MTU受限于包括ATT层开销的23个字节,因此有效载荷是20个字节。通过增加MTU大小,意味着您可以通过空中发送更多字节。在您的情况下,最大传输单元应该是您想要发送+ 3额外字节的字节数。您应该更改user_config.h头文件的user_gapm_conf结构的.max_mtu。在此之后,为了执行与中央的交换,您应该在具有连接时发送GattC_EXC_MTU_CMD(在USER_ON_CONNECTIONCE)中,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 *值);
此函数中的值参数是uint8_t指针,当我将#define def_test_long_value_car_len的值设置为大于255并使用以下功能设置属性的值时,设备无法执行正常数据传输。值定时器的外围设备中的属性如下:
INT I = 0;
void ind_char_update_handler(void)
{
if(i <(max_num_tra-1)))
{
dis_temp [i] =('5'); i ++;
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.