Подскажите пожалуйста у вас программа выложена ведь,вы в какой проге пишите?,хочу полностью проект открыть,раньше смотрел через блокнот. Нашел вчера у ся ошибку,вывел все передаваемые данные с устройства по юарт,ошибок в данных больше нет,все исправил,проверял несколько раз,но запись не идет,вот хотелось бы все длительности точно посмотреть,может чего упустил.
Тут вы тоже что то непонятное пишите: "//в слова 5 и 6 карты EM4305 записываем UID (40 бит сначала конвертируем в 64 бита)"
Еще вопросик, смотрите я честность столбцов смотрю как?,к примеру я все байты перевернул , что такое PC0? это четность столбцов D00D08D16D24?,или же D07D15D23D31 - тобишь четность тех байтов которые уже перевернул, а потом еще раз переворачиваем младшим байтом или как?
тоесть смотрите к примеру я байты уже перевернутые т е отправленные байты младшим битом вперед
Код:
00001111 0 11110000 0 10101010 0 10000000 1 ;////////// 11010101 0 или же так шлем четность столбцов? 10101011 0
В WinAVR. Но по сути там достаточно обычного текстового редактора.
Цитата:
всмысле???
А чего тут не понятного-то? Полный передаваемый номер карты - 64 бита (с битами чётности, девятью единицами и нулём в конце). Вот это и надо записать в блок 5 и блок 6. Блики по 32 бита. А нужно 64. Значит, нужно два блока.
Цитата:
,к примеру я все байты перевернул , что такое PC0?
А вы не пробовали взять строго, как в программе сделано?
А вы не пробовали взять строго, как в программе сделано?
я же писал уже я си вспоминать полностью не хочу,что то я помню. PC0-это D0D8D16D24 как в даташите, или же это D7D15D23D31 -тобишь перевернули опять?
кстати even parity-это у нас как получается 11=0?- это по строкам а по столбцам также even parity?
я так понимаю для записи это все что нужно отослать карте?
Код:
;/////////////////////////////////// FieldOn() delay_ms(500); //запись конфигурации (манчестер, 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);
;///////////////////////////// каждый байт мы переворачиваем и шлем младшим байтом вперед? странно что у вас функция Логин стоит на первом месте перед записью,тоесть тот кто повторит ваш проект,если у него карточка пустая без пароля получается не запишет данные?
я же писал уже я си вспоминать полностью не хочу,что то я помню.
Там такой Си, что и вспоминать нечего.
Цитата:
я так понимаю для записи это все что нужно отослать карте?
Да. Записать вот это в 5 и 6 слова.
Цитата:
странно что у вас функция Логин стоит на первом месте перед записью,тоесть тот кто повторит ваш проект,если у него карточка пустая без пароля получается не запишет данные?
Запишет. Логин на карточке включать надо, чтобы он работал. Изначально он отключён.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Логин на карточке включать надо, чтобы он работал. Изначально он отключён.
Автор я конечно все понимаю,если вы не знаете зачем вы путаете людей,если на карте нет пароля нахрен этот логин,тем более он выключен у вас в конфиге:
логин не читается если 0
Код:
co18: Read Login When set to logic 1, the reading of all words, except Words 0 and 1, by using the Read Word command is protected. Reading any of these words using the Read Word command, can be done upon successful execution of a Login command.
;//запись пароля запрещена если 0
Код:
co20: Write Login When the Write Login bit is set to logic 1, modification of EEPROM content is protected. Writing any word using Write Word command or changing protection using Protect command, can be done upon successful execution of a login command. Note: Independent of write login configuration bit state, Password (word 2) reprogramming can be done upon successful execution of a login command
Вообщем я собрал устройство и все работает,даташит рулит как всегда,но не ваша программа.
Напишу основные ошибки из-за которых сделать по алгоритму автора ничего не выйдет это все 100 процентов. Пишу для тех кто будет делать протокол для карт EM4305.
Во первых всегда смотрим даташит:
Кому лень искать то даташит есть на первой странице этой Ветке:
Что это вообще такое??? ,я не хочу вас обидеть но это угар. Открываем даташит и пишем правильно: Как говориться останавливаем поле на 55 циклов и включаем 17
Итак с этим разобрались,теперь с остальным. Внимание у тех у кого карточка пустая не нужно при записи ставить вначале Логин и сбрасывать его ,либо еще что то с ним делать,в этом нету смысла!!!,ИТАК ВСЕ ЗАПИШЕТСЯ. ///////////////////////////////////////////////////
Поле было включено.... ИТак дальше делаем так:
Команда записи 0101
Пишем конфигурацию в 4 блок (0010 00 1):
Код:
FirstFieldStop_4305 SendZero_4305 0101 0010 00 1
Так теперь пишем данные,смотрим их в даташите,для ленивых напишу,незабываем про четность строк и колонок: В данной конфигурации Write Логин отменен,данные не переворачиваем!!!
0xFA 0 0x01 1 0x80 1 0x00 0 0x7B 0
вконце делаем:
FieldOn delayms 20
//////////////////////////////////////////////////// Пишем 32 бита, 1 часть данных в 5 блок (1010 00 0) :
Код:
FirstFieldStop_4305 SendZero_4305 0101 1010 00 0
Так теперь пишем данные,внимание Данные с карточки переворачивать не нужно,как это делает автор!!! ,и пишет тут что данные идут младшим битом вперед,это путает людей,https://habrahabr.ru/post/330710/ Приведу пример моей карточки: 111111111 0000 0 1011 1 0000 0 0000 0 0011 0 0101 0 1111 0 0111 1 0001 1 1010 0 1110 0
Шлём вот так(незабываем про четность строк и колонок):
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Автор я конечно все понимаю,если вы не знаете зачем вы путаете людей,если на карте нет пароля нахрен этот логин,тем более он выключен у вас в конфиге:
Я же сказал, всё это оставлено на будущее для тех, кому это потребуется.
Цитата:
Вообщем я собрал устройство и все работает,даташит рулит как всегда,но не ваша программа.
Странно, а как же тогда она работает вот уже почти два года? И ещё удивительнее, что у вас по даташиту заработало. Вы, наверное, первый, у кого по этому даташиту карточка записалась. На kazus протокол записи em4305 долго был камнем преткновения даже с даташитом.
Цитата:
Напишу основные ошибки из-за которых сделать по алгоритму автора ничего не выйдет это все 100 процентов.
Учитывая, что снималось всё это с реального копировщика, это не вышло почему-то только у вас.
Цитата:
Что это вообще такое???
Это то, что было снято с реального копировщика.
Цитата:
Внимание у тех у кого карточка пустая не нужно при записи ставить вначале Логин и сбрасывать его ,либо еще что то с ним делать,в этом нету смысла!!!,ИТАК ВСЕ ЗАПИШЕТСЯ.
Я же сказал, что он не нужен для незапароленых карточек.
Хм да уж,поверьте не вышло, это снималось тоже с реального копировщика,там ничего сверхестественного нет,а протокол этот никакая ни тайна,все написано в даташите: вот осциллограммы действительно с реального копировщика :
Я даже не удивлен что у меня ваш алгоритм не заработал,а по даташиту с первого раза запахал,странно неправда ли.
Я даже не удивлен что у меня ваш алгоритм не заработал,а по даташиту с первого раза запахал,странно неправда ли.
У меня обратная ситуация. По даташиту не работало ни в какую. А по снятой диаграмме заработало сразу. Посмотрите начало темы:
Цитата:
Пришли брелоки 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 цикла включить поле.
Я, собственно, так и сделал. Но брелок не записывается. Может, кто-нибудь знает, что я делаю не так?
Добавлено after 2 minutes 1 second:
Цитата:
Вы даташит плохо значит смотрели,данные не переворачиваем.
Вот именно что перевернули,почитайте как я выше данные отправляю,я их не переворачиваю,а вы данные шлете так: начиная с младшего бита и заканчивая старшим
покажите в битах как вы их шлете попорядку со всеми битами четности строк и колонок
Не покажу. Я же выше уже сказал, что я давно уже не помню всего этого. В любом случае, не заработало по даташиту. Так как нифига не получалось, я взял реально работающую игрушку и снял с неё осциллограмму. Там всё было ровно, как я и написал в программе (и как работает у всех повторивших (и переделавших), кроме вас). И вот это и заработало.
Хм ну да,давно,но у меня работает все четко,проверял на карточках,на брелках,вы осцилограммы посмотрите,у меня тоже снято с реального копировщика,у вас бы и не заработала потомучто вы слали данные младшим битом вперед,я у вас в программе это вижу.
Я в какие-нибудь выходные посмотрю, что будет, если текущую программу переделать под даташит и исправить фишку с таймером (которая, тем не менее, работает и так). Возможно, заработает.
Цитата:
потомучто вы слали данные младшим битом вперед,я у вас в программе это вижу.
Они и сейчас вроде как так шлются. И всё работает.
Обратите внимание на данные карточки!!!!! отправляйте их не переворачивая младшим битом вперед. Я написал выше как я отправляю данные. Очень странно,но я не меняю порядок бит как у вас,возможно есть команда какая то вначале. Пробуйте,потом пишите ,я же тоже не дурачек,все проверил,какие данные идут по Uart именно вашим методом,мерил длительности осциллографом,не работало.
Последний раз редактировалось sirha Вс мар 25, 2018 17:13:56, всего редактировалось 1 раз.
da-nie, sirha, каждый из вас в чем-то прав. sirha, вот Вы пишете по поводу FirstFieldStop:
sirha писал(а):
Что это вообще такое??? ,я не хочу вас обидеть но это угар.Открываем даташит и пишем правильно:Как говориться останавливаем поле на 55 циклов и включаем 17
Но я тоже видел такое на китайском копировщике, и он отлично записывал заготовки. Также я собирал копировщик с казуса, в котором не было "такой кракозябры", и он также отлично записывал em4305 Кроме того, в последнем копировщике была возможность поиграться таймингами, чем я и воспользовался : 1. Изменение FirstFieldStop в довольно широких пределах никак не влияло на запись заготовок 2. Изменение остальных таймингов при передаче нулей и единиц на 1-2 цикла также никак не влияло на запись заготовок 3. В итоге оставил по умолчанию da-nie, так как запись заготовок в вашем варианте копировщика происходит (и не только у Вас), то все команды отправляются в соответствии с даташитом (в пределах допусков). Чей алгоритм записи лучше - не важно, главное, что работает (разбираться в дебрях программ - это не моё ).
Помогите разобраться перестал работать копир. на Arduino nano : На катушке 125кГц В контрольной точке 40 В Программа не читает ключ который раньше читался этим же копиром. В чем может быть проблема?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения