Arduino в качестве монитора-отладчика sniffer I2C

Radist73
Offline
Зарегистрирован: 17.01.2013

Возможно ли написать скетч для Arduino Demilinove реализующий возможность перехватывать и отображать в окне терминала "трафик" шины I2C ???

С библиотекой Wire.h я ознакомился. примеры работы мастером и слейвом видел, разобрал, но непонимаю как перехвать и отображать все данные а не только с конкретным адресом.

Помогите пожалуйста разобраться ???

Спасибо !!!

maksim
Offline
Зарегистрирован: 12.02.2012

Возможно, но не билиотекой, вам нужно изучить протокол I2C, знать когда кто говорит/слушает и просто слушая линии "выплевывать" байты в сериал или куда вам надо.

Radist73
Offline
Зарегистрирован: 17.01.2013

а быстродействия Arduino хватит ???

Не подскажите где поискать какой нибудь пример или "полуфабрикат" ???

maksim
Offline
Зарегистрирован: 12.02.2012

Быстодействия думаю хватит, конечно нужно использовать внешние прерывания, погуглите, может кто уже делал.

leshak
Offline
Зарегистрирован: 29.09.2011

Можно еще поигратся с битом TWGCE в регистре TWAR (кажись это нулевой бит). Отвечающий за "бит разрешения обнаружения общего вызова". Но не уверен что это значит "ловить вызовы на любой адресс", очень вероятно что это именно "ловить широковещательные вызовы", то есть еще и мастер, при этом должен слать вызово на "широковещательный адресс 0". так что "я бы проверил это, авось повезет", но сильно бы не расчитывал. Тем более что даже если повезет, то мы "перехватим данные", но так и не узнаем "адресс получателя"

Далее, я-бы, не желая сильно вникать в I2C/TWI попробовал бы нагуглить что-то типа "arduino software i2c library". Если нашлась - лез бы в ее кишки, и смотрел где используется переменная-адресс. Искал бы if которым оно выясняет "нам или не нам сказали" - и выкинул его.

 

leshak
Offline
Зарегистрирован: 29.09.2011

Если же вам нужно слушать "что шлется" именно конкретному устройству, то можно попробовать просто привесится на его адресс и "слушать". сделать Wire.begin(XXX), XXX - адрес "кого пытаемся подслушать". Если не знаем этот XXX, то тупо перебором. Вариантов-то всего 127-мь возможных.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

leshak пишет:

Искал бы if которым оно выясняет "нам или не нам сказали" - и выкинул его.

Мне тоже пришла такая мысль. Еще заблокировать ответ и добавить запись в лог. Не забыв забуфферизировать эту канитель...

Radist73
Offline
Зарегистрирован: 17.01.2013

Это как вариант или проверенный способ ???

Адрес устройства неизвестен, но я думаю его можно получить, "вручную" расшифровав начальную посылку, хотябы с помошью осцилогафа.

Но не сойдёт ли с "ума" Master получив два ACK, да ещё и одновременно ?

Устройство одно, панель управления с кнопками, лампами, индикатором и прочим, по сути переферия Ввода-Вывода со своим МК. Он общается с главным модулем и его МК через I2C. Кто мастер а кто слейв непонятно. Задача подслушать обмен и научится управлять этой переферией пока  главный модуль и его МК "живы" и в случае его кончины, заменить его Ардуиной или другим МК.

leshak
Offline
Зарегистрирован: 29.09.2011

Radist73 пишет:

Это как вариант или проверенный способ ???

Ну я этим не занимался. Но если мы взяли програмную библиотеку, то я не вижу никаких препятсвий перепахать ее как нам нужно. Если мы выкинули проверки адресов, то что мешает выкинуть логику ответов? 

Ну прийдется конечно полазить, разобратся. Никто и не обещал что вам сейчас тут дадут точный список "где и что нужно выкинуть". Еще саму библиотеку нужно найти.

А вообще, непонятно, вы вообще гуглить пробовали? Я вот за 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...), было-бы желание.

 

Radist73
Offline
Зарегистрирован: 17.01.2013

leshak пишет:

Нe я этим не занимался. Но если мы взяли програмную библиотеку, то я не вижу никаких препятсвий перепахать ее как нам нужно. Если мы выкинули проверки адресов, то что мешает выкинуть логику ответов? 

IMHO эта библиотека параметрирует встроенный UART и один из параметров - это адрес слейва, который проверяется внутри МК а не в библиотеке или я не прав ????

leshak пишет:

Ну прийдется конечно полазить, разобратся. Никто и не обещал что вам сейчас тут дадут точный список "где и что нужно выкинуть". Еще саму библиотеку нужно найти.

Так я на это и не претендую.  Библиотека Wire.h описание есть, но в глубь её пока не копал. Спасибо за "пинок" в правильном направлении.

leshak пишет:

А вообще, непонятно, вы вообще гуглить пробовали? Я вот за 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...), было-бы желание.

Не поверите, неделю гуглю и читаю, но восновном на русскоязычных ресурсах т.к. заморскими язаками не владею. Большое спасибо за ссылки, ошибку понял, буду исправляться !!!

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

Radist73 пишет:
Нe я этим не занимался. Но если мы взяли програмную библиотеку, то я не вижу никаких препятсвий перепахать ее как нам нужно. Если мы выкинули проверки адресов, то что мешает выкинуть логику ответов? 

IMHO эта библиотека параметрирует встроенный UART и один из параметров - это адрес слейва, который проверяется внутри МК а не в библиотеке или я не прав ????

Ну, во первых, UART тут вообще никаким боком. UART это Serial, а не I2C. Это отдельный блок камня. Живет на других ногах, управляется другими регистрами.

Во вторых, встроенный I2C, это как раз и есть то что я имел ввиду "поигратся с битом TWGCE в регистре TWAR". Но слабые надежды.

"Выкинуть if, отвечающую логику" - обратите внимание что этот совет шел после  нагуглить что-то типа "arduino software i2c library". То есть найти библиотеку которая програмно, без использования аппаратного I2C работает. Естественно програмную реализацию "корежить под себя" намного легче чем аппаратную. Так что библиотеку wire - посмотреть стоит, но и искать ее софтовую реализацию - нужно (или самому написать, но тогда уж "прийдется основательно разобратся). Стандартная либа wire - работает с аппаратным. И в возможностях "изменить ее логику" - вы ограничены.

Но все это второстепенно. Так как легко гуглятся уже готовые проекты сниферов, где ломать голову не нужно.

Bagunda
Offline
Зарегистрирован: 04.04.2012

Кто-нибудь нашёл как снифферить I2C шину?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Bagunda пишет:

Кто-нибудь нашёл как снифферить I2C шину?

Снифить нужно непрерывно или достаточно будет однократно (несколько раз) непродолжительное время? То есть, для каких целей?

Bagunda
Offline
Зарегистрирован: 04.04.2012

Есть устройство. И к нему хочется подключиться и сделать его умнее.

Хочется выяснить все команды, которые можно подслушивать и посылать, чтобы потом обрабатывать на ардуине.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Цитата:

Хочется выяснить все команды, которые можно подслушивать и посылать, чтобы потом обрабатывать на ардуине.

Можно воспользоваться логическим анализатором. Например китайским клоном Saleae Logic, типа такого. С ним работает официальная утилита Saleae Logic. Там есть анализаторы различных сигналов, в том числе шины I2C.

Bagunda
Offline
Зарегистрирован: 04.04.2012

Jeka_M пишет:

спользоваться логическим анализатором. Например китайским клоном Saleae Logic, типа такого. С ним работает официальная утилита Saleae Logic. Там есть анализаторы различных сигналов, в том числе шины I2C.

Но у нас же есть ардуинки. Неужели нельзя на ней это сделать?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Bagunda пишет:

Но у нас же есть ардуинки. Неужели нельзя на ней это сделать?

я запретил.

Bagunda
Offline
Зарегистрирован: 04.04.2012

Клапауций 232 пишет:

я запретил.

Не понял. Что это значит? Или это просто сарказм?

nik182
Offline
Зарегистрирован: 04.05.2015

Посмотрите тему про тиньку 13 . Там как раз работающий софт и2с положили. Легко в снтффер переделать.

Bagunda
Offline
Зарегистрирован: 04.04.2012

nik182 пишет:
Посмотрите тему про тиньку 13

Что такое "тинька 13"? И где посмотреть?

nik182
Offline
Зарегистрирован: 04.05.2015
Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Bagunda пишет:

Клапауций 232 пишет:

я запретил.

Не понял. Что это значит? Или это просто сарказм?

если ты не знаешь, что это значит, то какой смысл тебе об этом знать?