Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
23
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь, когда вы извлекли флеш-память, можете запустить утили-

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

ту strings, чтобы приступить к просмотру информации или выполd-f-x chan

.c

 

 

 

.

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

нить дальнейший анализ с помощью таких инструментов, как bin-

 

 

 

 

 

 

walk. О тестировании безопасности­

микропрограмм будет подробно

 

 

 

 

 

 

рассказываться в главе 9.

 

 

 

 

 

 

 

 

 

 

 

I2C

I2C – это протокол последовательной связи для низкоскорост- ных устройств. Компания Phillips Semiconductors разработала I2C в 1980-х годах­ для связи между компонентами на одной печатной плате, но вы можете также использовать его между компонента- ми, соединенными кабелем. В мире интернета вещей вы часто най- дете его в микроконтроллерах, интерфейсах ввода/вывода,таких как клавиатуры и кнопки, обычных бытовых и корпоративных устрой- ствах,атакжедатчикахвсехтипов.Важноотметить,чтодажедатчики во многих промышленных системах управления (ICS) используютI2C, благодаря чему он получил большое распространение.

Основным преимуществом этого протокола является его про- стота. Вместо четырех проводов, которые использует SPI, I2C имеет двухпроводнойинтерфейс.Крометого,оборудованиебезвстроенной поддержки I2C может использовать I2C через контакты ввода/вывода общего назначения. Но его простота и тот факт, что все данные пере- даются по одной и той же шине,повышают риски,если злоумышлен- ник хочет перехватить данные или ввести свои собственные. Причи- на в том, что в устройствах IoT, использующих одну и ту же шину I2C, не предусмотрена аутентификация компонентов.

Как работает I2C

Простота I2C позволяет оборудованию обмениваться данными без строгихтребованийкскорости.Впротоколеиспользуютсятрилинии:

линия последовательной передачи данных (SDA) для передачи данных, последовательная линия синхронизации(SCL)для определения момен-

та считывания данных и линия заземления (GND). Линии SDA и SCL подключены к периферийным устройствам, и они представляют со- бой драйверы с открытым стоком: обе линии необходимо подклю- чить к резисторам. (Вам понадобится только один резистор для ка- ждойлинии,а не по одномудля каждого периферийного устройства.) Напряженияварьируютсямежду1,8,3,3и5,0В,апередачимогутпро- исходить с четырьмя разными скоростями: 100 кГц или начальной скоростью в соответствии со спецификациями I2C; 400 кГц–быстрый режим; 1 МГц – высокоскоростной режим и 3,2 МГц – сверхбыстрый режим.

Каки последовательныйпериферийныйинтерфейсSPI, I2C использу-

ет конфигурацию контроллера и периферии. Компоненты передают данныеполинииSDAбитзабитомввосьмибитныхпоследовательно-

SPI И I2C  235

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

стях.Контроллер или несколько контроллеров управляетлинией SCL.

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

Архитектура I

 

w

 

df-x chan

 

o

 

C поддерживает более одного контроллера и одно или

.

.c

 

2

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

несколько периферийных устройств – каждое с уникальными адре- сами, используемыми для связи. В табл. 8.2 показана структура сооб- щения, отправленного от контроллера к периферийному устройству.

Таблица 8.2.Сообщение I2C,отправленное на периферийное устройство через SDA

Адрес I2C

Бит

Данные

Данные

 

Старт (7 или 10 бит)

чтения/записи

БитACK/NACK (8 бит)

БитACK/NACK (8 бит)

Стоп

Контроллер начинает каждое сообщение с состояния шины START, которое сигнализирует о начале сообщения. Затем он отправляет адреспериферийногоустройства,которыйобычноимеетдлину7бит, но может иметь длину до 10 бит. Это позволяет использовать до 128 (при использовании 7-битных адресов) или до 1024 периферийных устройств (при использовании 10-битных адресов) на одной шине. Контроллер также добавляет бит чтения/записи, который указывает тип выполняемой операции. Бит ACK/NACK указывает, каким будет следующий сегмент данных. I2C делит фактические данные на вось- мибитные последовательности, каждая из которых заканчивается другим битом ACK/NACK. Контроллер завершает сообщение, фор- мируя состояние STOP. Для получения дополнительной информации о протоколе посетите https://www.i2c-bus.org/.

Как упоминалосьранее,протокол I2C поддерживаетнесколько кон- троллеров на одной шине. Это важно, потому что, подключившись к шине,мы могли бы действовать как другой контроллер,а затем чи- тать и отправлять данные на периферийные устройства.

В следующем разделе настроим нашу собственную архитектуру шины I2C.

Настройка архитектуры шины I2C типа «контроллер–периферия»

Чтобы продемонстрировать, как отслеживать обмен данными I2C и записывать данные на периферийные устройства на шине,давайте построим классическую архитектуру шины связи контроллера и пе- риферии с помощью следующего оборудования с открытым исход- ным кодом:

zzмикроконтроллера Arduino Uno ( https://store.arduino.cc/usa/ardui- no-uno-rev3/), который будет действовать в качестве контроллера шины;

zzодногоилинесколькихсветодиодовRGB,управляемых по I2C (https:

//www.sparkfun.com/products/8579/), – в качестве периферийных устройств.Полнуюдокументацию по светодиодам BlinkM,вклю- чаяпримерыдругихспособовихпрограммирования,вынайдете на странице https://thingm.com/products/blinkm/.

236  Глава 8

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мы решили использовать Arduino Uno, потому что аналоговые

 

 

 

 

 

m

 

 

w Click

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

выводы, которые Arduino использует для SDA и SCL, имеют встроенd-f-x chan

.c

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

ные резисторы,и нам не придется добавлять в схему подтягивающие

 

 

 

 

 

 

резисторы. Кроме того, это позволяет нам использовать официаль-

 

 

 

 

 

 

ную библиотеку Arduino Wire для управления шиной I2C в качестве

 

 

 

 

 

 

контроллера и отправки команд на периферийные устройства I2C.

 

 

 

 

 

 

В табл. 8.3 перечислены аналоговые выводы Arduino Uno, поддержи-

 

 

 

 

 

 

вающие I2C.

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 8.3.Контакты Arduino Uno для шины I2C

 

 

 

 

 

 

 

 

 

 

Аналоговый вывод Arduino

Вывод I2C

 

 

 

 

 

 

 

 

 

 

 

A2

GND

 

 

 

 

 

 

 

 

 

 

 

A3

PWR

 

 

 

 

 

 

 

 

 

 

 

A4

SDA

 

 

 

 

 

 

 

 

 

 

 

A5

SCL

 

 

 

 

 

 

 

 

 

 

 

Найдите контакты A2,A3,A4 и A5 на Arduino Uno, а затем подклю- чите к ним штекерные соединительные провода, как показано на рис. 8.7.

Рис.8.7.Аналоговые контакты расположены в правом нижнем углу Arduino Uno

Затем найдите контакты GND (–), PWR (+), SDA (d) и SCL (c) на све- тодиоде BlinkM, проверив метку в верхней части каждого ряда кон- тактов, как показано на рис. 8.8.

Теперь используйте макетную плату для подключения светодиода BlinkM и кабелей к соответствующим контактам платы Arduino, опи- раясь на данные табл. 8.4.

SPI И I2C  237

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.8.8.Контакты BlinkM GND,PWR,data и clock четко обозначены

Таблица 8.4.Подключения Arduino/BlinkM

Вывод Arduino Uno

Вывод BlinkM RGB LED

A2

(GND)

PWR–

A3

(PWR)

PWR +

 

 

A4

(SDA)

 

d (данные)

A5

(SCL)

 

c (тактовые импульсы)

На рис. 8.9 показаны эти соединения.

Рис.8.9.Мы можем соединить SDA и SCL без использования внешних резисторов, потому что выводы Arduino имеют встроенные резисторы

238  Глава 8

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если у вас более одного периферийного устройства I C,подключите

 

 

 

 

 

 

2

w Click

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

их к одним и тем же линиям SDA и SCL. Выберите одну соединительd-f-x chan

.c

 

 

 

.

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

ную линейку макетной платы для линии SDA и другую для линии SCL; затем подключите устройства к этим линиям.Например,рис.8.10 по- казывает два подключенных светодиода BlinkM. Светодиоды BlinkM одноготипа по умолчанию имеютодин итотже адрес I2C (0x09),кото- рыйявляетсяпрограммируемым,какуказановтехническомописании продукта,доступном по адресу https://www.infinite-electronic.kr/datasheet/ e0-COM-09000.pdf.(Этопоказывает,почемувсегданеобходимосверять- ся стаблицей данных при наличиитаковой; информация,которую вы найдете,можетсэкономитьвашиусилияпореверс-инжинирингу.При исследовании «черного ящика» наобум вам может и не повезти.)

Рис.8.10.Шина I2C поддерживает до 128 периферийных устройств с 7-битными адресами

Послеподключенияконтроллера(Arduino)ипериферийногоустрой- ства (светодиод BlinkM) запрограммируйте Arduino на подключение кшинеI2Cиотправкунекоторыхкомандпериферийнымустройствам. Мы будем использовать Arduino IDE для написания программы. Смо- тритеглаву7дляознакомлениясArduino,атакжеинструкциипоуста- новке. В среде IDE выберите плату Arduino, которую вы используете, нажав Tools > Board > Arduino/Genuino UNO (Инструменты > Плата > Arduino/Genuino Uno),а затем загрузите код из листинга 8.1.

Листинг 8.1. Код контроллера I2C, который будет управлять светодиодом BlinkM RGB

#include <Wire.h>

void setup() {

pinMode(13, OUTPUT); //Отключить встроенный светодиод Arduino pinMode(A3, OUTPUT); //Настроить вывод A3 как выход

SPI И I2C  239

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

pinMode(A2, OUTPUT); //Настроить A2 как выход digitalWrite(A3, HIGH); //A3 в качестве источника питания digitalWrite(A2, LOW); //A2 в качестве GND

Wire.begin(); // Использовать шину I2C в роли контроллера

}

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

byte x = 0;

void loop() {

Wire.beginTransmission(0x09);

Wire.write('c');

Wire.write(0xff);

Wire.write(0xc4);

Wire.endTransmission();

x++;

delay(5000);

}

Код настраивает контакты Arduino для связи по протоколу I2C , подключаетсяк шинеI2Cвкачествеконтроллераи,используяцикл, периодически отправляет сообщение периферийным устройствам с адресом 0x09 . Код сообщения содержит команды для включения светодиодов .Более подробные описания этих команд можно найти вспецификацииBlinkM.Наконец,кодотправляетпоследовательность STOP, чтобы указать конец сообщения . Теперь подключите Ardui- no Uno к компьютеру и загрузите свой код. Светодиоды BlinkM RGB должныполучатькомандыимигатьвсоответствиисними(рис.8.11).

Рис.8.11.Светодиоды BlinkM получают сигналы через I2C от Arduino Uno

240  Глава 8

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

 

 

BUY

 

 

2

C с помощью Bus Pirate

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

Атака на I

w Click

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

Давайте подключим Bus Pirate к нашей шине I2C и начнем прослуши- вать коммуникации.

Прошивка Bus Pirate имеет встроенную поддержку I2C.В немтакже есть несколько полезных макросов, которые мы можем использовать для анализа и атаки I2C-коммуникаций. Мы будем использовать сле- дующие выводы на Bus Pirate: COPI (MOSI), которые соответствуют выводу I2C SDA; CLK, который соответствует контакту SCL; и GND. Подключите эти три линии от Bus Pirate к шине I2C (табл. 8.5) с помо- щью соединительных кабелей.

Таблица 8.5.Подключения между Bus Pirate и шиной I2C

Bus Pirate / Макетнаяплата

COPI(MOSI) SDA

CLK SCL

GND GND

После того как все контакты будут подключены, подключите Bus Pirate к компьютеру. Чтобы взаимодействовать с Bus Pirate, вам не- обходимо подключиться к порту последовательной связи (COM), ис- пользуяскоростьпоумолчанию115200бод.ВLinuxсделайтеэтоспо- мощью утилит screen или minicom:

$ screen /dev/ttyUSB0 115200

В Windows откройте Диспетчер устройств, чтобы увидеть номер

COM-порта.

Затем используйте PuTTY с конфигурацией, показанной на рис. 8.12.

После настройки параметров порта в PuTTY нажмите Open (От- крыть). Теперь у вас должно быть установлено соединение.

Обнаружение устройств I2C

Чтобы перечислить все устройства I2C, подключенные к шине, ис- пользуйте библиотеку I2C Bus Pirate для поиска по всему адресному пространству. Это дает все подключенные микросхемы I2C, а также недокументированные адреса доступа. Начнем с настройки режима Bus Pirate с помощью команды m:

I2C >m

1.HiZ

2.1-WIRE

3.UART

4.I2C

5.SPI

6.2WIRE

SPI И I2C  241

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

7.3WIRE

8.LCD

9.DIO

x. exit(without change)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.8.12.Настройка PuTTY для подключения к Bus Pirate

Выберите 4, чтобы выбрать режим I2C, а затем установите желае- мую скорость:

(1)>4

Set speed:

1.~5KHz

2.~50KHz

3.~100KHz

4.~400KHz

(1)>4 Ready

Мы устанавливаем скорость4,что соответствуетпримерно 400 кГц, или быстродействию I2C, потому что на этой скорости работает конт­ роллер Arduino Uno. Библиотека I2C поддерживает два макроса. Пер- вый – макрос поиска адреса, который автоматически пробует каждый адрес I2C. Затем он ищет ответ, чтобы определить, сколько перифе- рийных устройств подключено и можете ли вы использовать какие-­

242  Глава 8

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

либо другие адреса, например широковещательные. Выполните мак­

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

рос, введя макрокоманду (1):

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

I2C >(1)

Searching I2C address space. Found devices at: 0x00(0x00 W) 0xFF(0x7F R)

Этот макрос отображает адреса, за которыми следует 7-битный адрес с битом, указывающим, предназначен ли адрес для чтения или записи.Вэтомслучаемывидимадреса0x00(W),широковещательный адрес BlinkM и адрес 0x7F, который принадлежит светодиоду BlinkM.

Анализ и отправка сообщений

Второй макрос, встроенный в библиотеку Bus Pirate I 2C, – это сниф- фер. Он отображает все последовательности START/STOP, биты ACK/ NACK и данные,совместно используемые через SPI и I2C 205 по шине I2C.Ещераз,намнужноперевестиBusPirateврежимI2C,выбратьско- рость, а затем выполнить макрос номер два, используя команду (2):

I2C >(2)

Sniffer

Any key to exit [0x12][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+]][0x12+0x63+]] [0x12+0x63+]][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+0xFF+0xC4+] [0x12+0xC6-0xFD-][0x12+0x63+0xFF+]]

Захваченные данные отображаются на экране в формате сообще- ния Bus Pirate для I2C, что позволяет нам скопировать и вставить со- общение, чтобы воспроизвести его при желании. В табл. 8.6 показан синтаксис, используемый Bus Pirate для представления символов I2C.

Таблица 8.6.Символы Bus Pirate,соответствующие компонентам сообщений I2C

Обозначения I2C

Обозначения Bus Pirate

Последовательность START

[ или {

Последовательность STOP

] или }

ACK

+

NACK

Убедитесь, что ваш сниффер работает правильно, сопоставив дан- ные сниффера с данными, отправленными Arduino Uno.

Теперь, чтобы отправить данные на любое из периферийных устройств на шине, введите сообщение непосредственно в пригла- шении Bus Pirate или скопируйте любое сообщение, которое хотите воспроизвести. Мы можем увидеть структуру команд для изменения цвета в трафике I2C и, просмотрев техническое описание светодиода,

SPI И I2C  243