реклама на сайте
подробности

 
 
> 1-wire Accelerated ROM search, нужна помощь
Shivers
сообщение Nov 29 2011, 09:04
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Привет!
Кто работал с интерфейсом, помогите понять как работает алгоритм.

Прикрутил далласовскую корку 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 устройств)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Shivers
сообщение Dec 6 2011, 14:48
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Отличная подборка, спасибо!
У меня алгоритм в целом работает, но из N устройств стабильно находит только (N-1) : ) Пока не разобрался, почему так

p.s. статья с RS оказалась бесполезной, поскольку алгоритма Autodetect я там не обнаружил, а общение с датчиком (в качестве датчика у меня модифицированная модель из далласовской корки) у меня проходит на ура - и запись и чтение. Нужно только автодетект допилить, либо покупать на один датчик больше )))
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Dec 6 2011, 16:23
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Shivers @ Dec 6 2011, 17:48) *
Отличная подборка, спасибо!
У меня алгоритм в целом работает, но из N устройств стабильно находит только (N-1) : ) Пока не разобрался, почему так

p.s. статья с RS оказалась бесполезной, поскольку алгоритма Autodetect я там не обнаружил, а общение с датчиком (в качестве датчика у меня модифицированная модель из далласовской корки) у меня проходит на ура - и запись и чтение. Нужно только автодетект допилить, либо покупать на один датчик больше )))

А Вы обратили внимание, что сначала вызываается OWFirst, а потом OWNExt, Может у Вас только OWNext реализовано? Отличия то там только в инициализации переменных, а OWSearch вызывается один и тот же.
З.Ы. В терминах максимовской аппликухи.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016