你好,我需要从外设传输数据到中心,如果我在之前的数据传输完成之前把更多的数据放入缓冲区,系统会崩溃。所以我需要知道之前的数据是否传输了有什么功能可以让我这样做吗?或者可能检测到一个错误,让我停止传输更多的数据?
每次我把5个字节放入缓冲区,有没有其他方法可以让我传输更多的数据?比如一次将10个字节放入缓冲区?
非常感谢
便雅悯
嗨BenjaminDu,
由于您正在从外设向中心传输数据,我假设您正在使用通知(因为比指示更快,因为不需要等待来自主机的确认,以发送下一大批数据)。因此,为了获得先前数据已经传输的确认,你必须捕获send事件的确认,例如,为了发送一个通知你应该发出GATTC_SEND_EVT_CMD这消息应该作为响应GATTC_CMP_EVT(定制概要文件使用相同的方案的实施与CUSTS1_VAL_NTF_REQ自定义消息来发送通知和确认CUSTS1_VAL_NTF_CFM, implemeting上述方案)。关于缓冲区中的5个字节和设备崩溃,有了通知,你可以在同一个数据包上携带20个字节,然后你可以通过增加MTU大小(最大512字节)来扩展它。从你提到的其他东西是你的设备崩溃的原因,如果你可以跟踪代码结束的地方,当设备崩溃,它会有帮助,因为似乎很奇怪的传输5个字节和崩溃。
由于MT_dialog
嗨MT_dialog,
非常感谢你这么快就回复我。是的,我使用通知,你的意思是当传输结束时我可以得到GATTC_CMP_EVT消息吗?我可以找到几个GATTC_CMP_EVT,但我不知道应该使用哪个。附件是“crash”发生时的快照,你能帮我分析一下吗?我的分析(猜测)是,当我想把更多的数据放入寄存器(但我不知道为什么是“不能读”而不是“写”)时,20个寄存器已经满了。我想看看它们是不是空的,看看我能不能传输更多的数据。
感谢很多
是的,如上所述,对于您发送的每个通知消息,应该向您的应用程序指示一个GATTC_CMP_EVT。对于坠毁,据我显然可以从截图告诉你已经发送你的设备越来越脱离jlink那为什么你得到这些消息在凯尔和不是因为缓冲区溢出之类的(至少这是错误在凯尔表示)。此外,我看到您正在使用一个相当旧的参考设计(throughput_eval_peripheral项目)。我强烈建议改用最新的SDK,因为您使用的参考设计已经相当过时,而且不受支持。如果你有兴趣检查580的吞吐量能力,你应该检查DSPS参考设计。
我下载了最新的SDK,现在正在测试示例来熟悉它。我使用旧版本SDK的原因是,有一个很好的例子可以满足我的需求,我的应用程序有两个580频繁交换数据,我需要两个580连接,有时它们会睡着。我想知道你是否可以推荐更好的例子来满足我的需求。
如果您想测试吞吐量,您可以使用DSPS参考设计,该项目实现外围设备的一面和中央设备的一面,因此您可以检查它是否适合您。
我在iPad上安装了DSPS,但找不到在我的580上运行的目标示例。
因为我有两个580来交换数据,一个是CENTRAL,另一个是PERIPHERAL,我发现所有的例子都是关于PERIPHERAL的,有关于CENTRAL的例子吗?或者我需要一些配置?
谢谢便雅悯
DSPS文件夹包括sps_device文件夹和sps_host项目,第一个文件夹包括应用程序的外围部分,后者包括应用程序的中心部分。你可以使用文件夹中包含的项目sps_host作为中心,并使用另一个580作为演示,或者你可以使用android/ios应用程序作为中心。
嗨BenjaminDu,
由于您正在从外设向中心传输数据,我假设您正在使用通知(因为比指示更快,因为不需要等待来自主机的确认,以发送下一大批数据)。因此,为了获得先前数据已经传输的确认,你必须捕获send事件的确认,例如,为了发送一个通知你应该发出GATTC_SEND_EVT_CMD这消息应该作为响应GATTC_CMP_EVT(定制概要文件使用相同的方案的实施与CUSTS1_VAL_NTF_REQ自定义消息来发送通知和确认CUSTS1_VAL_NTF_CFM, implemeting上述方案)。关于缓冲区中的5个字节和设备崩溃,有了通知,你可以在同一个数据包上携带20个字节,然后你可以通过增加MTU大小(最大512字节)来扩展它。从你提到的其他东西是你的设备崩溃的原因,如果你可以跟踪代码结束的地方,当设备崩溃,它会有帮助,因为似乎很奇怪的传输5个字节和崩溃。
由于MT_dialog
嗨MT_dialog,
非常感谢你这么快就回复我。
是的,我使用通知,你的意思是当传输结束时我可以得到GATTC_CMP_EVT消息吗?我可以找到几个GATTC_CMP_EVT,但我不知道应该使用哪个。
附件是“crash”发生时的快照,你能帮我分析一下吗?我的分析(猜测)是,当我想把更多的数据放入寄存器(但我不知道为什么是“不能读”而不是“写”)时,20个寄存器已经满了。我想看看它们是不是空的,看看我能不能传输更多的数据。
感谢很多
嗨BenjaminDu,
是的,如上所述,对于您发送的每个通知消息,应该向您的应用程序指示一个GATTC_CMP_EVT。对于坠毁,据我显然可以从截图告诉你已经发送你的设备越来越脱离jlink那为什么你得到这些消息在凯尔和不是因为缓冲区溢出之类的(至少这是错误在凯尔表示)。此外,我看到您正在使用一个相当旧的参考设计(throughput_eval_peripheral项目)。我强烈建议改用最新的SDK,因为您使用的参考设计已经相当过时,而且不受支持。如果你有兴趣检查580的吞吐量能力,你应该检查DSPS参考设计。
由于MT_dialog
我下载了最新的SDK,现在正在测试示例来熟悉它。
我使用旧版本SDK的原因是,有一个很好的例子可以满足我的需求,我的应用程序有两个580频繁交换数据,我需要两个580连接,有时它们会睡着。我想知道你是否可以推荐更好的例子来满足我的需求。
嗨BenjaminDu,
如果您想测试吞吐量,您可以使用DSPS参考设计,该项目实现外围设备的一面和中央设备的一面,因此您可以检查它是否适合您。
由于MT_dialog
嗨MT_dialog,
我在iPad上安装了DSPS,但找不到在我的580上运行的目标示例。
因为我有两个580来交换数据,一个是CENTRAL,另一个是PERIPHERAL,我发现所有的例子都是关于PERIPHERAL的,有关于CENTRAL的例子吗?或者我需要一些配置?
谢谢
便雅悯
嗨BenjaminDu,
DSPS文件夹包括sps_device文件夹和sps_host项目,第一个文件夹包括应用程序的外围部分,后者包括应用程序的中心部分。你可以使用文件夹中包含的项目sps_host作为中心,并使用另一个580作为演示,或者你可以使用android/ios应用程序作为中心。
由于MT_dialog