Логин на карточке включать надо, чтобы он работал. Изначально он отключён.
Автор я конечно все понимаю,если вы не знаете зачем вы путаете людей,если на карте нет пароля нахрен этот логин,тем более он выключен у вас в конфиге:
логин не читается если 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.
Во первых всегда смотрим даташит:
Кому лень искать то даташит есть на первой странице этой Ветке:
viewtopic.php?f=2&t=133776смотрим два даташита который выложил автор.
Дальше...
Код: Выделить всё
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();
}
Что это вообще такое???

,я не хочу вас обидеть но это угар.
Открываем даташит и пишем правильно:
Как говориться останавливаем поле на 55 циклов и включаем 17
Код: Выделить всё
void FirstFieldStop_4305(void)
{
FieldOff();
_delay_us(55*8);
FieldOn();
_delay_us(17*8);
}
Правим остальное:
не 30 а 32 цикла
Код: Выделить всё
void SendOne_4305(void)
{
FieldOn();
_delay_us(32*8);
}
Дальше...
Код: Выделить всё
void SendZero_4305(void)
{
FieldOff();
_delay_us(15*8);
FieldOn();
_delay_us(17*8);
}
Итак с этим разобрались,теперь с остальным.
Внимание у тех у кого карточка пустая не нужно при записи ставить вначале Логин и сбрасывать его ,либо еще что то с ним делать,в этом нету смысла!!!,ИТАК ВСЕ ЗАПИШЕТСЯ.
///////////////////////////////////////////////////
Поле было включено....
ИТак дальше делаем так:
Команда записи 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
Шлём вот так(незабываем про четность строк и колонок):
11111111 0
10000010 0
11100000 1
00000001 1
10011100 0
вконце делаем:
FieldOn
delayms 20
Пишем 32 бита, 2 часть данных в 6 блок (0110 00 0) :
Код: Выделить всё
FirstFieldStop_4305
SendZero_4305
0101
0110 00 0
внимание Данные с карточки переворачивать не нужно,как это делает автор!!!
Шлём вот так(незабываем про четность строк и колонок):
10010101 0
11100111 0
10001110 0
10011100 0
01100000 0
вконце делаем:
FieldOn
delayms 20
Теперь Особое внимание уделю для тех кто хочет поставить свой пароль на карточку делается это так,отправляем конфиг :
Код: Выделить всё
FirstFieldStop_4305
SendZero_4305
0101
0010 00 1
Так теперь пишем данные,смотрим их в даташите,для ленивых напишу,незабываем про четность строк и колонок:
В этих настройках разрешен write логин
0xFA 0 0x01 1 0x88 0 0x00 0 0x76 0
вконце делаем:
FieldOn
delayms 20
Тут в конфиге указано что мы можем сделать Логин,тоесть запаролить карту
Дальше...
Незабываем про то что в данных не нужно переворачивать быйты!!!,кроме адрессации.
Шлём...
SendEM4305Login(0x00,0x00,0x00,0x00);//сброс
шлём свой пароль:
Код: Выделить всё
FirstFieldStop_4305
SendZero_4305
0101
0100 00 1
тУТ ПИШЕМ ПАРОЛЬ НАПРИМЕР:
0x05 0 0xD7 0 0x3B 1 0x9F 0 0x76 0
fieldon
delayms 20
Теперь Логинимся к нашей карточке с этим паролем:
Код: Выделить всё
FirstFieldStop_4305
SendZero_4305
0011
тУТ ПИШЕМ ПАРОЛЬ НАПРИМЕР:
0x05 0 0xD7 0 0x3B 1 0x9F 0 0x76 0
fieldon
delayms 20