你好,
使用iOS设备连接时,我有问题要交换MTU大小。我们开发了一个IOS应用程序与我们的设备连接。
iOS应用程序可以找到我的设备并连接它。我将设备配置为具有ATT_MAX_VALUE的MTU的从设备(ATT_DEFAULT_MTU + 1 = 24字节)。
看看上面的源代码。
msg->操作= gapm_set_dev_config;
msg->角色= gap_peripheral_slv;//设备角色
memset(msg-> irk.key,0,sizeof(struct gap_sec_key));
MSG->外观= 832;
msg-> sepose_write_perm = gapm_write_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;
在连接512字节的MTU之后可以读取iOS设备,但它本身只能发送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_exc_mtu_cmd(void)
{
struct gattc_exc_mtu_cmd * msg = bt_blemsgalloc(gattc_exc_mtu_cmd,
task_gattc,task_gtl,sizeof(struct gattc_exc_mtu_cmd));
msg-> req_type = gattc_mtu_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和蓝牙核心规范V4.0中描述了MTU交换。
是我的gatt_exc_mtu_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?
谢谢你。
关于Eckart.
嗨Ehanl,
您可以检查嗅探器以验证传输命令是否?使用iOS设备交换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.
我没有蓝牙嗅探器。如果我的命令发送到PAN1740,我可以使用数字分析仪查找。是否有可能使用Connection Manager和Pan1740 Development Dongle查看该命令是否已发送给此命令?
我的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字节标题= 21字节。我的iOS应用程序收到了这21个字节。我在数据表中读取,MTU大小延迟超过23字节将MTU大小自动设置为512字节。但那是不对的。所以我将MTU大小设置为140字节,我的应用程序收到140个字节。现在,这部分有效,我获得了140字节的流数据。
但我只能在短时间内漫步而不是我的奴隶与efm和pan1740挂起。我始终使用gatt_set_value_req将我的140字节数据加载到我的属性。在此之后,我等待Ready事件gatt_set_value_rsp,然后我发送gattc_send_evt_cmd并等待gattc_cmp_evt。如果这是好的,我开始新。但经过几次我没有得到gatt_set_value_rsp,或者我得到了不完整。什么关于流量控制?我使用Fullud_emb.bin固件从Connection Manager for Pan1740,但我不知道是否支持硬件流控制,并且RTS和CTS使用哪种GPIO引脚?我认为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.
#define uart1_tx_gpio_pin gpio_pin_4.
#define uart1_rx_gpio_port gpio_port_0.
#define UART1_RX_GPIO_PIN GPIO_PIN_5
#ifndef cfg_rom.
#define uart_baudrate uart_baudrate_115k2
#else // cfg_rom.
#define uart_baudrate uart_baudrate_460k8
#endif // cfg_rom.
所以我认为这是相同的配置。
什么问题?
问候
Ehanl.
嗨Ehanl,
是的,您可以使用连接管理器使用它们来测试它们。请按照App Note UM-B-010接近集成和外部处理器的接近示例。您必须加载固件,然后运行监视器或记者的Windows应用程序。另外请尝试从Windows运行Connection Manager作为管理员。由于OTP写入,您无法通过覆盖它,但您可以尝试通过按RESET按钮将应用程序下载到SYSRAM(在重置后使用KEIL和Program)。您的意思是full_emb.bin位于Connection Manager中,源代码类似于Proximity Reporter(Prox_Reporter_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运行proximity_reporter_ext.proj并捕获从主机的命令触发的处理程序可能会帮助您找到解决问题的解决方案。
谢谢mt_dialog.
Hi MT_Dialog,
好消息我在使用数字分析仪后发现了问题,我发现Pan1740的所有事件都接收到我的UART RX引脚。但我的缓冲区检查每个命令中的消息ID不是字节字节的字节。我只比较这条字节的这个消息ID,并且当我的UART RX中断时第一次出现LSB字节和下一个中断消息ID的MSB,它是拆分,我没有找到ID。现在,我检查字节的行为缓冲区字节,它有效。
谢谢您的帮助。
问候
Ehanl.
嗨Ehanl,
很高兴你找到了它,谢谢你的表明。
Best Regards MT_dialog