Теперь думаю так:
1. При включении слейв имеет вторичный идентификатор FF. Ток "единицы" ограничен у всех устройств либо резистором по питанию либо последовательно в линию "А" (если нулю соответствует B+ и A-, то B+ одного устройства перетягивает А+ других). 2. Мастер говорит: Все, у кого (например двухбайтный уник. адрес) с маской FFFF совпадает с оным - отвечайте...если есть - отвечают все. В ответе - полная галиматья, но (думаю) со стопроцентной вероятностью есть отрицательный перепад, старт-признак то есть. Frame Error никто не отменял. Мастер видит, что есть как минимум битый (stop-bit !=1) байт, а значит - устройства ЕСТЬ. 3. Мастер говорит: Все, у кого адрес с маской 0FFF есть тот-же адрес - отвечайте. Пусть есть три устройства: 1234, 1244 и 1355. Никто не отвечает. 4. Мастер приращает старший полубайт до 1. - Все отвечают. Опять галиматья. Но признак есть. 4. Повторяем, перебирая младший полубайт старшего байта адреса от нуля вверх, оставляя в старшем 1. 5. Дошли до 12 в старшем байте. Отвечают первый и второй. Коллизия 6. Говорим 120F - никого....продолжаем до 123F. отвечает первый. Отвечает именно полным адресом плюс CRC. Видим, что все в порядке по длине и по CRC - говорим ему, что у него есть вторичный идентификатор 0. 7. Повторяем последний запрос с маской 12FF. Отвечает 1244 полным адресом с CRC. А первый не отвечает, так как у него есть вторичный идентификатор. 8. Повторяем последний запрос с маской 12FF. Никто не отвечает. Даже стартового перепада нет. 9. Генерим маску 13FF. Последний отвечает. 10. Повторяем 13FF. Никто не отвечает 11. Маска 14FF - ни одного. Продложаем до 1EFF - никого. 12. Маски остались только 2FFF - по EFFF...
Вроде так я себе это представляю. Мож где ошибся? Критика?
|