你好,
使用iOS设备连接时,我有问题要交换MTU大小。我们开发了一个IOS应用程序与我们的设备连接。
iOS应用程序可以找到我的设备并连接它。我将我的设备配置为MTU为ATT\ U MAX\ U值(ATT\ U DEFAULT\ U MTU+1=24字节)的从设备。
请看我上面的源代码。
msg->操作= gapm_set_dev_config;
msg->role=GAP\u PERIPHERAL\u SLV;//设备角色
memset(msg-> irk.key,0,sizeof(struct gap_sec_key));
MSG->外观= 832;
msg->appearance\u write\u perm=GAPM\u write\u DISABLE;
msg-> name_write_perm = gapm_write_disable;
msg-> max_mtu = att_max_value;
msg-> con_intv_min = 0;
msg-> con_intv_max = 0;
msg-> con_latency = 0;
msg-> superv_to = 10000;
msg->标志= 0;
iOS设备可以在连接后读取512字节的MTU,但它本身只能发送默认大小的20字节。
After connection with the iOS app I get an connection request from the app and I send a confirm to the app. After the confirm I send also the GATT_EXC_MTU_REQ command.
请看我上面的源代码。
void gattc\u exc\u mtu\u命令(void)
{
struct gattc_exc_mtu_cmd * msg = bt_blemsgalloc(gattc_exc_mtu_cmd,
task_gattc,task_gtl,sizeof(struct gattc_exc_mtu_cmd));
消息->请求类型=GATTC\u MTU\u EXCH;
BT_BleSendMsg(msg);
}
In this link of the your forum there is descriped a similar problem and I had tried this.
http://support.dialog-semicondiondiondum/when-i-enable-notification-chara ...
But it doesn't work.
在Apple BluetoothDesignGuidelines 3.10和bluetooth core specification V4.0中,描述了MTU交换是可能的。
我的GATT\u EXC\u MTU\u REQ命令是源和目标id的正确命令吗?
Have you a example of exchange of the MTU size for iOS device? For example the DSPS app?
Do you have a idea what I'm doing wrong?
非常感谢。
向埃卡问好
嗨Ehanl,
你能用嗅探器检查一下命令是否被传送了吗?对于带iOS设备的exchange MTU,没有任何特定命令。您是在尝试集成的设计还是完全托管的实现。
谢谢mt_dialog.
你好,
I have an PAN1740 controlling with a EFM microcontroller over UART. I have flashed the OTP of the PAN1740 with the full_emb.bin file with smart snippets. Every thing like config as slave and advertise command are looking fine.
我没有蓝牙嗅探器。如果我的命令是通过UART发送到PAN1740,我可以用数字分析仪查看。有没有可能使用连接管理器和PAN1740开发软件狗来检查命令是否正确发送到这个位置?
我的Exchange mtu命令右一个尤其是源和目标ID?
谢谢你
当做
塞特
嗨Ehanl,
您发送的命令是正确的,我看起来有一个嗅探器,似乎命令被正确发送。命令管理器不支持Exchange MTU功能,它只使用默认的MTU。如果您认为这将有助于您定义问题,我可以为iOS发送DSPS源代码。
谢谢mt_dialog.
嗨mt_dialog,
thank your for your fast help.
是的,请将源代码发送到我的电子邮件地址。
也许我能找到一些解决问题的方法。
当做
Ehanl.
Hi MT_Dialog,
感谢您的帮助。
I have still the problem but the reason is perhaps a other one.
在我的应用程序中,我从客户端(iOS应用程序)向服务器(PAN1740)发送一个命令,然后开始流式传输数据。
这意味着服务器开始通过通知将连续数据发送到客户端。我设置了属性值,然后我使用gattc_send_evt_command将流数据发送到客户端。流数据始终是大约100个字节,但客户端只接收21个字节。
但是当我从客户机向服务器发送一个写请求,服务器发送一个写确认时,客户机得到100字节。
此外,我在从客户端获得连接请求后,请发送MTU Exchange命令,然后在发送连接确认之前。
通知价值有限吗?
如果客户端获取100个字节,则写入确认发送MTU大小必须超过默认值?否则客户端无法获得此数据大小?
你知道怎么了吗。
在这个论坛中,我读了几个问题,如我的问题,但没有找到解决方案。
非常感谢。
当做
Ehanl.
.
嗨Ehanl,
When you perform an MTU exchange both of the devices have to agree in the MTU they have to use, the host can either accept the request or reject it and continue using the minimum MTU of the two devices involved in the communication. The notification value is limited by the current MTU that has been arranged between the two devices. When you send a write request all the data that you send will go to the server regardless your MTU size.
谢谢mt_dialog.
嗨mt_dialog,
我找到了解决办法。我用#define MTU_MAX_VALUE(MTU_DEFAULT_VALUE+1)初始化config命令,即24-3 byte header=21 byte。我的iOS应用程序正好收到了这个21字节。我在数据表中看到,大于23字节的MTU大小会自动将MTU大小设置为512字节。但这是不对的。所以我将MTU大小设置为140字节,我的应用程序接收到140字节。现在这部分工作了,我得到了140字节的流数据。
但我只能流比我的奴隶与EFM和PAN1740挂起短的时间。我总是使用gatt\u set\u value\u req将140字节的数据加载到属性中。在此之后,我等待就绪事件gatt\u set\u value\u rsp,然后发送gattc\u send\u evt\u cmd并等待gattc\u cmp\u evt。如果这是好的,我开始新的。但是过了好几次,我没有得到gatt\u set\u value\u rsp或者我得到的是不完整的。流量控制怎么样?我用完整的_emb.bin文件来自PAN1740连接管理器的固件,但我不知道是否支持硬件流控制,以及哪些GPIO引脚用于RTS和CTS?我认为PAN1740有一个溢出,无法发送数据。
你能帮我解决问题吗?
我尝试了不同的事情,例如,每次我的应用程序挂起时都会慢慢地发送。
你有一个暗示我的暗示吗?
非常感谢。
当做
Ehanl.
如果DA14580因内存分配故障而崩溃,则可以尝试增加消息堆。由于您总是等待Gattc_cmp_evt,您已经实现了流量控制。
To set it to 4000 bytes, add this in da14580_config.h:
#define msg_heap_sz 4000.
你好,
但是,我将Pan1740的OTP与智能代码段和智能片段一起编制了Pan1740的OTP,并且当我理解你就必须更新堆大小,并且必须编译Bin文件新功能。但我没有full_emb.bin的源代码。还是有其他方法来做这件事吗?
是否也有办法更新PAN1740的OTP?
当做
Ehanl.
嗨Ehanl,
如果您正在使用任何proximity_ext implementations as your basic project you can use the prox_monitor_ext_usb or the prox_reporter_ext_usb. But what do you mean that the response is incomplete when you set the value?
谢谢mt_dialog.
嗨mt_dialog,
我可以使用这两个项目,你告诉我用连接经理来测试它吗?我试图用prox_monitor_ext_usb.hex文件闪存,我试图以中心或外设启动,但它不起作用。每次只能获得重置命令,没有完整的功能。我可以覆盖或更新OTP吗?或者我必须采取新的pan1740?我在哪里可以获得full_emb.bin的源代码?因为我的应用程序与此文件很好地运行。
有时没有命令或仅收到的部件,例如我收到msg_id,srcid,destId和什么。
我也试图只发送20个字节包,但我的应用程序也挂起。
更新:
我使用prox_monitor_ext_usb.bin文件和4000的msg_heap_size编程了一个新的pan1740的OTP,但我也没有在Connection Manager中的alpm_reset_cmd命令的回答。UART TX,RX引脚和波特率与full_emb.bin文件中的相同?
In the periph_setup.h file I found the defines for this.
#define uart1_tx_gpio_port gpio_port_0.
#定义UART1\U TX\U GPIO\U引脚GPIO\U引脚4
#定义UART1\U RX\U GPIO\U端口GPIO\U端口0
#define UART1_RX_GPIO_PIN GPIO_PIN_5
#ifndef cfg_rom.
#define uart_baudrate uart_baudrate_115k2
#else // cfg_rom.
#定义UART\U波特率UART\U波特率\U 460K8
#endif//CFG\u只读存储器
所以我认为这是相同的配置。
出什么事了?
当做
Ehanl.
嗨Ehanl,
是的,您可以将它们与连接管理器一起使用来测试它们。请遵循集成和外部处理器中的应用说明UM-B-010接近示例。您必须加载固件,然后运行monitor或reporter的windows应用程序。另外,请尝试以管理员身份从windows运行连接管理器。因为OTP是写的,所以你不能覆盖它,但是你可以试着通过按下重置按钮(重置后使用keil和program)将应用下载到系统内存中。你是说全套_emb.bin文件源代码位于连接管理器中,类似于邻近报告器(prox\u reporter\u ext)。就部分接收到命令或响应而言,您是否认为UART存在故障或问题?
谢谢mt_dialog.
Hi MT_Dialog,
现在我有一个带有proximity_reporter_ext bin文件的运行系统。我可以将其引导为外设并将我的应用程序与iOS应用浅蓝色连接。我还将堆大小设置为4000,但是当我开始流式传输时,我的设备也经过几次。我也有问题在用keil调试我的应用程序。在调试模式下,蓝牙不适用于此BIN文件,因为在我的UART接收缓冲区中,我有时无法为我的命令答案。这使得开发和测试我的申请更加困难。使用full_emb.bin文件我没有问题调试。我不知道是什么问题。
我不知道我的uart是否有问题。也许 吧。但我不知道在哪里。
Do you have a new idea?
当做
Ehanl.
Hi enhal,
你能用分析仪检查一下你的UART,看看是否出了问题吗?试着运行你的报告_外部项目使用keil并捕获来自主机的命令触发的处理程序,这可能会帮助您找到问题的解决方案。
谢谢mt_dialog.
Hi MT_Dialog,
好消息,在使用数字分析仪之后,我发现所有来自PAN1740的事件都在我的UART RX引脚接收到。但我对每个命令中消息id的缓冲区检查并不是逐字节的。我只比较了这个消息id的两个字节,当我的UART RX中断第一次出现LSB字节和下一个中断出现消息id的MSB时,它被拆分了,我没有找到id。现在我逐个字节检查输入缓冲区,它就工作了。
谢谢你的帮助。
当做
Ehanl.
嗨Ehanl,
很高兴你找到了它,谢谢你的表明。
Best Regards MT_dialog