Сегодня мы познакомимся с интересным протоколом и даже сразу попробуем поработать с устройством, использующим этот протокол. «Как?» — спросите Вы – «мне не нужно будет покупать детали в радиомагазине?»
«Нет» — отвечу я :) С большой долей вероятности, Вы пользуетесь устройством 1-Wire и, возможно, даже не догадываетесь об этом :) Это всего-навсего – ключ-таблетка от домофона ()!
Неужели?
Достанем ключи из кармана и примемся их пристально разглядывать :)
У меня контактная площадка сильно затёрта, но какие-то надписи проглядывают.
Потёр площадку фломастером и становится видна заветная надпись:
Ага! 1-Wire!
Так что же это за интерфейс?
Это однопроводной интерфейс, разработан фирмой Dallas Semiconductor (ныне MAXIM) в конце 90-х годов.
Этот интерфейс интересен тем, что для двустороннего обмена требуется всего одна линия! (отсюда и название :)
Подробнее об интерфейсе .
Возвращаемся к нашему ключу :) На самой таблетке указан тип устройства и, похоже, уникальный номер микросхемы ;)
DS1990A – это и есть название нашего устройства.
Смотрим
Наш ключ — это самая первая модель в списке :) DS1990A — 64 Bit ID — уникальный серийный номер-ключ
Страничка этого ключика , а можно скачать датащит ;)
Число после # определяет форм-фактор ключа – у меня F5.
Итак, наш ключ хранит 64 бита уникальной информации
Питается от 2.8V до 6.0V
К центральной контактной площадке подключается линия данных, а к боковой каёмке – землю.
Ключ может работать в диапазоне температур от -40°C до +85°C – впрочем, это нам не нужно :)
Читаем датащит далее :)
Величина подтягивающего резистора рекомендуется в 2.2k
Так… запомним :)
Каждый DS1990A прошивается уникальным 64-битным номером
первые 8 бит — номер серии устройства (01h)
следующие 48 бит — уникальный серийный номер
последние 8 бит — CRC-код предыдущих 56 бит информации :)
(Cyclic redundancy code, — циклический избыточный код) — способ цифровой идентификации некоторой последовательности данных, который заключается в вычислении контрольного значения её циклического избыточного кода.
Далее в датащите перечислены команды, которые понимает ключ: 33h — считать ROM — команда позволяет считать заветные 64-бита данных ключа F0h — поиск ROM — т.к. к сети 1-wire может быть подключено несколько устройств данная команда используется для идентификации подключённых устройств. 55h — соответствие ROM / CCh — пропуск ROM
— данные команды входят в минимальный набор необходимых команд 1-wire-устройств. Т.к. в ключе DS1990A эти команды не требуются — он на них не отвечает.
Arduino//Freeduino может работать с 1-Wire, используя библиотеку Jim Studt-а – .
Настало время пообщаться с нашим ключиком! :)
Схема подключения – крайне проста (это ведь 1-Wire! :)
Далее нужно и поместить её в свою директорию libraries.
Код скетча:
#include <OneWire.h>
/*
* тестируем работу по 1-Wire с ключём-таблеткой DS1990A
*/
OneWire ds(10); // на digital pin 10
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("No more addresses.\n");
ds.reset_search();
return;
}
Serial.print("R=");
for( i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
Serial.print(" ");
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if ( addr[0] != 0x01) {
Serial.print("Device is not a DS1990A family device.\n");
return;
}
Serial.println();
ds.reset();
delay(1000);
}
Происходит постоянный поиск устройств на линии 1-Wire. Пока ключ не подключён – выдаётся:
No more addresses.
При подключении ключа-таблетки – считывается её номер и выдаётся в COM-порт.
Например, вот что выдаётся при подключении ключа-таблетки, с которого начиналась эта статья:
Первая цифра – номер серии – 01h
Далее, как видим, действительно ключ хранит номер, нанесённый на своём корпусе ;)
Только этот номер выведен наоборот – как и положено по протоколу 1-Wire – начиная с младшего байта ;)
Последний байт –B6h — CRC-код предыдущих байт.
Ура! Вот мы и считали наш ключ :)
Теперь можно самостоятельно сделать замок для комнаты или разблокировать свой компьютер по ключу :) Фантазируем :)
Читать далее:
Cсылки на материалы:
— данная замечательная статья использовалась при написании заметки об интерфейсе 1-Wire
я об этом напишу в следующей статье :) но сразу хочу анонсировать, что обычный брут-форс не получится :(
однако, на некоторых домофонах есть другая возможность ;)
Почемуто после создания папки libraries и копирования в неё папки с библиотекой OneWire выдает ошибку
21: error: OneWire.h: No such file or directory In function 'void loop()':
Если же в #include прописать полный путь #include <C:\\arduino-0017\lib\OneWire\OneWire.h>
Выдает ошибку
C:\DOCUME~1\snk\LOCALS~1\Temp\build2355.tmp/_1wire.cpp:46: undefined reference to `OneWire::reset()'
Ещё вопрос почему в serial monitor пишет чтото вроде
R=0 0 0 0 0 0 0 0 Device is not a DS1990A family device.
R=0 0 0 0 0 0 0 80 CRC is not valid!
R=0 0 0 0 0 8 0 40 CRC is not valid!
Причина может быть в том, что вместо 2,2 ком взял 2 ком?
В какое именно зазмление на плане arduino нужно втыкать провод?
У меня почти также пишет:
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
но для разных ключей разные цифры. такое ощущение что он ключ видит, но почемуто считает его неправильным.
Комментарии (9)
RSS свернуть / развернутьjbrain
admin
Oboroten
однако, на некоторых домофонах есть другая возможность ;)
admin
21: error: OneWire.h: No such file or directory In function 'void loop()':
Если же в #include прописать полный путь #include <C:\\arduino-0017\lib\OneWire\OneWire.h>
Выдает ошибку
C:\DOCUME~1\snk\LOCALS~1\Temp\build2355.tmp/_1wire.cpp:46: undefined reference to `OneWire::reset()'
Подскажите что делать?
snicksnk
noonv
R=0 0 0 0 0 0 0 0 Device is not a DS1990A family device.
R=0 0 0 0 0 0 0 80 CRC is not valid!
R=0 0 0 0 0 8 0 40 CRC is not valid!
Причина может быть в том, что вместо 2,2 ком взял 2 ком?
В какое именно зазмление на плане arduino нужно втыкать провод?
snicksnk
В землю — в любую — они гальванически связаны.
noonv
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
R=1 5D 9B 9 B 0 0 CC Device is not a DS18S20 family device.
но для разных ключей разные цифры. такое ощущение что он ключ видит, но почемуто считает его неправильным.
mogalkov
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.