Mad-man 0 30 мая, 2014 Опубликовано 30 мая, 2014 · Жалоба Народ, а никто не работал к катайскими платами с чипом RC522, разведеными под SPI интерфейс вот такой, полько плата синяя, http://robocraft.ru/blog/3004.html схематика аналогичная, полько разводка немного другая Есть проблемы Вопрос 1. Какой режим SPI нужен? У меня работает (ну как работает? читается регистр version = 0x92 ) в режиме 0 (фаза 0 и полярити 0) и 3 (фаза 1 и полярити 1) режимы 1 и 2 походу не работают. Из доков вижу что MOSI должен быть стабильным в SCK = HI о фазе ни слова. вопрос 2. Rst как я понимаю должен быть = 1. Вопрос 3. Основная проблема. Не читаются карты. Взял китайский код (который у всех работает судя по количеству ссылок на него). https://github.com/miguelbalboa/rfid в функции PCD_CommunicateWithPICC в цикле while (1) { n = PCD_ReadRegister(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq if (n & waitIRq) { // One of the interrupts that signal success has been set. break; } if (n & 0x01) { // Timer interrupt - nothing received in 25ms return STATUS_TIMEOUT; } if (--i == 0) { // The emergency break. If all other condions fail we will eventually terminate on this one after 35.7ms. Communication with the MFRC522 might be down. return STATUS_TIMEOUT; } } опрашиваются прерывания на наличие RxIRq бита в регистре ComIrqReg. Функцию я зациклил и сделал респечатку. Висят прерывания LoAlertIRq, TimerIRq по RxIRq прерываний нет. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_dnz 0 29 июля, 2014 Опубликовано 29 июля, 2014 · Жалоба Народ, а никто не работал к катайскими платами с чипом RC522, разведеными под SPI интерфейс [skip] опрашиваются прерывания на наличие RxIRq бита в регистре ComIrqReg. Функцию я зациклил и сделал респечатку. Висят прерывания LoAlertIRq, TimerIRq по RxIRq прерываний нет. В чем может быть проблема? +1 та же проблема :( использую исходники @file MFRC522.cpp @author Bjarte Johansen @licence ljos.mit-license.org SPI Driver for MFRC522 NFC/13.56 RFID Transceiver. Based on code by Dr.Leong ( WWW.B2CQSHOP.COM ) and Miguel Balboa (https://github.com/miguelbalboa/rfid). SPI работает, могу читать писать в регистры Start tests------------- RFID via SPI1 start to test Looking for MFRC522. Found chip MFRC522 Firmware ver.146. Digital self test by MFRC522 passed. Read registers inside RC522 in register 0x16 we wait 0x10 (16), have = 16 in register 0x18 we wait 0x84 (132), have = 132 in register 0x19 we wait 0x4d (77), have = 77 Card not detected. RFID via SPI1 end of test End tests ни одной карты прочесть не могу :( Возможно оно - невозможно записать в регистры: вот выыод того, что писали и что прочитали (в десятичной системе):( TModeReg, 0x8D -> 0 TPrescalerReg, 0x3E -> 0 TReloadRegL, 30 -> 0 TxAutoReg, 0x40 -> 0 ModeReg, 0x3D -> 59 TxControlReg, 0x03 -> 128 +1 та же проблема :( проблема решена правильной инициализацией спи. без выставления в какое либо значение ног. правильное значение регистров в рабочем положении: TModeReg, 0x8D -> 0 TPrescalerReg, 0x3E -> 0 TReloadRegL, 30 -> 30 TxAutoReg, 0x40 -> 64 ModeReg, 0x3D -> 61 TxControlReg, 0x03 -> 131 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 30 июля, 2014 Опубликовано 30 июля, 2014 (изменено) · Жалоба использую исходники @file MFRC522.cpp @author Bjarte Johansen @licence ljos.mit-license.org Попробовал код этого автора, https://github.com/ljos/MFRC522 скетч authenticate.ino в экзамплах чтобы уж на 100% чистый эксперимент без кодопеределок взял arduino nano, со следующей конфигурацией. MISO -> MISO D12 SCK -> SCK D13 SS (SDA) -> SS D10 , это было по-умолчанию в скетче MOSI-> MOSI D11 RST - > D5, это было по-умолчанию в скетче 3.3 -> VCC 3.3 GND ->GND ---------->8------------------------------------------ #define SAD 10 #define RST 5 MFRC522 nfc(SAD, RST); ---------->8------------------------------------------ После запуска в терминале. Looking for MFRC522. Found chip MFRC522 Firmware ver. 0x92. Т.е. регистры видимо читаются, но ноль реакции на метки. код даже смотреть не хочется, они все под китайскую копирку, да и тошнит уже от RC522, уже весь мануал скурил что-то мне кажется что желторотые что-то не то мне подсунули, это уже уже второй RFID считыватель, думал с первым что-то не то. неужели у всех все работает и никогда такой хрени не было????????? ну и еще добавил 2 скрина "работоспособности" устройства, RST PIN здесь перекинут на D9, по-умолчанию был тоже D10 скетча DumpInfo c https://github.com/miguelbalboa/rfid Изменено 30 июля, 2014 пользователем Mad-man Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 30 июля, 2014 Опубликовано 30 июля, 2014 (изменено) · Жалоба Регистры читаются и пишутся ок, добавил и в этом скетче дамп регистров для успокоения Looking for MFRC522. TModeReg= 0x8D TPrescalerReg= 0x3E TReloadRegL= 0x1E TxAutoReg= 0x40 ModeReg= 0x3D TxControlReg= 0x83 Found chip MFRC522 Firmware ver. 0x92. после выполнения void MFRC522::begin() { digitalWrite(_sad, HIGH); reset(); //Timer: TPrescaler*TreloadVal/6.78MHz = 24ms writeToRegister(TModeReg, 0x8D); // Tauto=1; f(Timer) = 6.78MHz/TPreScaler writeToRegister(TPrescalerReg, 0x3E); // TModeReg[3..0] + TPrescalerReg writeToRegister(TReloadRegL, 30); writeToRegister(TReloadRegH, 0); writeToRegister(TxAutoReg, 0x40); // 100%ASK writeToRegister(ModeReg, 0x3D); // CRC initial value 0x6363 setBitMask(TxControlReg, 0x03); // Turn antenna on. } TxControlReg имеет значение по умолчанию 0x80, поэтому ОК Изменено 30 июля, 2014 пользователем Mad-man Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Omega 0 18 марта, 2016 Опубликовано 18 марта, 2016 · Жалоба последнему сообщению тут уже два года. По этому скорее всего топик-стартер порешал свои вопросы. Но все же решусь написать, что недавно купленная китайская плата у меня работает исправно, с китайскими скетчами. Если есть какие-то пожелания на предмет проверки чего либо на моей плате- прошу дать знать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
АлександрК 0 29 марта, 2016 Опубликовано 29 марта, 2016 · Жалоба Вопрос всем знающим: как сбросить биты прерывания в регистре ComIrqReg? После включения MFRC522 все регистры читаются с начальными значениями, как указано в ДШ. После выполнения самотестирования запускаю прерывание от таймера с выводом на вывод IRQ. Регистр ComIrqReg читается как 7F. Сбросить не могу ни записью 0 ни записью 1. Выполняю команду SoftReset после самотестирования-значение ComIrqReg 14h (начальное значение после сброса). Далее запускаю таймер - одно прерывание происходит и в регистре ComIrqReg устанавливается значение 15h (устанавливается бит прерывания от таймера). И вот этот бит не могу ничем сбросить. При этом таймер продолжает считать (контролировал состояние регистра TCounterValReg). Или чего то не дочитал, или не все в ДШ описано (порядок работы с регистрами). Благодарю всех откликнувшихся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
АлександрК 0 29 марта, 2016 Опубликовано 29 марта, 2016 · Жалоба Свой вопрос решил. Сбрасывать биты прерываний нужно записью 1 в нужный разряд или во все разряды, кроме 7-го (в регистре ComIrqReg). Если в регистр писать FFh, то биты прерывания не сбрасываются. Может кому пригодится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 8 августа, 2018 Опубликовано 8 августа, 2018 · Жалоба Чтобы не плодить темы по модулю напишу тут. Читаю версию чипа и результат какой-то совсем не тот, который должен быть. Читает 0x12 (18 десятичное). Самотестирование не запускается. Кто с таким сталкивался? Как вообще проверить работоспособен ли чип? Прикрепил скрины с осциллографа. Первый снимок - это отправка адреса по MOSI и тактовая, второй - тактовая и ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 8 августа, 2018 Опубликовано 8 августа, 2018 (изменено) · Жалоба Если есть Arduino, или хотя бы AVR тех-же моделей что для Arduino применяются - подключите плату к таком контроллеру, прошейте готовым "скетчем", и таким образом должно провериться. Можно будет осциллографом "подсмотреть" правильный обмен данными на шине. Я наловчился проверять подобные платы именно так. Специально купил простенькую Arduino, заливаю в неё "скетчи" которых полно на сайтах, и проверяю на работоспособность. Заодно снимаю готовые дампы инициализации устройств, при необходимости. Только у меня не осциллограф, а логический анализатор Saleae Logic. Изменено 8 августа, 2018 пользователем controller_m30 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 8 августа, 2018 Опубликовано 8 августа, 2018 · Жалоба Ну я тоже об этом подумываю. А то уже второй раз натыкаюсь на модуль, который вроде бы прост, но ошибешься где-то в одной мелочи, которая написана в одном месте огромного даташита, и все - не работает ничего. Первый раз тоже только сравнением с работающим протоколом нашел свою ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 8 августа, 2018 Опубликовано 8 августа, 2018 · Жалоба Я скачивал несколько скетчей под эту плату, и результат был разный. Один скетч почему то не видел плату, другой не видел карт, третий некоторые карты читал с ошибками, и т.д. Поэтому нужно будет попробовать несколько вариантов с разных сайтов. PS. Пробовал и сам разобраться с инициализацией этой платы. Но настройки каких-то: модуляторов, режимов их работы, и т.д. оказались задачей для меня сложной. Тогда я стал искать готовый дамп настроек (не нашёл), а потом прибег к "читерству" - купил Ардуину :biggrin: и снял протокол оттуда. PPS. В режиме UART протокол обмена у этого чипа ещё проще и нагляднее. Кстати! Каким устройством вы формируете SPI команды? Насколько помню, требуется удерживать SS=0 на всё время передачи команд и данных. А то у некоторых контроллеров сигнал SS деактивируется после каждого байта, и из-за этого вполне могут быть неверные данные при обмене. А ещё попробуйте считать значения других регистров после сброса. В даташите у некоторых из них есть значения отличные от 00. И по результатам такого считывания можно будет более определённо судить, что и почему происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 8 августа, 2018 Опубликовано 8 августа, 2018 · Жалоба Каким устройством вы формируете SPI команды? Насколько помню, требуется удерживать SS=0 на всё время передачи команд и данных. А то у некоторых контроллеров сигнал SS деактивируется после каждого байта, и из-за этого вполне могут быть неверные данные при обмене. STM32L4_NUCLEO144 отладочная плата. Чип селект в режиме GPIO в ноль устанавливаю перед передачей адреса и возвращаю в 1 уже после чтения второго байта. Вот тут http://forum.amperka.ru/threads/rfid-rc522.12744/ пишут что это чип китайский. Он такую версию выдает. Но уровни у меня 3,3В и меня это волновать не должно. Пока застрял на самотестировании чипа. Наверно, надо проверить другие его функции. Может быть китайцы в копии урезали то что не относится непосредственно к работоспособности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 10 августа, 2018 Опубликовано 10 августа, 2018 · Жалоба P.S. Отредактировал ардуиновскую либу в обычный язык си. Чтение UID работает отлично. Так что модуль рабочий, хоть и с совсем другим (малоизвестным) номером версии чипа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 7 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба Разыскиваю референсную реализацию процедуры антиколлизии для mfrc522 для 7 и 10 байтных uid. Антиколлизия в библиотеке https://github.com/miguelbalboa/rfid у меня не работает. После первой коллизии происходит сдвиг в буфере uid на 1 байт да и бит коллизии тоже в библиотеке сдвинут на 1. Абсолютно все что гуглится - клоны miguelbalboa без каких либо изменений. Я у себя исправил но не уверен что правильно, хотелось бы взглянуть на образцовую реализацию. Протестировать пока не понятно как, например сейчас я сомневаюсь в правильности обработки коллизии если она попадает ровно на границу байтов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться