你好,
我的应用程序有两个580,一个主机和从机我想这两个有时间同步,时间精度为0.01秒,最好是0.001S。
假设同步要求只适用于连接状态,你应该能够依靠结束连接事件发生的时间(可在rwble.c能检测到该事件 - 查找该文件中的BLE_EVT_END)。
/ mhv.
谢谢MT_dialog,
我研究过你的意见,这些天,我想主从BLE_EVT_END发生同步,我可以得到BLE_EVT_END双方发生后的时间,那么我就可以有时间同步。而BLE_EVT_END发生如此频繁,我无法找到双方,如何解决这个问题对应的事件?
非常感谢。
在BLE主从的BLE_EVT_END事件应尽量靠近syncronous,你可以得到。如果你想限制时同步发生,你可以实现一个GATT characterisitic你写,然后驱动逻辑同步以下事件的结束。该事件已被记录后,您可以在rwble.c右侧添加同步码(该行记录事件:arch_rwble_last_event = BLE_EVT_END; - 请注意,您在rwble.c找到这一行两次它们之中哪一个,实际上是执行要看你的电源优化设置)。有可能是事件触发在所述中心和所述事件触发上的周边之间的固定的时间延迟,但它会是小的,恒定的,并且因此可以进行补偿。
对使用的BLE_EVT_END的好处是,你将有大量的可用时间来管理同步算法。没有高优先级的IRQ将需要处理,直到下一个连接事件。
您可以使用该功能uint32_t的lld_evt_time_get(无效),以获得在625us为单位的当前时间。如果你需要比这更好的时机,你将不得不禁用休眠和使用SysTick定时器,可以提供低至1微秒精度。
请让我们知道,如果你设法实施建议的解决方案。我想,这个同步方案将与超音在测距/距离应用一起真的很强大。实施得当,你可以容易得到英寸或厘米甚至精确类型。
亲爱的MT_dialog,
非常感谢你的快速反应。
我的问题主要围绕如何“识别”从主从同一连接的相应BLE_EVT_END,因为该事件很快接踵而来,我不能区分不同BLE_EVT_END事件。
该应用程序是距离的应用程序,但不超声波测距。0.01秒的时间同步精度能满足我的应用需求,更好的同步是优选的,因为我并不需要重置同步,由于短时间使用时间的漂移,我将实施建议的解决方案,但现在我专注于如何“认'从两侧相应BLE_EVT_END。
再次感谢。
写入的特性,知道的连接间隔应该让你标记的连接。数据传输将发生在以下连接事件,因此将在服务器端接收(再次,有可能是一个偏移,但该偏移应该是恒定的)。客户端将收到确认时,数据已传输,服务器将收到的指示数据已经到达。
您好!我的问题是两个580主从时间同步的问题,如何才能确定主从的BLE_EVT_END为相对应的事件呢?因为BLE_EVT_END是在不停快速地重复出现,我不知道如何确定主从对应的事件。只有确定了主从相对应的BLE_EVT_END事件后才可以在事件发生后取得时间以同步。谢谢!
亲爱的MHv_Dialog,非常感谢你的答案。坦率地说,我是一个新手在这个领域,虽然我觉得你的答案可能是正确的,以我的问题,大量的研究后,仍然不知道该怎么办。
1.什么是确认和指示?BLE_EVT_END?或其他事件?2.Still我不知道如何标记连接,应该有一些事物的不同来区分的话,我想。
希望你不会是我的问题不耐烦。
嗨本杰明,
让我说,你已经着手开始做的并不简单:O)
但这里是我怎么会尽力实现它的核心。首先,在中央和周边两者使用app_on_connection事件重置全局计数器。然后,在rwble.c,发现两个地引用BLE_EVT_END(有本次活动的两个实现。哪一个运行取决于你使用“USE_POWER_OPTIMIZATIONS”的)。这两种实现方式有这样的一行:
arch_rwble_last_event = BLE_EVT_END;
此行之后,对中枢和外周,你可以增加您在app_on_connection事件重置如上所述的全局计数器。两个计数器,一个在中央/主,一个在外设/从机将同步运行,因为双方BLE事件在结束“几乎正是”同一时间(毫秒间隔) - 只要你不开始实施从延迟。计数器将是你粗略的时间。这会给你一个同步的主从,但粒度取决于连接的时间间隔(7.5ms最小)。为了实现更精细的粒度,你可以实现基于系统定时器计时罚款定时器(详见参考manaual)。此计时器应在每BLE_EVT_END复位,将允许你粒度减少到几微秒。注意,当唤醒设备系统定时器只会工作,所以当你醒着的罚款计时器才有效。
我希望有所帮助。我们都知道它是如何工作的。
/的Mikael
你好,我们又见面了,
我只是执行上面描述的概念,结果是有希望的。我使用的无代码项目为起点,改变rwble.c要切换的BLE_EVT_END一个GPIO高。然后我打开这个修改的无代码hexfile到两个开发工具包,并建立它们之间通过AT命令(见无代码文档)的连接。我用逻辑分析仪来monitot两个GPIO和我看到他们通过3US具有+/- 500ns的偏差偏移分离。在测距应用中使用声,500ns的相当于声音行进小于0.2mm。
将有次,其中从将错过从主传输(这就是RF的“美”),所以你需要做的事件之间的定时器的一些航迹推算,以过滤掉这些实例。但是,他们应该很容易被发现。
喜的Mikael,
我测试的方法,你送给我的,一般来说,这是一个很好的方法,能满足我的需求。我计划有更多的测试因为有问题,看到你这里有更多的信息,我先在这里把我的测试结果。我遇到的问题是,有大约1%的情况下的BLE_EVT_END不happend同步,无论是从主端或从侧面药膏,在最严重的情况下,不同步为0.5ms,而另外99%的情况下,同步是非常好的。我的应用程序,0.5ms的不同步是可以接受的,实际上,我可以找出asychronization,如果我想。我有更多的测试来看看它是真实的不同步,这是由于其他原因。
你刚才提到的“奴隶将错过从主传输”你的意思BLE_EVT_END不会对发生了什么?我曾担心这一点,但ACC。我的测试,这从来没有发生过。如果能theoritically发生或恩恩实际发生的,你已经找到了,我可以设法避免它的效果。
再次感谢你的Mikael。
很高兴听到你已经看到了结果。在RF的世界中,您偶尔会遇到其他流量阻止的频道,这导致“Miissing”连接事件。奴隶可能会错过主人的TX,并试图将其接收器保持一点时间。从奴隶不考虑才能结束,直到它超时,这导致ble_evt_end从奴隶的角度来看触发一点。事件仍然发生 - 但你实际上并不与主人同步。这很可能是你观察到的。关于右边的0.5ms。
嗨mhv_dialog,
非常感谢你的快速反应。还在为“奴隶将错过从主传输”,它的声音内容,有时可能会错过,而事件(BLE_EVT_END)绝不会错过(虽然偶尔可能会有一些延迟),换句话说,BLE_EVT_END总是发生在主机和从机对。
这是非常重要的,如果我想事件发生在成对的,而有时会有丢失事件单面(主机或从机),有可能是大问题。
我需要一个确认。如果从理论上讲,不会有任何丢失的事件或错过两侧,我会很放心。或者在理论上,将有单面可能失踪的事件,我需要在我的函数可以考虑一下。
谢谢。
我可以证实,总是会有双方的事件是相同的。从中央从属可能不会“听到”,但该事件还是会结束 - 尽管时间将被什么东西在半毫秒级错过。换句话说会有一些异常值,只要定时,但在主侧上的事件计数将总是与从属的。在你的情况,在1ms的精度是不够好,你真的没有过滤嘴的。
嗨MHv_Dialog,
我将使用功能uint32_t的lld_evt_time_get(无效)为你推荐来获得当前的时间,我发现这将是非常方便的对我来说,能够重置该定时器,没有任何功能可供我这样做?
可没有这样的功能,很遗憾。
嗨MHv_Dialog队,
在使用上述方法,我遇到了一个新问题。我用的,而不是“app_on_connection”(我的SDK是3.x中,我在SDK5.x没有例子,虽然我想用它)来重置全局计数器“app_connect_confirm”。后“arch_rwble_last_event = BLE_EVT_END”我在增加中央和周边如你所说的全局计数器,这个效果很好,直到我发现了新的问题。
问题是,如下:奴隶和主人,短的连接后一段时间内是几分钟,不再是像20分钟,在从一面,“app_disconnect_func”,从不能接收来自主信息的电话后,却“arch_rwble_last_event =BLE_EVT_END”可以在两侧仍处于以前的速度excuted,奴隶,但在主侧,速度从速度的15倍。
我的如下分析:该连接被打破,作为从不能接收来自主信息,但为什么在两侧,这些设备可以执行“arch_rwble_last_event = BLE_EVT_END”?
你能帮我一下以下?什么是可能振振有辞为什么“app_disconnect_func”被称为在从侧?我认为应该有两个设备没有坏连接的环境。由于这是明显的时间同步是不可能的,希望你能帮助我解决这个问题。
谢谢
嗨BenjaminDu,
是的,如果设备穿过app_disconnect_func,则连接断开时,BLE_EVT_END是一种状态,当设备是广告,而设备连接,它标志着一个BLE活动结束期间,你应该得到的。所以,你的设备丢失的连接,并将其与广告能够继续,那么你会得到从广告事件BLE_END_EVT。关于你得到断开,也有发生断线,断线可以从中央或外设本身进行初始化,如果外围出于某种原因不可用找师傅的设备可能会连接松动的原因很多指定的连接的时间间隔,或者因某种原因要么从设备的主被推延到发送时,或者当连接间隔时间到达接收。您可以通过在app_disconnect_func()时,设备以确定哪些580个报告,断线原因断开检查的原因下手。
谢谢mt_dialog.
嗨MT_dialog队,
如前所述,BLE_EVT_END总是发生在成对的主机和从机以及与计数器,活动结束后,时间可scynchronized。但计数器节目不同地在两侧如果设备中的一个是忙(例如:如果长时间或frquent定时器中断)
1.如何能这样呢,如果BLE_EVT_END总是成对出现在主机和从机发生2.任何其他方式来保持时间同步?
非常感谢本杰明
你好,
假设同步要求只适用于连接状态,你应该能够依靠结束连接事件发生的时间(可在rwble.c能检测到该事件 - 查找该文件中的BLE_EVT_END)。
/ mhv.
谢谢MT_dialog,
我研究过你的意见,这些天,我想主从BLE_EVT_END发生同步,我可以得到BLE_EVT_END双方发生后的时间,那么我就可以有时间同步。
而BLE_EVT_END发生如此频繁,我无法找到双方,如何解决这个问题对应的事件?
非常感谢。
在BLE主从的BLE_EVT_END事件应尽量靠近syncronous,你可以得到。如果你想限制时同步发生,你可以实现一个GATT characterisitic你写,然后驱动逻辑同步以下事件的结束。该事件已被记录后,您可以在rwble.c右侧添加同步码(该行记录事件:arch_rwble_last_event = BLE_EVT_END; - 请注意,您在rwble.c找到这一行两次它们之中哪一个,实际上是执行要看你的电源优化设置)。有可能是事件触发在所述中心和所述事件触发上的周边之间的固定的时间延迟,但它会是小的,恒定的,并且因此可以进行补偿。
对使用的BLE_EVT_END的好处是,你将有大量的可用时间来管理同步算法。没有高优先级的IRQ将需要处理,直到下一个连接事件。
您可以使用该功能uint32_t的lld_evt_time_get(无效),以获得在625us为单位的当前时间。如果你需要比这更好的时机,你将不得不禁用休眠和使用SysTick定时器,可以提供低至1微秒精度。
请让我们知道,如果你设法实施建议的解决方案。我想,这个同步方案将与超音在测距/距离应用一起真的很强大。实施得当,你可以容易得到英寸或厘米甚至精确类型。
/ mhv.
/ mhv.
亲爱的MT_dialog,
非常感谢你的快速反应。
我的问题主要围绕如何“识别”从主从同一连接的相应BLE_EVT_END,因为该事件很快接踵而来,我不能区分不同BLE_EVT_END事件。
该应用程序是距离的应用程序,但不超声波测距。
0.01秒的时间同步精度能满足我的应用需求,更好的同步是优选的,因为我并不需要重置同步,由于短时间使用时间的漂移,我将实施建议的解决方案,但现在我专注于如何“认'从两侧相应BLE_EVT_END。
再次感谢。
写入的特性,知道的连接间隔应该让你标记的连接。数据传输将发生在以下连接事件,因此将在服务器端接收(再次,有可能是一个偏移,但该偏移应该是恒定的)。客户端将收到确认时,数据已传输,服务器将收到的指示数据已经到达。
/ mhv.
您好!
我的问题是两个580主从时间同步的问题,如何才能确定主从的BLE_EVT_END为相对应的事件呢?因为BLE_EVT_END是在不停快速地重复出现,我不知道如何确定主从对应的事件。
只有确定了主从相对应的BLE_EVT_END事件后才可以在事件发生后取得时间以同步。
谢谢!
亲爱的MHv_Dialog,
非常感谢你的答案。
坦率地说,我是一个新手在这个领域,虽然我觉得你的答案可能是正确的,以我的问题,大量的研究后,仍然不知道该怎么办。
1.什么是确认和指示?BLE_EVT_END?或其他事件?
2.Still我不知道如何标记连接,应该有一些事物的不同来区分的话,我想。
希望你不会是我的问题不耐烦。
嗨本杰明,
让我说,你已经着手开始做的并不简单:O)
但这里是我怎么会尽力实现它的核心。首先,在中央和周边两者使用app_on_connection事件重置全局计数器。然后,在rwble.c,发现两个地引用BLE_EVT_END(有本次活动的两个实现。哪一个运行取决于你使用“USE_POWER_OPTIMIZATIONS”的)。这两种实现方式有这样的一行:
arch_rwble_last_event = BLE_EVT_END;
此行之后,对中枢和外周,你可以增加您在app_on_connection事件重置如上所述的全局计数器。两个计数器,一个在中央/主,一个在外设/从机将同步运行,因为双方BLE事件在结束“几乎正是”同一时间(毫秒间隔) - 只要你不开始实施从延迟。计数器将是你粗略的时间。这会给你一个同步的主从,但粒度取决于连接的时间间隔(7.5ms最小)。为了实现更精细的粒度,你可以实现基于系统定时器计时罚款定时器(详见参考manaual)。此计时器应在每BLE_EVT_END复位,将允许你粒度减少到几微秒。注意,当唤醒设备系统定时器只会工作,所以当你醒着的罚款计时器才有效。
我希望有所帮助。我们都知道它是如何工作的。
/的Mikael
你好,我们又见面了,
我只是执行上面描述的概念,结果是有希望的。我使用的无代码项目为起点,改变rwble.c要切换的BLE_EVT_END一个GPIO高。然后我打开这个修改的无代码hexfile到两个开发工具包,并建立它们之间通过AT命令(见无代码文档)的连接。我用逻辑分析仪来monitot两个GPIO和我看到他们通过3US具有+/- 500ns的偏差偏移分离。在测距应用中使用声,500ns的相当于声音行进小于0.2mm。
将有次,其中从将错过从主传输(这就是RF的“美”),所以你需要做的事件之间的定时器的一些航迹推算,以过滤掉这些实例。但是,他们应该很容易被发现。
/ mhv.
喜的Mikael,
我测试的方法,你送给我的,一般来说,这是一个很好的方法,能满足我的需求。我计划有更多的测试因为有问题,看到你这里有更多的信息,我先在这里把我的测试结果。
我遇到的问题是,有大约1%的情况下的BLE_EVT_END不happend同步,无论是从主端或从侧面药膏,在最严重的情况下,不同步为0.5ms,而另外99%的情况下,同步是非常好的。
我的应用程序,0.5ms的不同步是可以接受的,实际上,我可以找出asychronization,如果我想。
我有更多的测试来看看它是真实的不同步,这是由于其他原因。
你刚才提到的“奴隶将错过从主传输”你的意思BLE_EVT_END不会对发生了什么?我曾担心这一点,但ACC。我的测试,这从来没有发生过。如果能theoritically发生或恩恩实际发生的,你已经找到了,我可以设法避免它的效果。
再次感谢你的Mikael。
嗨本杰明,
很高兴听到你已经看到了结果。在RF的世界中,您偶尔会遇到其他流量阻止的频道,这导致“Miissing”连接事件。奴隶可能会错过主人的TX,并试图将其接收器保持一点时间。从奴隶不考虑才能结束,直到它超时,这导致ble_evt_end从奴隶的角度来看触发一点。事件仍然发生 - 但你实际上并不与主人同步。这很可能是你观察到的。关于右边的0.5ms。
/ mhv.
嗨mhv_dialog,
非常感谢你的快速反应。
还在为“奴隶将错过从主传输”,它的声音内容,有时可能会错过,而事件(BLE_EVT_END
)绝不会错过(虽然偶尔可能会有一些延迟),换句话说,BLE_EVT_END总是发生在主机和从机对。
这是非常重要的,如果我想事件发生在成对的,而有时会有丢失事件单面(主机或从机),有可能是大问题。
我需要一个确认。
如果从理论上讲,不会有任何丢失的事件或错过两侧,我会很放心。
或者在理论上,将有单面可能失踪的事件,我需要在我的函数可以考虑一下。
谢谢。
我可以证实,总是会有双方的事件是相同的。从中央从属可能不会“听到”,但该事件还是会结束 - 尽管时间将被什么东西在半毫秒级错过。换句话说会有一些异常值,只要定时,但在主侧上的事件计数将总是与从属的。在你的情况,在1ms的精度是不够好,你真的没有过滤嘴的。
/ mhv.
嗨MHv_Dialog,
我将使用功能uint32_t的lld_evt_time_get(无效)为你推荐来获得当前的时间,我发现这将是非常方便的对我来说,能够重置该定时器,没有任何功能可供我这样做?
谢谢。
嗨本杰明,
可没有这样的功能,很遗憾。
/ mhv.
嗨MHv_Dialog队,
在使用上述方法,我遇到了一个新问题。
我用的,而不是“app_on_connection”(我的SDK是3.x中,我在SDK5.x没有例子,虽然我想用它)来重置全局计数器“app_connect_confirm”。
后“arch_rwble_last_event = BLE_EVT_END”我在增加中央和周边如你所说的全局计数器,这个效果很好,直到我发现了新的问题。
问题是,如下:
奴隶和主人,短的连接后一段时间内是几分钟,不再是像20分钟,在从一面,“app_disconnect_func”,从不能接收来自主信息的电话后,却“arch_rwble_last_event =BLE_EVT_END”可以在两侧仍处于以前的速度excuted,奴隶,但在主侧,速度从速度的15倍。
我的如下分析:
该连接被打破,作为从不能接收来自主信息,但为什么在两侧,这些设备可以执行“arch_rwble_last_event = BLE_EVT_END”?
你能帮我一下以下?
什么是可能振振有辞为什么“app_disconnect_func”被称为在从侧?我认为应该有两个设备没有坏连接的环境。
由于这是明显的时间同步是不可能的,希望你能帮助我解决这个问题。
谢谢
嗨BenjaminDu,
是的,如果设备穿过app_disconnect_func,则连接断开时,BLE_EVT_END是一种状态,当设备是广告,而设备连接,它标志着一个BLE活动结束期间,你应该得到的。所以,你的设备丢失的连接,并将其与广告能够继续,那么你会得到从广告事件BLE_END_EVT。关于你得到断开,也有发生断线,断线可以从中央或外设本身进行初始化,如果外围出于某种原因不可用找师傅的设备可能会连接松动的原因很多指定的连接的时间间隔,或者因某种原因要么从设备的主被推延到发送时,或者当连接间隔时间到达接收。您可以通过在app_disconnect_func()时,设备以确定哪些580个报告,断线原因断开检查的原因下手。
谢谢mt_dialog.
嗨MT_dialog队,
如前所述,
BLE_EVT_END总是发生在成对的主机和从机
以及与计数器,活动结束后,时间可scynchronized。
但计数器节目不同地在两侧如果设备中的一个是忙(例如:如果长时间或frquent定时器中断)
1.如何能这样呢,如果BLE_EVT_END总是成对出现在主机和从机发生
2.任何其他方式来保持时间同步?
非常感谢
本杰明
嗨BenjaminDu,
谢谢mt_dialog.