Привет!
Кто работал с интерфейсом, помогите понять как работает алгоритм.
Прикрутил далласовскую корку 1-wire master к своему проекту на fpga, пытаюсь сделать алогоритм автоопределения. Для корки есть описание
Synthesizable 1-Wire Bus Master. Также нашел
app-note 137 с алгоритмом определения. Но, ничерта там не понял, уж очень мутная стейт машина нарисована, да еще и для битовых операций, а у меня корка сразу байт выплевывает за один проход.
Что представляет из себя мастер: это корка с набором команд и 8ми рарядной шиной данных. Для реализации одной итерации автоопределения, нужно подать корке команду сброса, затем перевести ее в режим автоопределения, после чего 16 раз записать байт с маской поиска, и считать 16 байт результата. После этого 16 полученных байт разбираются на определенный ID код (64бит) и некий результат, тоже 64 бит. Из результата надо сформировать маску для следующего запроса. Вроде просто, но как формировать эту маску?
Предположим, повесил я на шину 4 слэйва. Выставил код 0...0, получил ID code и результат - 0x0..18. Согласно гайду выделил старший разряд, получилось 0x0..10. Получил второй айдикод и 0x0..38. Опять взял старший бит, выставил 0x0..20, получил опять 0x0..18! Если же выставлять маску 0x0..08, получаю тот же айдикод что и с маской все нули. И вот тут у меня мозг сломался ... Может, ктонибудь обьяснит на пальцах алгоритм?
p.s. Сишный код тоже видел, для меня он нечитабелен, т.к. Си почти не знаю. Да и реализовать я автомат планировал, или простенькую программу на ассемблере со всеми ключевыми вычислялками на логике ПЛИС.
Спасибо!upd: вроде разобрался, нужно к старшему биту маски добавлять еще кусок последнего обнаруженного id кода. но полной победы не достигнуто, теперь определяются 7 из 8 устройств)