Получил я тут ключи от квартиры с одним брелоком от домофона. Желающие сделать копии - добро пожаловать на рынок. 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).
Ну вот, в принципе, и всё. Если найдёте какую-либо ошибку - сообщайте. Я вполне мог что-то пропустить или где-то ошибиться.
P.S. Вообще говоря, я добавил дисплей от Siemens C-75 (зелёный текстолит), но лень приводить схему. А программа (всё подключение дисплея в h-файле есть) для дисплея в комплекте. Вот как без компьютера работает: https://www.youtube.com/watch?v=ONqSsbdVCqM
А никто не знает протокол записи EM4305? В чём его отличие от T5557? По даташиту на EM4305 с моим знанием английского протокол записи я в упор не вижу, как реализован. И совместимы ли T5557 и T5577? В документации написано "compatible", но вот купил я в Китае брелоки с T5577/T5557 с чипом T5577 (тут: https://ru.aliexpress.com/item/10pcs-ba ... 109.TukoB3 ) и нифига брелок не прошивается. То ли брелоки дохлые, то ли T5577 не совместим с T5557, то ли продавец заблокировал запись или пароль поставил, то ли там EM4305, а не T5577.
Записал такой брелок. Делал протокол EM4305 до записи T5557, не работало. Бросил гроздью ключи на катушку и вдруг три штуки записались! Отключил протокол EM4305, оставив T5557 - тоже гроздью положил ключи и записались ещё несколько штук. Значит, в этих брелоках T5577 и он пишется, как T5557. В общем, экспериментами выяснил, что ключ пишется, но раза с десятого и если в разных частях катушки его записывать. Похоже, эти ключи "тугие" - не хватает им питания или ещё что. Один ключ так и не смог записать.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Доброго времени суток! А не пробовали записывать эти брелки другими копировщиками? Вроде бы на казусе была пара достаточно простых схем и на пике и на меге, которые можно собрать на макетке и проверить. Я это к тому, что если тем пишется, а вашим нет, то может быть проблема с таймингами?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Добрый день. Нет, не пробовал. Вряд ли там с таймингами проблема - ни с какими другими ключами и картами формата T5557 такой фигни не было - только вот с этими с aliexpress. Но у китайцев всё что угодно может быть внутри. Хоть катушка неверно намотанная.
VGA77, а вы правы! Я посмотрел даташит на T5577. Оказывается, у T5557 нормальный режим работы имеет на 10 тактов поля больше, чем у T5577. Уменьшил на 80 мкс и получил записываемость на всех брелоках.
Перенёс этот же копировщик на atmega328p. Почему именно на неё? Потому что она стоит в Arduino Nano. Если припаять аналоговую часть к этой самой Arduino Nano и прошить её (программа для прошивки в комплекте) нижеприведённой прошивкой, то можно будет копировать/считывать ключи через USB, а не через COM-порт, так как на Arduino Nano есть преобразователь. Правда, первые пакеты данных потеряются - их, как я понимаю, ловит загрузчик ардуины. Так что, первое считывание ключа завершится с ошибкой. И ещё, программа под виндовс будет немного другая (в части настройки COM-порта я кое-какие, критичные для преобразователя USB-COM Arduino Nano функции не отключил, хотя в комментарии написал "отключаем" - невнимательность. Для связи штатной платы через физический COM-порт это не важно, а вот для всяких FT232 это важно.) Так что, RFIDUnitControl для Arduino Nano нужно использовать из приложенного архива. С исходным устройством также можно использовать эту последнюю версию RFIDUnitControl.
Пришли брелоки 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 цикла включить поле.
Я, собственно, так и сделал. Но брелок не записывается. Может, кто-нибудь знает, что я делаю не так?
//---------- //записать блок по адресу //---------- 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);
Вложения:
Комментарий к файлу: Документация на EM4305 em4205-4305_ds.pdf [747.01 KiB]
Скачиваний: 881
Комментарий к файлу: Руководство an604010.pdf [294.52 KiB]
Скачиваний: 1013
Большая просьба модератору переименовать эту тему в Копировщик 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); }
//---------- //отправить единицу для 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 из-за которой пауза после записи была больше, чем нужно) и добавил в архив схему для дисплея.
Карма: 2
Рейтинг сообщений: 21
Зарегистрирован: Пн май 04, 2009 14:39:47 Сообщений: 299 Откуда: Россия г. Москва
Рейтинг сообщения:0
Ув. da-nie. В исходниках не силен, но как я понял дисплей подключается к портам PC0-PC5. Подправте если не прав. А к каким портам подключаются кнопки чтения-записи. Спасибо!
Вот схема устройства с дисплеем. Только имейте в виду, что дисплей нужен на зелёном текстолите! Для жёлтого у меня есть блок для работы с ним, но он старый и я его давно не использовал, так как дисплей сломался. То есть, жёлтый дисплей придётся адаптировать вам самим - мне даже проверить будет не на чем.
В архиве схема в высоком разрешении. Печатку я не делал, так как просто навесил дисплей с обвязкой поверх стандартной платы. Диоды нужны НЕ Шоттки (!) - с падением напряжения 0.6 В.
Ускорил RFIDUnitControl (добавил пропущенный break в цикле ожидания ) и добавил в архив схему с дисплеем. Архив (в сообщении viewtopic.php?p=2923271#p2923271) обновлён.
А какой смысл скрывать, у кого что взято? Вот если бы у меня было бы заниженное ЧСВ, то да - тут надо его поднимать, постоянно самоутверждаясь:"Смотрите, это именно я сделал!", даже если это не совсем так. Но я таким не страдаю.
И ещё раз, большущее вам спасибо!
P.S. Прочёл я тут мнение, что протоколы записи ключей и их реализации скрывают (не показывают исходники и внятную документацию), чтобы фильтры домофонщики не делали. Но разве домофонщики не способны разобраться в документации на болванку и сделать самим весь протокол работы с любой болванкой ключа? Ведь это же довольно крупные фирмы с соответствующим штатом. Как такое может быть?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения