I am building a WSN has several peripherals (custom nRF51822) and one central device (PCA10031 in serialisation connected to a PC and using the nrf51-ble-driver_win_0.4.0 driver). Each peripheral runs an accurate timebase derived from Timer 1. Once all peripherals are connected to the central, I need to synchronise the timebase of all peripherals to an accuracy of +-1ms. The timebase of all peripheral had been tested to be very accurate over prolong periods.
The best (and easiest) way under non-BLE situations to synchronise the timebase of all connected peripherals is for the central to send a single synchronisation packet as a "broadcast" to the peripherals. The peripherals would respond and react to the packet, but will not reply/acknowledge.
At present I am using S110 for the peripherals and S120 for the central. The synchronisation packet is sent to each peripheral, one after another, with a suitable offset computed for each peripheral (central starts a high resolution timer, sends a synchronisation packet to one peripheral with offset 0, waits for BLE_EVT_TX_COMPLETE, sends a synchronisation packet to the next peripheral with the timer value as offset, and repeats the sequence until all peripherals received the synchronisation packet). Unfortunately due to the many layers of software involved (especially on the Windows side), I am only getting +-5ms accuracy at present. Note that I can easily get sub-1ms accuracy in non-BLE conditions (I have been developing WSN systems for over a decade).
Based on what I have read here (excellent source of information) and other sources, it seems that the potential way to do so is to use S130 on all devices. Before trying this potential route (I am unsure if it would work) which is likely tedious to implement (the Windows driver does not even support S130), I would like to know if there are other way(s) of sending a packet from the central that would be accepted by all peripherals? Would using the L2CAP work?
Thanks in advance.