Страница 1 из 21
Копировщик RFID-ключей T5557
Добавлено: Вс июл 24, 2016 11:18:54
da-nie
Получил я тут ключи от квартиры с одним брелоком от домофона. Желающие сделать копии - добро пожаловать на рынок. 250 р. за копию. Нет, мы так не играем.

Заготовка ключа T5557 стоит 27 рублей в Чип и Дип. Осталось сделать копировщик. Поискал я по инету схемы и программы и собрал свою из различных кусочков.
Итак, что было использовано:
1) Аналоговая часть взята у RECTO (
http://kazus.ru/forums/showthread.php?t=67407 ). Как контроллер у него считывает сигнал модуля RFID пришлось догадаться (с помощью компаратора). Оказывается, этот метод дребезга сигнала не вызывает. А я сперва думал, что нужно как-то вычитать сигналы двух входов друг из друга.

Оказалось, всё проще.
2) Код расшифровки кода карточки (да, мне лень было писать свой, так как ещё неизвестно, что вообще выдаёт аналоговая часть, я ,например, там девять единиц на осциллографе в упор не увидел, хотя они там были, да и вообще, методом проб и ошибок оказалось, у меня сигнал компаратора перевёрнут) я взял у ShadS (
http://forum.easyelectronics.ru/viewtop ... 5b#p352328 ). Там нет ничего сложного, если, конечно знать, что устройство работает.

3) Код записи ключа я взял у BolshoyK (
http://kazus.ru/forums/showthread.php?t=101565 ) - в английском языке я не силён (я учил немецкий), так что понять документацию на T5557 мне не так просто.
Всем вышеперечисленным большущее от меня спасибо!

Они существенно ускорили процесс разработки (всё было сделано за 2 дня

)
Итак, что у меня получилось. Устройство работает на Atmega8 и подключается к компьютеру по COM-порту, скорость 9600 бод. Протокол обмена с байтстаффингом (он описан в файлах для микроконтроллера). В интерфейсе программы две кнопки: считать ID и записать ID. Код карты выдаётся в шестнадцатеричном виде. Всего код карты состоит из 4 байт, но они снабжаются пятым (там сначала идёт какой-то идентификатор - не заморачивался с запоминанием его смысла). Протокол кодирования RFID весьма простой и описан в вышеприведённых ссылках.
Контур с катушкой нужно настроить в резонанс на 125 кГц. Для этого нужно включить чтение ID карты и добиться максимального напряжения в точке "НАСТРОЙКА", изменяя количество витков катушки (что проще) или ёмкость конденсатора (что сложнее). У меня там вышло около 40 В.
Схема копировщика:
В архиве есть схема в хорошем качестве, печатка, прошивка, программа для работы с устройством и все исходники (для WinAVR и MS VisualStudio 6).
Ну вот, в принципе, и всё. Если найдёте какую-либо ошибку - сообщайте. Я вполне мог что-то пропустить или где-то ошибиться.
Re: Копировщик RFID-ключей T5557
Добавлено: Вс июл 31, 2016 13:49:27
da-nie
Нашёл небольшую ошибочку - к CRC при обмене по UART не применил байтстаффинг.

На некоторых данных команда или ответ не собирались.
Новая программа:
P.S. Вообще говоря, я добавил дисплей от Siemens C-75 (зелёный текстолит), но лень приводить схему. А программа (всё подключение дисплея в h-файле есть) для дисплея в комплекте.
Вот как без компьютера работает:
https://www.youtube.com/watch?v=ONqSsbdVCqM
Re: Копировщик RFID-ключей T5557
Добавлено: Вс сен 18, 2016 10:48:06
da-nie
А никто не знает протокол записи EM4305? В чём его отличие от T5557? По даташиту на EM4305 с моим знанием английского протокол записи я в упор не вижу, как реализован.

И совместимы ли T5557 и T5577? В документации написано "compatible", но вот купил я в Китае брелоки с T5577/T5557 с чипом T5577 (тут:
https://ru.aliexpress.com/item/10pcs-ba ... 109.TukoB3 ) и нифига брелок не прошивается. То ли брелоки дохлые, то ли T5577 не совместим с T5557, то ли продавец заблокировал запись или пароль поставил, то ли там EM4305, а не T5577.

Re: Копировщик RFID-ключей T5557
Добавлено: Чт сен 22, 2016 05:26:35
da-nie
Записал такой брелок. Делал протокол EM4305 до записи T5557, не работало. Бросил гроздью ключи на катушку и вдруг три штуки записались! Отключил протокол EM4305, оставив T5557 - тоже гроздью положил ключи и записались ещё несколько штук. Значит, в этих брелоках T5577 и он пишется, как T5557. В общем, экспериментами выяснил, что ключ пишется, но раза с десятого и если в разных частях катушки его записывать. Похоже, эти ключи "тугие" - не хватает им питания или ещё что. Один ключ так и не смог записать.
Re: Копировщик RFID-ключей T5557
Добавлено: Чт сен 22, 2016 08:21:45
VGA77
Доброго времени суток!
А не пробовали записывать эти брелки другими копировщиками? Вроде бы на казусе была пара достаточно простых схем и на пике и на меге, которые можно собрать на макетке и проверить. Я это к тому, что если тем пишется, а вашим нет, то может быть проблема с таймингами?
Re: Копировщик RFID-ключей T5557
Добавлено: Чт сен 22, 2016 10:58:03
da-nie
Добрый день.
Нет, не пробовал. Вряд ли там с таймингами проблема - ни с какими другими ключами и картами формата T5557 такой фигни не было - только вот с этими с aliexpress. Но у китайцев всё что угодно может быть внутри. Хоть катушка неверно намотанная.

Re: Копировщик RFID-ключей T5557
Добавлено: Чт сен 22, 2016 19:39:21
da-nie
VGA77, а вы правы! Я посмотрел даташит на T5577. Оказывается, у T5557 нормальный режим работы имеет на 10 тактов поля больше, чем у T5577. Уменьшил на 80 мкс и получил записываемость на всех брелоках.
Последняя прошивка
Re: Копировщик RFID-ключей T5557
Добавлено: Чт сен 29, 2016 11:27:55
da-nie
Перенёс этот же копировщик на atmega328p. Почему именно на неё? Потому что она стоит в Arduino Nano. Если припаять аналоговую часть к этой самой Arduino Nano и прошить её (программа для прошивки в комплекте) нижеприведённой прошивкой, то можно будет копировать/считывать ключи через USB, а не через COM-порт, так как на Arduino Nano есть преобразователь. Правда, первые пакеты данных потеряются - их, как я понимаю, ловит загрузчик ардуины. Так что, первое считывание ключа завершится с ошибкой. И ещё, программа под виндовс будет немного другая (в части настройки COM-порта я кое-какие, критичные для преобразователя USB-COM Arduino Nano функции не отключил, хотя в комментарии написал "отключаем" - невнимательность. Для связи штатной платы через физический COM-порт это не важно, а вот для всяких FT232 это важно.) Так что, RFIDUnitControl для Arduino Nano нужно использовать из приложенного архива. С исходным устройством также можно использовать эту последнюю версию RFIDUnitControl.
Выглядит прототип вот так вот:
Файлы проекта:
Re: Копировщик RFID-ключей T5557
Добавлено: Сб ноя 12, 2016 21:06:48
da-nie
Пришли брелоки em4305. Пробую реализовать протокол записи ключа. Я нашёл руководство по записи ключа (оно во вложении). Как я понял, ключ можно записать, например, в блок 5, а в блок 4 нужно записать конфигурационное слово (манчестер, RF/64, выдача слова 5). Согласно руководству (как я его понял), для записи блока нужно сделать следующее:
1 ) Включить поле на некоторое время.
2 ) Сформировать First Field Stop - отключить поле на 55 циклов (8 микросекунд один цикл = 1/125000)
3 ) Включить поле на 17 циклов.
4 ) Послать "0".
5 ) Послать команду с битом чётности в конце ("0101" - запись блока). Для всех блоков данных принят порядок "младший бит первый".
6 ) Послать адрес блока (4 бита).
7 ) Послать "00".
8 ) Послать бит чётности для адреса.
9 ) Послать блок данных (32 бита данных): после каждых 8 бит данных шлётся бит чётности этих переданных восьми бит. После передачи всех 32 бит данных шлётся 8 бит чётности этих бит данных по столбцам.
10 ) Послать "0".
11 ) Включить поле и подержать его ещё некоторое время, чтобы произошла запись и пришёл ответ. Ответ я не принимаю и не анализирую.
Чтобы послать "0" нужно:
1) На 15 циклов убрать поле.
2) На 17 циклов включить поле.
Чтобы послать "1" нужно на 32 цикла включить поле.
Я, собственно, так и сделал. Но брелок не записывается.

Может, кто-нибудь знает, что я делаю не так?
Фрагмент кода записи:
Код: Выделить всё
//----------------------------------------------------------------------------------------------------
//пауза Start Gap
//----------------------------------------------------------------------------------------------------
void StartGap_4305(void)
{
FieldOff();
_delay_us(55*8);
FieldOn();
_delay_us(17*8);
}
//----------------------------------------------------------------------------------------------------
//отправить единицу
//----------------------------------------------------------------------------------------------------
void SendOne_4305(void)
{
FieldOn();
_delay_us(32*8);
//FieldOff();
}
//----------------------------------------------------------------------------------------------------
//отправить ноль
//----------------------------------------------------------------------------------------------------
void SendZero_4305(void)
{
FieldOff();
_delay_us(15*8);
FieldOn();
_delay_us(17*8);
//FieldOff();
}
//----------------------------------------------------------------------------------------------------
//записать блок по адресу
//----------------------------------------------------------------------------------------------------
void WriteEM4305(unsigned char addr,char b0,char b1,char b2,char b3)
{
unsigned char n;
//HIGHT - поле выключено
unsigned char data[4]={b0,b1,b2,b3};
StartGap_4305();
SendZero_4305();//logic bit
//шлём 0101
SendZero_4305();//CC0
SendOne_4305();//CC1
SendZero_4305();//CC2
SendOne_4305();//P
//шлём адрес слова (младший бит первый)
unsigned char p=0;
for(n=0;n<4;n++)
{
if (addr&(1<<n))
{
SendOne_4305();
p^=1;
}
else SendZero_4305();
}
//дополняющие нули и чётность
SendZero_4305();
SendZero_4305();
if (p==0) SendZero_4305();
else SendOne_4305();
//шлём данные
p=0;
for(n=0;n<4;n++)
{
unsigned char l_p=0;
for(unsigned char m=0;m<8;m++)
{
unsigned char mask=(1<<m);
if (data[n]&mask)
{
SendOne_4305();
l_p^=1;
p^=mask;
}
else SendZero_4305();
}
//шлём чётность по строкам
if (l_p==0) SendZero_4305();
else SendOne_4305();
}
//шлём чётность по столбцам
for(n=0;n<8;n++)
{
unsigned char mask=(1<<n);
if (p&mask) SendOne_4305();
else SendZero_4305();
}
//шлём 0
SendZero_4305();
FieldOn();
_delay_ms(500);
}
Что записывается:
Код: Выделить всё
FieldOn();//включаем электромагнитное поле
_delay_ms(500);
//запись конфигурации (манчестер, RF/64, выдача слова 5)
WriteEM4305(4,0x5F,0x40,0x01,0x00);
FieldOn();//включаем электромагнитное поле
_delay_ms(500);
//запись ID карты в слово 5
WriteEM4305(5,id[1],id[2],id[3],id[4]);
FieldOn();//включаем электромагнитное поле
_delay_ms(500);
FieldOff();//отключаем электромагнитное поле
_delay_ms(500);
Re: Копировщик RFID-ключей T5557
Добавлено: Сб ноя 19, 2016 18:39:00
da-nie
Большая просьба модератору переименовать эту тему в Копировщик RFID-ключей T5557/T5577 и EM4305! Ну и в первом моём сообщений, если не трудно, дать ссылку на последнюю прошивку (или её саму). Спасибо!
Итак, я сделал EM4305!

Исходники и прошивки ко всем проектам этой темы в архиве.
Код для записи em4305:
Код: Выделить всё
//----------------------------------------------------------------------------------------------------
//записать ID карты
//----------------------------------------------------------------------------------------------------
void WriteCardID(unsigned char id[5])
{
static unsigned char RFID_Send_Buffer[8];//буфер записи RFID
static unsigned char RFID_Config[4];//буфер конфигурации RFID
unsigned char n;
//запись карты em4305
//в слова 5 и 6 карты EM4305 записываем UID (40 бит сначала конвертируем в 64 бита)
//задаём номер карты
RFIDBuffer[0]=id[0];
RFIDBuffer[1]=id[1];
RFIDBuffer[2]=id[2];
RFIDBuffer[3]=id[3];
RFIDBuffer[4]=id[4];
PrepareSendBuffer(RFIDBuffer,RFID_Send_Buffer);
//функция WriteEM4305Word требует прямой порядок бит, а после перекодирования порядок обратный - переставляем
for(n=0;n<8;n++)
{
unsigned char v=RFID_Send_Buffer[n];
RFID_Send_Buffer[n]=0;
unsigned char m;
for(m=0;m<8;m++)
{
unsigned char m1=(1<<m);
unsigned char m2=(128>>m);
if (v&m1) RFID_Send_Buffer[n]|=m2;
}
}
FieldOn();//включаем электромагнитное поле
_delay_ms(500);
//шлём логин
SendEM4305Login(0xFF,0xFF,0xFF,0xFF);
//запись конфигурации (манчестер, RF/64, выдача слова 6)
WriteEM4305Word(4,0x5F,0x80,0x01,0x00);
//запись ID карты в слова 5 и 6
WriteEM4305Word(5,RFID_Send_Buffer[0],RFID_Send_Buffer[1],RFID_Send_Buffer[2],RFID_Send_Buffer[3]);
WriteEM4305Word(6,RFID_Send_Buffer[4],RFID_Send_Buffer[5],RFID_Send_Buffer[6],RFID_Send_Buffer[7]);
FieldOff();//отключаем электромагнитное поле
_delay_ms(500);
}
//----------------------------------------------------------------------------------------------------
//пауза FirstFieldStop для em4305
//----------------------------------------------------------------------------------------------------
void FirstFieldStop_4305(void)
{
FieldOff();
_delay_us(6*8);
FieldOn();
_delay_us(12*8);
FieldOff();
_delay_us(40*8);
FieldOn();
_delay_us(17*8);
FieldOff();
}
//----------------------------------------------------------------------------------------------------
//отправить единицу для em4305
//----------------------------------------------------------------------------------------------------
void SendOne_4305(void)
{
FieldOn();
_delay_us(30*8);
}
//----------------------------------------------------------------------------------------------------
//отправить ноль для em4305
//----------------------------------------------------------------------------------------------------
void SendZero_4305(void)
{
FieldOff();
_delay_us(18*8);
FieldOn();
_delay_us(17*8);
}
//----------------------------------------------------------------------------------------------------
//передать карте Em4305 блок данных 32 бита
//----------------------------------------------------------------------------------------------------
void SendEM4305DataBlock(char b0,char b1,char b2,char b3)
{
unsigned char n;
unsigned char data[4]={b0,b1,b2,b3};
//шлём данные
unsigned char p=0;
for(n=0;n<4;n++)
{
unsigned char l_p=0;
p^=data[n];
for(unsigned char m=0;m<8;m++)
{
unsigned char mask=(1<<m);
if (data[n]&mask)
{
SendOne_4305();
l_p^=1;
}
else SendZero_4305();
}
//шлём чётность по строкам
if (l_p==0) SendZero_4305();
else SendOne_4305();
}
//шлём чётность по столбцам
for(n=0;n<8;n++)
{
unsigned char mask=(1<<n);
if (p&mask) SendOne_4305();
else SendZero_4305();
}
//шлём 0
SendZero_4305();
FieldOn();
_delay_ms(500);
}
//----------------------------------------------------------------------------------------------------
//передать карте Em4305 логин
//----------------------------------------------------------------------------------------------------
void SendEM4305Login(char b0,char b1,char b2,char b3)
{
FirstFieldStop_4305();
SendZero_4305();//'0'
//шлём 0011
SendZero_4305();//CC0
SendZero_4305();//CC1
SendOne_4305();//CC2
SendOne_4305();//P
//шлём данные
SendEM4305DataBlock(b0,b1,b2,b3);
}
//----------------------------------------------------------------------------------------------------
//записать слово в Em4305
//----------------------------------------------------------------------------------------------------
void WriteEM4305Word(unsigned char addr,char b0,char b1,char b2,char b3)
{
//HIGHT - поле выключено
FirstFieldStop_4305();
SendZero_4305();//'0'
//шлём 0101
SendZero_4305();//CC0
SendOne_4305();//CC1
SendZero_4305();//CC2
SendOne_4305();//P
//шлём адрес слова (младший бит первый)
unsigned char p=0;
for(unsigned char n=0;n<4;n++)
{
if (addr&(1<<n))
{
SendOne_4305();
p^=1;
}
else SendZero_4305();
}
//дополняющие нули и чётность
SendZero_4305();
SendZero_4305();
if (p==0) SendZero_4305();
else SendOne_4305();
//шлём данные
SendEM4305DataBlock(b0,b1,b2,b3);
}
Из-за _delay_ms(500) которых я наставил для гарантии записи (хотя паузы можно сильно уменьшить), я поставил в RFIDUnitControl паузу до 10 секунд! Так что не удивляйтесь, что после записи ключа такая большая пауза.
P.S. Обновил ПО (исправил ошибочку в RFIDUnitControl из-за которой пауза после записи была больше, чем нужно) и добавил в архив схему для дисплея.
Re: Копировщик RFID-ключей T5557
Добавлено: Сб ноя 19, 2016 21:45:50
Pretender
Большое Вам человеческое спасибо!

Re: Копировщик RFID-ключей T5557
Добавлено: Сб ноя 19, 2016 23:17:16
dantist3
Ув. da-nie. В исходниках не силен, но как я понял дисплей подключается к портам PC0-PC5. Подправте если не прав. А к каким портам подключаются кнопки чтения-записи. Спасибо!
Re: Копировщик RFID-ключей T5557
Добавлено: Вс ноя 20, 2016 10:27:04
da-nie
Вот схема устройства с дисплеем. Только имейте в виду, что дисплей нужен на зелёном текстолите! Для жёлтого у меня есть блок для работы с ним, но он старый и я его давно не использовал, так как дисплей сломался. То есть, жёлтый дисплей придётся адаптировать вам самим - мне даже проверить будет не на чем.
В архиве схема в высоком разрешении. Печатку я не делал, так как просто навесил дисплей с обвязкой поверх стандартной платы.
Диоды нужны НЕ Шоттки (!) - с падением напряжения 0.6 В.

Re: Копировщик RFID-ключей T5557
Добавлено: Вс ноя 20, 2016 11:37:44
dantist3
Спасибо! Теперь понятно.
Re: Копировщик RFID-ключей T5557
Добавлено: Вс ноя 20, 2016 17:38:21
da-nie
Ускорил RFIDUnitControl (добавил пропущенный break в цикле ожидания

) и добавил в архив схему с дисплеем. Архив (в сообщении
http://radiokot.ru/forum/viewtopic.php? ... 1#p2923271) обновлён.
Re: Копировщик RFID-ключей T5557
Добавлено: Пн ноя 21, 2016 19:12:25
da-nie
Кстати, интересно, у кого сколько стоит сделать RFID ключ?
Например, в Ленте у метро Балтийская в СПб ценник такой:

Re: Копировщик RFID-ключей T5557
Добавлено: Вс дек 04, 2016 04:11:31
Serg22
Есть же честные, кто может открыто спасибо сказать

Рад, что мой труд пригодился кому-то.
Re: Копировщик RFID-ключей T5557
Добавлено: Вс дек 04, 2016 07:38:12
da-nie

А какой смысл скрывать, у кого что взято? Вот если бы у меня было бы заниженное ЧСВ, то да - тут надо его поднимать, постоянно самоутверждаясь:"Смотрите, это именно я сделал!", даже если это не совсем так. Но я таким не страдаю.
И ещё раз, большущее вам спасибо!
P.S. Прочёл я тут мнение, что протоколы записи ключей и их реализации скрывают (не показывают исходники и внятную документацию), чтобы фильтры домофонщики не делали.

Но разве домофонщики не способны разобраться в документации на болванку и сделать самим весь протокол работы с любой болванкой ключа? Ведь это же довольно крупные фирмы с соответствующим штатом. Как такое может быть?
Re: Копировщик RFID-ключей T5557
Добавлено: Вт дек 06, 2016 12:10:40
ssw
привет da-nie . В моем доме ставлят Vizit БВД-310ф , который гад работает на RFID-13.56 мГц (ключ модель-RF3.1)
я так этот програматор работает только на 125 кГц , ? и переделать его никак ?
Re: Копировщик RFID-ключей T5557
Добавлено: Вт дек 06, 2016 18:24:49
da-nie
Добрый вечер.

Не-а, никак. Там только частотой дело не ограничивается. Там вообще milfare.
