2 Сергей Борщ: С двумя резисторами, как мне кажется - доминантного нуля не получится....без него коллизию или break не обнаружить если например два устройства тянут вверх и лишь одно - в ноль. Да и break - не удобно. Не все контролеры могут так слушать без использования PIO. Есть желание все-таки сделать доминантный ноль и отказаться от break:
1. Простой уарт всегда отловит отрицательный перепад и примет хотя-бы один байт при возникновении коллизии. Тогда простое сравнение CRC и длины посылки с тайм-аутом даст четкий признак коллизии.
2. Если "честное" устройство всетаки присутствует, то в процессе поиска можно заставлять его отдать первичный идентификатор, дать ему вторичный идентификатор и тем самым заставить молчать при повторном поиске устройств в том-же диапазоне.
Мне кажется, что достаточно просто ограничить потребление драйвера и один из пунктов сработает обязательно.
Спасибо за внимание. Жду критики.
Чуть не забыл. Мне тоже (кажется) придется поддерживать горячее включение. Так вот. Перед поиском широковещательно думаю стирать всем слейвам вторичный идентификатор. Сам алгоритм поиска думаю использовать как в M-Bus плюс - перезапрос всех, кто не получал вторичного идентификатора (типа не FF).
|