我希望DA14580每秒发送至少10KB的数据。它能做到吗?
现在我有一个250毫秒的定时读取间隔,通过将MTU更改为253,我可以在一秒钟内传输1000B,
你有更好的建议让580更快地发送数据吗?
谢谢
你好,GGQèin,
设备在连接间隔期间发送的数据量取决于中央允许向外围设备发送的数据包。使用标准MTU选择的每个数据包的有效负载为20字节。因此,您发送的每个数据最多可以携带20个字节。您无法控制BLE在连接间隔期间将发送多少数据包,因为这取决于连接的主节点。如果您想发送超过20字节的数据,则必须增加MTU大小,然后L2CAP将接收其余数据,将数据切碎并将其放入多个数据包中。具体地说,设备可以通过空中发送的字节数受到MTU(最大传输单元)的限制,默认情况下,MTU被限制在23个字节内,包括ATT层开销,因此有效负载为20个字节。通过增加MTU大小,这意味着您可以通过无线方式发送更多字节。在您的情况下,最大传输单位应该是您希望发送的字节数+3个额外字节。您应该更改user_config.h头文件的user_gapm_conf结构的.max_mtu。完成此操作后,为了执行与中央的交换,当您有连接(在用户连接上)且580将执行交换时,应发送GATTC_EXC_MTU_CMD。没有为MTU exchange功能实现API,但您可以使用以下代码段:
静态无效用户\u gattc_exc_mtu_cmd(uint8_tconidx){struct gattc_exc_mtu cmd*cmd=KE_MSG_ALLOC(gattc_exc_mtu cmd,KE_BUILD_ID(TASK_gattc,conidx),TASK_APP,gattc_exc_mtu cmd);cmd->->-req_type=gattc_mtu mtu EXCH;KE_MSG_send(cmd)})
谢谢,下午好
你好,下午对话,
当我尝试将MTU更改为276时,我发现默认的属性值类型是uint8,它将其最大值限制为255,但未能达到最大值512,因此我想自己编写一个函数来更新属性值,但我不知道它的功能结构原型。我该怎么做才能使属性值的最大值变大?
我的主要目的是让580在1s内发送或读取至少10000B,同时忽略主从设备的低功耗。你有更好的计划或建议吗?
您能指出您在哪里发现默认属性值类型是uint8吗?长特征的最大大小为512字节。DA14580上支持的MTU最多可增加512字节。但是,与对等设备连接的MTU将是两个设备支持的MTU中的最小值。您的设置中的中心是什么?它是一部手机还是另一部DA14580?
我的中心设备是DA14580。
attmdb_att_set_值(uint16_t句柄、att_大小_t长度、uint8_t*值);
此函数中的value参数是uint8_t指针,当我将#define DEF_TEST_LONG_value_CHAR_LEN的值设置为大于255并使用以下函数设置属性值时,设备无法执行正常的数据传输。外围设备中的属性值通过计时器增加,如下所示:
int i=0;
void ind\u char\u update\u处理程序(void){
如果(i<(最大数量-1)){dis_temp[i]=('5');i++;attmdb_att_set_值((test_env.shdl+test_IDX_LONG_值)、sizeof(dis_temp)、(uint8_t*)和(dis_temp));}
应用程序定时器设置(发送,任务应用程序,10);
}
有什么需要改进的吗?
谢谢你的回答。当我将UUID的长度更改为16位时,混淆就解决了。
很高兴你解决了你的问题,谢谢你接受我的回答。
你好,GGQèin,
设备在连接间隔期间发送的数据量取决于中央允许向外围设备发送的数据包。使用标准MTU选择的每个数据包的有效负载为20字节。因此,您发送的每个数据最多可以携带20个字节。您无法控制BLE在连接间隔期间将发送多少数据包,因为这取决于连接的主节点。如果您想发送超过20字节的数据,则必须增加MTU大小,然后L2CAP将接收其余数据,将数据切碎并将其放入多个数据包中。具体地说,设备可以通过空中发送的字节数受到MTU(最大传输单元)的限制,默认情况下,MTU被限制在23个字节内,包括ATT层开销,因此有效负载为20个字节。通过增加MTU大小,这意味着您可以通过无线方式发送更多字节。在您的情况下,最大传输单位应该是您希望发送的字节数+3个额外字节。您应该更改user_config.h头文件的user_gapm_conf结构的.max_mtu。完成此操作后,为了执行与中央的交换,当您有连接(在用户连接上)且580将执行交换时,应发送GATTC_EXC_MTU_CMD。没有为MTU exchange功能实现API,但您可以使用以下代码段:
谢谢,下午好
你好,下午对话,
当我尝试将MTU更改为276时,我发现默认的属性值类型是uint8,它将其最大值限制为255,但未能达到最大值512,因此我想自己编写一个函数来更新属性值,但我不知道它的功能结构原型。我该怎么做才能使属性值的最大值变大?
我的主要目的是让580在1s内发送或读取至少10000B,同时忽略主从设备的低功耗。你有更好的计划或建议吗?
谢谢
你好,GGQèin,
您能指出您在哪里发现默认属性值类型是uint8吗?长特征的最大大小为512字节。DA14580上支持的MTU最多可增加512字节。但是,与对等设备连接的MTU将是两个设备支持的MTU中的最小值。您的设置中的中心是什么?它是一部手机还是另一部DA14580?
谢谢,下午好
你好,下午对话,
我的中心设备是DA14580。
attmdb_att_set_值(uint16_t句柄、att_大小_t长度、uint8_t*值);
此函数中的value参数是uint8_t指针,当我将#define DEF_TEST_LONG_value_CHAR_LEN的值设置为大于255并使用以下函数设置属性值时,设备无法执行正常的数据传输。外围设备中的属性值通过计时器增加,如下所示:
int i=0;
void ind\u char\u update\u处理程序(void)
{
如果(i<(最大数量-1))
{
dis_temp[i]=('5');i++;
attmdb_att_set_值((test_env.shdl+test_IDX_LONG_值)、sizeof(dis_temp)、(uint8_t*)和(dis_temp));
}
应用程序定时器设置(发送,任务应用程序,10);
}
有什么需要改进的吗?
谢谢
你好,下午对话,
谢谢你的回答。当我将UUID的长度更改为16位时,混淆就解决了。
你好,GGQèin,
很高兴你解决了你的问题,谢谢你接受我的回答。
谢谢,下午好