Arduino в качестве монитора-отладчика sniffer I2C
- Войдите на сайт для отправки комментариев
Чт, 17/01/2013 - 01:54
Возможно ли написать скетч для Arduino Demilinove реализующий возможность перехватывать и отображать в окне терминала "трафик" шины I2C ???
С библиотекой Wire.h я ознакомился. примеры работы мастером и слейвом видел, разобрал, но непонимаю как перехвать и отображать все данные а не только с конкретным адресом.
Помогите пожалуйста разобраться ???
Спасибо !!!
Возможно, но не билиотекой, вам нужно изучить протокол I2C, знать когда кто говорит/слушает и просто слушая линии "выплевывать" байты в сериал или куда вам надо.
а быстродействия Arduino хватит ???
Не подскажите где поискать какой нибудь пример или "полуфабрикат" ???
Быстодействия думаю хватит, конечно нужно использовать внешние прерывания, погуглите, может кто уже делал.
Можно еще поигратся с битом TWGCE в регистре TWAR (кажись это нулевой бит). Отвечающий за "бит разрешения обнаружения общего вызова". Но не уверен что это значит "ловить вызовы на любой адресс", очень вероятно что это именно "ловить широковещательные вызовы", то есть еще и мастер, при этом должен слать вызово на "широковещательный адресс 0". так что "я бы проверил это, авось повезет", но сильно бы не расчитывал. Тем более что даже если повезет, то мы "перехватим данные", но так и не узнаем "адресс получателя"
Далее, я-бы, не желая сильно вникать в I2C/TWI попробовал бы нагуглить что-то типа "arduino software i2c library". Если нашлась - лез бы в ее кишки, и смотрел где используется переменная-адресс. Искал бы if которым оно выясняет "нам или не нам сказали" - и выкинул его.
Если же вам нужно слушать "что шлется" именно конкретному устройству, то можно попробовать просто привесится на его адресс и "слушать". сделать Wire.begin(XXX), XXX - адрес "кого пытаемся подслушать". Если не знаем этот XXX, то тупо перебором. Вариантов-то всего 127-мь возможных.
Искал бы if которым оно выясняет "нам или не нам сказали" - и выкинул его.
Мне тоже пришла такая мысль. Еще заблокировать ответ и добавить запись в лог. Не забыв забуфферизировать эту канитель...
Это как вариант или проверенный способ ???
Адрес устройства неизвестен, но я думаю его можно получить, "вручную" расшифровав начальную посылку, хотябы с помошью осцилогафа.
Но не сойдёт ли с "ума" Master получив два ACK, да ещё и одновременно ?
Устройство одно, панель управления с кнопками, лампами, индикатором и прочим, по сути переферия Ввода-Вывода со своим МК. Он общается с главным модулем и его МК через I2C. Кто мастер а кто слейв непонятно. Задача подслушать обмен и научится управлять этой переферией пока главный модуль и его МК "живы" и в случае его кончины, заменить его Ардуиной или другим МК.
Это как вариант или проверенный способ ???
Ну я этим не занимался. Но если мы взяли програмную библиотеку, то я не вижу никаких препятсвий перепахать ее как нам нужно. Если мы выкинули проверки адресов, то что мешает выкинуть логику ответов?
Ну прийдется конечно полазить, разобратся. Никто и не обещал что вам сейчас тут дадут точный список "где и что нужно выкинуть". Еще саму библиотеку нужно найти.
А вообще, непонятно, вы вообще гуглить пробовали? Я вот за 5-sec нашел. google: arduino i2c sniffer. Первая ссылка - на туториал по i2c в ардуине, вторая я же - одна из реализаций снифера http://www.johngineer.com/blog/?p=455
Думаю и еще найти можно (http://jdesbonnet.blogspot.com/2010/05/using-arduino-duemilanove-as-quic...), было-бы желание.
Нe я этим не занимался. Но если мы взяли програмную библиотеку, то я не вижу никаких препятсвий перепахать ее как нам нужно. Если мы выкинули проверки адресов, то что мешает выкинуть логику ответов?
IMHO эта библиотека параметрирует встроенный UART и один из параметров - это адрес слейва, который проверяется внутри МК а не в библиотеке или я не прав ????
Ну прийдется конечно полазить, разобратся. Никто и не обещал что вам сейчас тут дадут точный список "где и что нужно выкинуть". Еще саму библиотеку нужно найти.
Так я на это и не претендую. Библиотека Wire.h описание есть, но в глубь её пока не копал. Спасибо за "пинок" в правильном направлении.
А вообще, непонятно, вы вообще гуглить пробовали? Я вот за 5-sec нашел. google: arduino i2c sniffer. Первая ссылка - на туториал по i2c в ардуине, вторая я же - одна из реализаций снифера http://www.johngineer.com/blog/?p=455
Думаю и еще найти можно (http://jdesbonnet.blogspot.com/2010/05/using-arduino-duemilanove-as-quic...), было-бы желание.
Не поверите, неделю гуглю и читаю, но восновном на русскоязычных ресурсах т.к. заморскими язаками не владею. Большое спасибо за ссылки, ошибку понял, буду исправляться !!!
IMHO эта библиотека параметрирует встроенный UART и один из параметров - это адрес слейва, который проверяется внутри МК а не в библиотеке или я не прав ????
Ну, во первых, UART тут вообще никаким боком. UART это Serial, а не I2C. Это отдельный блок камня. Живет на других ногах, управляется другими регистрами.
Во вторых, встроенный I2C, это как раз и есть то что я имел ввиду "поигратся с битом TWGCE в регистре TWAR". Но слабые надежды.
"Выкинуть if, отвечающую логику" - обратите внимание что этот совет шел после нагуглить что-то типа "arduino software i2c library". То есть найти библиотеку которая програмно, без использования аппаратного I2C работает. Естественно програмную реализацию "корежить под себя" намного легче чем аппаратную. Так что библиотеку wire - посмотреть стоит, но и искать ее софтовую реализацию - нужно (или самому написать, но тогда уж "прийдется основательно разобратся). Стандартная либа wire - работает с аппаратным. И в возможностях "изменить ее логику" - вы ограничены.
Но все это второстепенно. Так как легко гуглятся уже готовые проекты сниферов, где ломать голову не нужно.
Кто-нибудь нашёл как снифферить I2C шину?
Кто-нибудь нашёл как снифферить I2C шину?
Снифить нужно непрерывно или достаточно будет однократно (несколько раз) непродолжительное время? То есть, для каких целей?
Есть устройство. И к нему хочется подключиться и сделать его умнее.
Хочется выяснить все команды, которые можно подслушивать и посылать, чтобы потом обрабатывать на ардуине.
Хочется выяснить все команды, которые можно подслушивать и посылать, чтобы потом обрабатывать на ардуине.
Можно воспользоваться логическим анализатором. Например китайским клоном Saleae Logic, типа такого. С ним работает официальная утилита Saleae Logic. Там есть анализаторы различных сигналов, в том числе шины I2C.
спользоваться логическим анализатором. Например китайским клоном Saleae Logic, типа такого. С ним работает официальная утилита Saleae Logic. Там есть анализаторы различных сигналов, в том числе шины I2C.
Но у нас же есть ардуинки. Неужели нельзя на ней это сделать?
Но у нас же есть ардуинки. Неужели нельзя на ней это сделать?
я запретил.
я запретил.
Не понял. Что это значит? Или это просто сарказм?
Посмотрите тему про тиньку 13 . Там как раз работающий софт и2с положили. Легко в снтффер переделать.
Что такое "тинька 13"? И где посмотреть?
http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=1...
я запретил.
Не понял. Что это значит? Или это просто сарказм?
если ты не знаешь, что это значит, то какой смысл тебе об этом знать?