Здесь хорошее описание протокола 1-Wire
http://mypractic.ru/ds18b20-datchik-temperatury-s-interfejsom-1-wire-opisanie-na-russkom-yazyke.html
Не совсем хорошее.
По-моему, здесь применено решение типа"неразрушающий шинный арбитраж". Если ответ на каждый бит адреса одинаков от нескольких ведомых, ведущее устройство продолжает думать, что его кто-то слышит, и процесс запроса продолжается. В какой-то момент (если в сети действительно есть такой адрес) отвечать будет только один узел, он и ответит в итоге "за все". У ведущего есть возможность контролировать ответ на каждый бит, и если ответа нет, значит в сети нет таких адресов. Тогда он просто начинает опрос сначала, сразу выставляя "пройденный путь", а тот бит, при котором связь потерялась, инвертирует, чтобы изменить пространство поиска.
Алгоритм достаточно сложный, но вполне реализуемый. Если все так и обстоит на самом деле, готов помочь с отладкой, но на уровне С++.