Обсуждаем цифровые устройства...
Ответить

Копировщик RFID-ключей T5557

Вс июл 24, 2016 11:18:54

Получил я тут ключи от квартиры с одним брелоком от домофона. Желающие сделать копии - добро пожаловать на рынок. 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 мне не так просто.

Всем вышеперечисленным большущее от меня спасибо! 8) Они существенно ускорили процесс разработки (всё было сделано за 2 дня :) )

Итак, что у меня получилось. Устройство работает на Atmega8 и подключается к компьютеру по COM-порту, скорость 9600 бод. Протокол обмена с байтстаффингом (он описан в файлах для микроконтроллера). В интерфейсе программы две кнопки: считать ID и записать ID. Код карты выдаётся в шестнадцатеричном виде. Всего код карты состоит из 4 байт, но они снабжаются пятым (там сначала идёт какой-то идентификатор - не заморачивался с запоминанием его смысла). Протокол кодирования RFID весьма простой и описан в вышеприведённых ссылках.
Контур с катушкой нужно настроить в резонанс на 125 кГц. Для этого нужно включить чтение ID карты и добиться максимального напряжения в точке "НАСТРОЙКА", изменяя количество витков катушки (что проще) или ёмкость конденсатора (что сложнее). У меня там вышло около 40 В.

Схема копировщика:
Изображение

В архиве есть схема в хорошем качестве, печатка, прошивка, программа для работы с устройством и все исходники (для WinAVR и MS VisualStudio 6).

Ну вот, в принципе, и всё. Если найдёте какую-либо ошибку - сообщайте. Я вполне мог что-то пропустить или где-то ошибиться.
Вложения
Копировщик RFID.rar
(771.65 KiB) Скачиваний: 1294
схема.GIF
(14.21 KiB) Скачиваний: 20156

Re: Копировщик RFID-ключей T5557

Вс июл 31, 2016 13:49:27

Нашёл небольшую ошибочку - к CRC при обмене по UART не применил байтстаффинг. :shock: На некоторых данных команда или ответ не собирались.

Новая программа:

Копировщик RFID.rar
(813.04 KiB) Скачиваний: 710


P.S. Вообще говоря, я добавил дисплей от Siemens C-75 (зелёный текстолит), но лень приводить схему. А программа (всё подключение дисплея в h-файле есть) для дисплея в комплекте.
Вот как без компьютера работает: https://www.youtube.com/watch?v=ONqSsbdVCqM

Re: Копировщик RFID-ключей T5557

Вс сен 18, 2016 10:48:06

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

Re: Копировщик RFID-ключей T5557

Чт сен 22, 2016 05:26:35

Записал такой брелок. Делал протокол EM4305 до записи T5557, не работало. Бросил гроздью ключи на катушку и вдруг три штуки записались! Отключил протокол EM4305, оставив T5557 - тоже гроздью положил ключи и записались ещё несколько штук. Значит, в этих брелоках T5577 и он пишется, как T5557. В общем, экспериментами выяснил, что ключ пишется, но раза с десятого и если в разных частях катушки его записывать. Похоже, эти ключи "тугие" - не хватает им питания или ещё что. Один ключ так и не смог записать.

Re: Копировщик RFID-ключей T5557

Чт сен 22, 2016 08:21:45

Доброго времени суток!
А не пробовали записывать эти брелки другими копировщиками? Вроде бы на казусе была пара достаточно простых схем и на пике и на меге, которые можно собрать на макетке и проверить. Я это к тому, что если тем пишется, а вашим нет, то может быть проблема с таймингами?

Re: Копировщик RFID-ключей T5557

Чт сен 22, 2016 10:58:03

Добрый день.
Нет, не пробовал. Вряд ли там с таймингами проблема - ни с какими другими ключами и картами формата T5557 такой фигни не было - только вот с этими с aliexpress. Но у китайцев всё что угодно может быть внутри. Хоть катушка неверно намотанная. :tea:

Re: Копировщик RFID-ключей T5557

Чт сен 22, 2016 19:39:21

VGA77, а вы правы! Я посмотрел даташит на T5577. Оказывается, у T5557 нормальный режим работы имеет на 10 тактов поля больше, чем у T5577. Уменьшил на 80 мкс и получил записываемость на всех брелоках. :)

Последняя прошивка

Копировщик RFID.rar
(335.29 KiB) Скачиваний: 687

Re: Копировщик RFID-ключей T5557

Чт сен 29, 2016 11:27:55

Перенёс этот же копировщик на atmega328p. Почему именно на неё? Потому что она стоит в Arduino Nano. Если припаять аналоговую часть к этой самой Arduino Nano и прошить её (программа для прошивки в комплекте) нижеприведённой прошивкой, то можно будет копировать/считывать ключи через USB, а не через COM-порт, так как на Arduino Nano есть преобразователь. Правда, первые пакеты данных потеряются - их, как я понимаю, ловит загрузчик ардуины. Так что, первое считывание ключа завершится с ошибкой. И ещё, программа под виндовс будет немного другая (в части настройки COM-порта я кое-какие, критичные для преобразователя USB-COM Arduino Nano функции не отключил, хотя в комментарии написал "отключаем" - невнимательность. Для связи штатной платы через физический COM-порт это не важно, а вот для всяких FT232 это важно.) Так что, RFIDUnitControl для Arduino Nano нужно использовать из приложенного архива. С исходным устройством также можно использовать эту последнюю версию RFIDUnitControl.

Выглядит прототип вот так вот:

Изображение

Файлы проекта:
RFID-ArduinoNano.rar
(1018.44 KiB) Скачиваний: 1009
Вложения
RFID Arduino.jpg
(94.38 KiB) Скачиваний: 19266

Re: Копировщик RFID-ключей T5557

Сб ноя 12, 2016 21:06:48

Пришли брелоки 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 цикла включить поле.

Я, собственно, так и сделал. Но брелок не записывается. :roll: Может, кто-нибудь знает, что я делаю не так?

Фрагмент кода записи:
Код:
//----------
//пауза 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);
Вложения
em4205-4305_ds.pdf
Документация на EM4305
(747.01 KiB) Скачиваний: 553
an604010.pdf
Руководство
(294.52 KiB) Скачиваний: 658

Re: Копировщик RFID-ключей T5557

Сб ноя 19, 2016 18:39:00

Большая просьба модератору переименовать эту тему в Копировщик 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 из-за которой пауза после записи была больше, чем нужно) и добавил в архив схему для дисплея.

Копировщик RFID.rar
(284.06 KiB) Скачиваний: 1227
Последний раз редактировалось da-nie Вс ноя 20, 2016 17:16:30, всего редактировалось 3 раз(а).

Re: Копировщик RFID-ключей T5557

Сб ноя 19, 2016 21:45:50

Большое Вам человеческое спасибо! :beer:

Re: Копировщик RFID-ключей T5557

Сб ноя 19, 2016 23:17:16

Ув. da-nie. В исходниках не силен, но как я понял дисплей подключается к портам PC0-PC5. Подправте если не прав. А к каким портам подключаются кнопки чтения-записи. Спасибо!

Re: Копировщик RFID-ключей T5557

Вс ноя 20, 2016 10:27:04

Вот схема устройства с дисплеем. Только имейте в виду, что дисплей нужен на зелёном текстолите! Для жёлтого у меня есть блок для работы с ним, но он старый и я его давно не использовал, так как дисплей сломался. То есть, жёлтый дисплей придётся адаптировать вам самим - мне даже проверить будет не на чем. :)

Изображение

В архиве схема в высоком разрешении. Печатку я не делал, так как просто навесил дисплей с обвязкой поверх стандартной платы.
Диоды нужны НЕ Шоттки (!) - с падением напряжения 0.6 В. :)
Вложения
Модуль для работы с жёлтым дисплеем от C75.rar
(58.14 KiB) Скачиваний: 663
Схема.rar
(130.02 KiB) Скачиваний: 632
схема с дисплеем.GIF
(16.77 KiB) Скачиваний: 18406

Re: Копировщик RFID-ключей T5557

Вс ноя 20, 2016 11:37:44

Спасибо! Теперь понятно.

Re: Копировщик RFID-ключей T5557

Вс ноя 20, 2016 17:38:21

Ускорил RFIDUnitControl (добавил пропущенный break в цикле ожидания :) ) и добавил в архив схему с дисплеем. Архив (в сообщении viewtopic.php?p=2923271#p2923271) обновлён.

Re: Копировщик RFID-ключей T5557

Пн ноя 21, 2016 19:12:25

Кстати, интересно, у кого сколько стоит сделать RFID ключ?

Например, в Ленте у метро Балтийская в СПб ценник такой:
Изображение
Вложения
img1.jpg
(97.28 KiB) Скачиваний: 17140

Re: Копировщик RFID-ключей T5557

Вс дек 04, 2016 04:11:31

da-nie писал(а):3) Код записи ключа я взял у BolshoyK ( http://kazus.ru/forums/showthread.php?t=101565 )

Есть же честные, кто может открыто спасибо сказать :-)
Рад, что мой труд пригодился кому-то.

Re: Копировщик RFID-ключей T5557

Вс дек 04, 2016 07:38:12

:))) А какой смысл скрывать, у кого что взято? Вот если бы у меня было бы заниженное ЧСВ, то да - тут надо его поднимать, постоянно самоутверждаясь:"Смотрите, это именно я сделал!", даже если это не совсем так. Но я таким не страдаю. :)

И ещё раз, большущее вам спасибо! :beer:

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

Re: Копировщик RFID-ключей T5557

Вт дек 06, 2016 12:10:40

привет da-nie . В моем доме ставлят Vizit БВД-310ф , который гад работает на RFID-13.56 мГц (ключ модель-RF3.1)

я так этот програматор работает только на 125 кГц , ? и переделать его никак ?

Re: Копировщик RFID-ключей T5557

Вт дек 06, 2016 18:24:49

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