1. про сам алгоритм напишу позже, приду домой посмотрю исходники :-) Коротко: каждый датчик с заданным периодом запрашивает время центрального узла. В момент отсылки сохраняет свое локальное время. Центральный узел при приеме запроса синхронизации просто отсылает в ответ свое текущее ("центральное") время. Датчик приняв ответ снова сохраняет свое локальное время и используя эти данные корректирует свое время. Как-то так.
2. про кварцы: в 1-ой итерации плат кварцы были похуже и наблюдался быстрый разбег частот, поэтому приходилось чаще синхронизироваться (примерно 1 раз в секунду), а вот во 2-ой кварцы использовали на порядок точнее и результат значительно лучше
3. да, учет дрейфа нужен что бы пореже синхронизироваться :-)