Например TDA7294

 Форум РадиоКот • Просмотр темы - Ковыряем RFID Mifare и MFRC522
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср июл 18, 2018 17:42:42



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу 1, 2, 3, 4, 5, 6  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вс июн 04, 2017 02:35:21 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Зарегистрирован: Вс июн 26, 2011 21:03:21
Сообщений: 2260
Рейтинг сообщения: 0
Приветствую всех заинтересовавшихся :beer:
Началось все с покупки комплекта считывателя RFID RC522, карты и брелка на Али. Валялся он у меня пару недель, а потом появилось время поработать с ним... и ту понеслось :) .
Для начала освоил SPI на STM32. Потом начал изучать документацию на чип, но к моему сожалению, в ней описано только как подключается чип, протоколы обмена с МК (SPI, USART, I2C), краем упомянут протокол общения с картой и дано описание регистров. Но самое важное для меня - порядок инициализации и чтения/записи с/на карту я не нашел.
После этого были долгие поиски инфы в сети, но дальше библиотек ардуины уйти не удавалось (а понять ардуины код для меня как полет в космос). Через два дня я наткнулся на библиотеку под STM (к сожалению уже не помню где ее взял) для этого считывателя, и все пошло в гору, как я подумал. Но не тут то было.
Из библиотеки я честно спёр инит. На этом я и остановился. Вот инит:
Код:
void MFRC522_init (void)
{
   MFRC522_write_register(MFRC522_REG_COMMAND, 0x0F); // RESET
   
   MFRC522_write_register(MFRC522_REG_T_MODE, 0x8D);
   MFRC522_write_register(MFRC522_REG_T_PRESCALER, 0x3E);
   MFRC522_write_register(MFRC522_REG_T_RELOAD_L, 30);           
   MFRC522_write_register(MFRC522_REG_T_RELOAD_H, 0);
   MFRC522_write_register(MFRC522_REG_RF_CFG, 0x70);
   MFRC522_write_register(MFRC522_REG_TX_AUTO, 0x40);
   MFRC522_write_register(MFRC522_REG_MODE, 0x3D);

   if (!(MFRC522_read_register(MFRC522_REG_TX_CONTROL) & 0x03)) {MFRC522_set_bits_of_register(MFRC522_REG_TX_CONTROL, 0x03);} // Antenna ON
}

Хотя я и могу понять, какие биты мы устанавливаем при ините и в какой регистр, но почему именно так - для меня загадка. Ну да и черт с этим - инициализация простая и работает.
Далее я спер еще часть кода с библиотеки и переделал ее под себя. В итоге получилось такое чудо, которое выдает мне один непонятный байт в str[0] и четыре байта, как я понял, серийного номера карты в str[1] - str[4]. Больше и ничего не должно быть (как я полагал на тот момент, но опять ошибся) и я полез искать регистры, с которых считываются 4 байта серийного номера, но конечно же, их нет.
После изучения принципов работы Mifare и этой библиотеки появились следующие вопросы:
1) Перед тем как запросить данные с карты в библиотеке в FIFO RC522 (по адресу 0x09) записываются числа 0x93 и 0x20. После этого мы получаем серийный номер карты. Как эти числа заставляют карту прислать данные с нулевого сектора нулевого блока? И где вообще посмотреть данные по посылаемым карте командам?
2) Как нам отличить один тип карты от другого? К примеру: в моей карте UID состоит из 4-х байт, поэтому я и прочту только 4 байта. А если я поднесу карту с UID из 7-ми байт, то прочту только 4 байта и получу хрень на выходе. Как этого избежать?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июн 06, 2017 01:38:49 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Зарегистрирован: Вс июн 26, 2011 21:03:21
Сообщений: 2260
Рейтинг сообщения: 0
Чем дальше в лес, тем страшнее черти :) . Кто-нидь в курсе, зачем у MFRC522 встроен таймер? В даташите только описание и ничего конкретного...


Вернуться наверх
 Профиль  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Ср июн 07, 2017 02:00:08 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Зарегистрирован: Вс июн 26, 2011 21:03:21
Сообщений: 2260
Рейтинг сообщения: 0
Ну раз никто не отвечает, то отвечу сам :) . Для того, в частности, чтоб контролировать зависание при выполнении некоторых действий. В моем случае контролировалось поступление данных в FIFO от карты. Если ответ задерживался, то возникало переполнение таймера и выставлялся флаг возникновения прерывания.
Чтож в SPI не додумались такое воткнуть, чтоб не висеть в цикле проверки RXNE когда отрывается Slave :) .


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Ср июн 07, 2017 09:37:13 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Чтож в SPI не додумались такое воткнуть, чтоб не висеть в цикле проверки RXNE когда отрывается Slave :) .

А прерывание никак не включить?
:)

Вчера только читал про SPI в Cortex M3 (я относительно недавно начал ковырять АРМы), т.к. тоже имею сабжевую платку и хочу ее попробовать. Так вот, как подсказывает мне мой склероз, в МК есть прерывания на пустой ТХ буфер, НЕ пустой RX буфер и всякие ошибки (CRC, overrun и чего-то там еще). Так что можно на дисплее (если он есть) показывать какой-нибудь мультик пока не получен ответ от считывателя (слейва). Также у него (522-го) еще отдельный выход IRQ есть, но пока не дочитал до него и не знаю по каким событиям он может дергаться и дергать хост.

Писать пока не начинал, только изучаю 522-й теоретически.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Ср июн 07, 2017 18:19:24 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Зарегистрирован: Вс июн 26, 2011 21:03:21
Сообщений: 2260
Рейтинг сообщения: 0
Для общения с Rc522 иногда нужно послать 8 байт и сделать строб, а иногда послать два раза по 8 байт и только потом делать строб. Вот на фоне всей этой фигни и рождается жуткий гемор в прерываниях SPI. Там ведь всего 3 флага прерываний.
У 522 есть целый регистр для активатиции выхода irq при возникновении того или иного прерывания. Фича полезная, если связать с внешним прерыванием МК, то можно разгрузить процессор. Сам правда пока им ре пользовался.
Сейчас застрял на антиколлизии. При поднесении двух меток в буфере оказывается всякая хрень, но флаг обнаружения коллизии не выставляется.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Пт июн 09, 2017 19:44:30 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Зарегистрирован: Вс июн 26, 2011 21:03:21
Сообщений: 2260
Рейтинг сообщения: 0
Оказалось, что в карточках одного типа бит коллизии установлен в одном и том же месте, поэтому коллизии не происходит.
Добился выбора карты, аутентификации и чтения/записи из EEPROM, однако это происходит только один раз. Повторный цикл антиколлизии возможен только после перезагрузки устройства. Не могу никак победить проблему....


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Ср июн 28, 2017 19:30:04 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Для начала освоил SPI на STM32. Потом начал изучать документацию на чип, но к моему сожалению, в ней описано только как подключается чип, протоколы обмена с МК (SPI, USART, I2C), краем упомянут протокол общения с картой и дано описание регистров. Но самое важное для меня - порядок инициализации и чтения/записи с/на карту я не нашел.

Вот и я так же. С SPI на STM32F103 вчера разобрался наконец-то (ну они и намудрили с ногой NSS!), подключил модуль MFRC522 к МК, сконфигурировал SPI2 и загрустил. Такого бестолкового ДШ я еще не видел, у китайцев и то лучше!
Мне не хочется пионерить чей-то инит, хочу чтоб производитель (NXP) сам мне о нем рассказал. Сейчас пошарю у них на сайте на предмет AN.
В сети, как я навскидку заметил, все юзают готовые библиотеки, которые я не люблю, но никто не описывает, как с этим чипом общаться.

Кстати, они там пишут про автоопределение интерфейса (SPI / I2C / UART).
В таблице в графе по SPI указано I2C (pin 1) = 0, EA (pin 32) = 1. Это надо такие уровни выставить на них?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Чт июн 29, 2017 16:21:05 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Кстати, они там пишут про автоопределение интерфейса (SPI / I2C / UART).
В таблице в графе по SPI указано I2C (pin 1) = 0, EA (pin 32) = 1. Это надо такие уровни выставить на них?

Судя по схеме и визуальному осмотру платы, на плате уже все предусмотрели, т.е. распиновка сделана под SPI.

А вот с документацией у них действительно очень плохо. Если не гуглить сабж, а просто через сайт NXP попытаться найти ДШ на чип, то оказываешься в дебрях невиданных. Я так и не вышел на страницу с чипом, на которой была бы ссылка на документацию.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вс июл 09, 2017 10:03:06 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
А я ковыряю подключение через UART. В МК ног не хватает для SPI (заняты под другие цели), переделать модуль под I2C не решился, т.к. нужно сдувать микросхему и под ней перерезать дорожку, а вот переделать под UART легко.
Подключил к USB-UART переходнику через согласование.
Вот мучаюсь хоть что-то от модуля получить...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вс июл 09, 2017 10:46:51 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
А еще меня смущает то, что на моем чипе не видно маркировки :(
Я получал плату в период сложных личных обстоятельств и не обратил на это внимание. Теперь вот думаю, если чип мне не будет отвечать это из-за моей ошибки в программе, или потому что я общаюсь с простым куском керамики?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вс июл 09, 2017 13:25:24 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
Подключился на скорости 9600
Посылаю в модуль код.
Для понимания буду писать так: первая строка это байты, которые нужно послать, а вторая строка это то, что реально посылаю (после сдвига адреса).

Коды беру из первого сообщения темы.
Сброс:
01 0F
02 0F
Ответа нет

Инициализация:
2A 8D 2B 3E 2D 30 2C 00 26 70 15 40 11 3D
54 8D 56 3E 5A 30 58 00 4C 70 2A 40 22 3D
Ответа нет

Добавлено after 1 hour 32 minutes 54 seconds:
Начало есть!!!
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Пн июл 10, 2017 10:39:54 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
Нашел ошибку: в программе не установил галку. Теперь походу правильно отвечает:
Изображение
Осталось понять, что означают эти ответы...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Пн июл 10, 2017 11:59:36 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Почитайте страницы 13-16, там про формат команды. А потом загляните в таблицу адресов на страницах 36-37.
У вас второй запрос начинается с 0х54, тогда как адресация там 6-битная, до 0х3F. Бит 7 говорит о чтении по адресу (=1) или записи по нему (=0). Бит 6 - reserved. Для адреса остаются только младшие 6 битов.
Следовательно 0х54 должен восприниматься чипом как 0х14, причем как запись в него. Это TxControlReg: "controls the logical behavior of the antenna driver pins TX1 and TX2". Значит следующим за ним байт - это конфигурация этого регистра.
Таким же методом пройдитесь по остальным командам и таблицам с адресами в ДШ.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Пн июл 10, 2017 19:18:03 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
Спасибо, это я уже понял.
Теперь с ответами разобраться бы. Я так понимаю, что на команду 54 8D (см. скриншот выше) чип отвечает 54. И похоже он всегда возвращает код команды?
Хотя один раз я то-то ему послал, так всегда стал возвращать посылаемое значение. После отключения питания ответ вернулся кодом команды


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Пн июл 10, 2017 20:07:53 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Изображение
Изображение

Ну вот смотрите. Судя по таблицам, если адрес записывающий (следующий за ним байт конфигурирующий), то адрес в ответ повторяется.
В случае чтения идет ответ содержимого регистра по адресу.

Попробуйте отправить 0x37 и посмотрите на ответ. Самому интересно :)

Добавлено after 2 minutes 6 seconds:
Пардон, не 0x37, а 0xB7. Забыл про единицу в старшем бите.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июл 11, 2017 13:33:26 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
Ага, мои догадки оказались верными!

И не 0xB7:
0x37<<1 = 0x6E
0x6E | 0x80 = 0xEE
Изображение

Чтоб не мучать МК перепрошивками делаю программу для Windows.

Добавлено after 2 hours 38 minutes 40 seconds:
Еще одна непонятка: контрольная сумма нужна в командах или это только при записи в карту блока данных?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июл 11, 2017 14:37:14 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
А сдвиг зачем?
:shock:
Сдвиг используется при работе через SPI (по I2C особо не вникал).

В ответ на 37h (в правильной посылке) может быть только 2 ответа: 91h или 92h, т.е. 1 или 2 версия чипа. Ваш ноль - это скорее всего свидетельство ошибочной команды

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июл 11, 2017 20:52:16 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
А сдвиг зачем?

Вот из скетча:
Код:
void MFRC522_WriteRegister(uint8_t addr, uint8_t val) {
   addr = (addr << 1) & 0x7E;                                                      // Address format: 0XXXXXX0
    SPI1_WriteReg(addr, val);
}

uint8_t MFRC522_ReadRegister(uint8_t addr) {
   uint8_t val;

   addr = ((addr << 1) & 0x7E) | 0x80;
   val = SPI1_ReadReg(addr);
   return val;   
}


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июл 11, 2017 20:57:45 
Электрический кот
Аватар пользователя

Карма: 20
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 1029
Откуда: Баку
Рейтинг сообщения: 0
Так я же говорю, что сдвиг для SPI нужен, но не для UART. Там в скетче как раз SPI и упоминается.
Не сдвигайте. Команды записи отправляйте как есть, а команды чтения с выставлением MSB.

Это для SPI. У него младший бит в нуле всегда, старший такой же, как и для UART.
Изображение

Это для UART. На него и ориентируйтесь.
Изображение

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Ковыряем RFID Mifare и MFRC522
СообщениеДобавлено: Вт июл 11, 2017 22:04:14 
Опытный кот

Карма: 5
Зарегистрирован: Пн апр 11, 2011 11:08:52
Сообщений: 710
Рейтинг сообщения: 0
Отправляю B7 00 - что-то ерунду возвращает:
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу 1, 2, 3, 4, 5, 6  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: mr_kot и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y