-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
1

Как послать apdu с помощью модуля rc522 на смарт карту?

23.05.2017, 05:56. Показов 3746. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
у кого ни будь есть рабочий пример?
в отличии от pn532 где очень удобно реализованна функция inDatExchange, у модуля rc522 как я понял за это отвечает PCD_TransceiveData.
Нет ни одного примера работы или детального описания.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2017, 05:56
Ответы с готовыми решениями:

Работа с командами APDU. Получение данных со смарт карт
Здравствуйте, необходима информация по работе с APDU командами, а именно какие команды нужно...

Номер чипа смарт-карты mifare, команда APDU
Передо мной стоит задача: используя библиотеку javax.smartcardio считать серийный номер чипа...

RC522 не видит карту
Ситуация такова: Пришел ко мне модуль RFID "RC522" с алиэкспресса. Я распаковал, посмотрел,...

как разблокировать смарт карту типа ключ
День добрый имеется мини пк Aquarius tcc s60-10 в нем имеется смарт карты типа флешек один внутри...

Считыватель RFIF RC522 из под STM32L476 не видит карту
Использовал доработанную библиотеку от http://stm32f4-discovery.net/2014/07/li ... x-divices/ ...

15
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.05.2017, 13:05 2
https://developer.mbed.org/use... RC522.html
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
23.05.2017, 19:27  [ТС] 3
спасибо, я видел это, я записываю в byte *sendData свою команду, но в byte *backData пусто.
вы, как единственный человек с четырех форумов где я разместил это объявление, могли бы натолкнуть меня на нужный вектор мышления?
правильно ли использовать PCD_TransceiveData или всетаки надо PCD_CommunicateWithPICC ?

Добавлено через 5 минут
Могу ли я обратится к вам в ЛС или по альтернативным каналам связи чтобы показать свой код? тут выкидывать этот позор на обозрение стесняюсь)
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
24.05.2017, 10:45 4
Цитата Сообщение от SadiQ228 Посмотреть сообщение
я записываю в byte *sendData свою команду, но в byte *backData пусто.
а как Вы записываете? Вы понимаете, что byte *sendData указатель?
Цитата Сообщение от SadiQ228 Посмотреть сообщение
Могу ли я обратится к вам в ЛС или по альтернативным каналам связи чтобы показать свой код?
это нарушение правил форума, да и не интересно мне отвечать в личку.
Я кстати не работаю с ардуиной, хотя свою библиотеку для STM8, STM32 делал на базе ардуиновского кода, но все функции у меня переименованы (заказчик должен видеть работу программиста, а не копи паст )
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
31.05.2017, 02:28  [ТС] 5
а как там можно записать то еще?) ну указатель да, но указательно напервый элемент массива же?
таким образом например
byte sendData[255] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
является по моему мнению легитимной записью ведь так? поправьте если нет.

Добавлено через 13 минут
вот все параметры мои;
C
1
2
3
4
5
6
7
8
byte sendData[255] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
byte sendLen = sizeof(sendData);
byte backData[255] = { 0 };
byte backLen = [255] = { 0 };
byte validBits = NULL;
byte rxAlign = 0;
bool checkCRC = false;
byte waitIRq = 0;
сама команда является верной сто про так как я ее отправлял в ручную на карту и получал ответ через приложения для андроида

Добавлено через 2 часа 36 минут
выкладываю свой код который должен но не работает
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <SPI.h>
#include <MFRC522.h>
 
#define RST_PIN         9           // Configurable, see typical pin layout above
#define SS_PIN          10          // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance
//*****************************************************************************************//
 
void setup() {
  Serial.begin(9600);                                  // Initialize serial communications with the PC
  SPI.begin();                                         // Init SPI bus
  mfrc522.PCD_Init();                                  // Init MFRC522 card
  Serial.println(F("Awaiting you Card..."));           //shows in serial that it is ready to read
}
 
//*****************************************************************************************//
 
void loop() {
  // ждем новую карту
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
byte sendData[255] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
byte sendLen = sizeof(sendData);
byte backData[255] = { 0 };
byte backLen = 255;
byte validBits = NULL;
byte rxAlign = 0;
bool checkCRC = false;
mfrc522.PCD_TransceiveData(sendData,sendLen,backData,backLen,validBits,rxAlign,checkCRC);
{
byte waitIRq = 0x30;    // RxIRq and IdleIRq
return mfrc522.PCD_CommunicateWithPICC(mfrc522.PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC);
if (mfrc522.StatusCode::STATUS_OK){
  Serial.write(backData,sizeof(backData)); 
}
}
return;
}
//*****************************************************************************************//
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
31.05.2017, 10:42 6
Вы уверены что аппаратно подключили всё верно? Модуль питается 3.3 вольта, а ардуина 5 вольт. Ставили дополнительный стабилизатор на 3.3 вольта?
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
31.05.2017, 18:40  [ТС] 7
я подключил все абсолютно правильно, так как другие скетчи у меня работают без проблем.
вот схема подключения.... за исключением одной маленькой детальки... модуль не видит интерисующих меня карт на 3.3v, таких как например MIFARE Plus EV1 или например банковские карты paypass (ISO 7816-4), я долго перепаивал и подбирал кондеры, но в итоге ограничелся перетыкание vcc на 5v. карты интерисующие меня опознаются и с другими картами все работает корректно, думается мне ошибка у меня в коде....
В ардуиновской среде не т отладки и я не могу точно уивдеть где дал маху, но я поставил delay(100); и точно вижу что карту оно видит так как перестает мигать!!!!
Прикладываю схему.. у меня все по ней за исключением питания... питание у меня на пятерке!
Миниатюры
Как послать apdu с помощью модуля rc522 на смарт карту?  
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
31.05.2017, 19:07 8
Из мануала на чип:
Remark: The MFRC522 supports all variants of the MIFARE Mini, MIFARE 1K,
MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 and MIFARE Plus RF
identification protocols. To aid readability throughout this data sheet, the MIFARE Mini,
MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 and MIFARE Plus
products and protocols have the generic name MIFARE.
Вы пишите
Цитата Сообщение от SadiQ228 Посмотреть сообщение
MIFARE Plus EV1
допустим Вы ошиблись и имеете ввиду "MIFARE Plus", но тут не подскажу, у меня поддержка только S50 и S70
Цитата Сообщение от SadiQ228 Посмотреть сообщение
paypass (ISO 7816-4)
а такие чип не поддерживает, по крайней мере я в мануале не нашел
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
31.05.2017, 19:12  [ТС] 9
Чип такие определяет..а занчит и может послать на них команду ( или не значит?) манул мануалом но есть и не документированные фишки)))), вы уверены что в коде у меня нет ошибок?
Миниатюры
Как послать apdu с помощью модуля rc522 на смарт карту?  
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
31.05.2017, 19:21  [ТС] 10
ISO 7816-4 это описание протокола транспортировки команды... ну у меня в соответствии с этим стандартом составлена команда ошибок быть не может.
а ISO 14443-4 это как раз те самые интерисующие меня карты на которые надо послать команду и получить ответ.
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
01.06.2017, 10:34 11
Цитата Сообщение от SadiQ228 Посмотреть сообщение
вы уверены что в коде у меня нет ошибок?
Цитата Сообщение от Витальич Посмотреть сообщение
Я кстати не работаю с ардуиной
а на своей плате попробовать не могу из-за отсутствия у меня данных карт.
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
01.06.2017, 16:09  [ТС] 12
У меня есть небольшой успех, карта наконец то мне стала хоть что то отвечать, однако отвечает не по русски) есть мысли по поводу того как вместо этого мусора получить именно байты красивые?
Миниатюры
Как послать apdu с помощью модуля rc522 на смарт карту?  
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
01.06.2017, 16:13 13
Может у Вас кодировка в терминале слетела?
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
01.06.2017, 20:11  [ТС] 14
да нет к сожалению
это я читаю мусор который я забыл обнулить в массиве
щас я добавил
C
1
memset(backData,0,sizeof(backData));
и вывожу в консоль вот так:
C
1
2
3
for (byte i=0; i< sizeof(backData); i++){
  Serial.println(backData[i], HEX);
}
получаю чертовы нули... вопрос остается открыт... помогите разобраться)

Добавлено через 4 минуты
вот мой итоговый код который должен но не работает...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <SPI.h>
#include <MFRC522.h>
 
#define RST_PIN         9           // Configurable, see typical pin layout above
#define SS_PIN          10          // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance
//*****************************************************************************************//
 
void setup() {
  Serial.begin(9600);                                  // Initialize serial communications with the PC
  SPI.begin();                                         // Init SPI bus
  mfrc522.PCD_Init();                                  // Init MFRC522 card
  Serial.println(F("Awaiting you Card..."));           //shows in serial that it is ready to read
}
 
//*****************************************************************************************//
 
void loop() {
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    delay(50);
    return;
  }
byte sendData[20] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
byte sendLen = sizeof(sendData);
byte backData[255];
memset(backData,0,sizeof(backData));
byte backLen = sizeof(backData);
//*****************************************************************************************//
mfrc522.PCD_TransceiveData(*sendData,sendLen,*backData,backLen,NULL,0,false);
{
byte waitIRq = 0x30;    // RxIRq and IdleIRq
mfrc522.PCD_CommunicateWithPICC(mfrc522.PCD_Transceive, waitIRq, *sendData, sendLen, *backData, backLen, NULL,0,false);
}
for (byte i=0; i< sizeof(backData); i++){
  Serial.println(backData[i], HEX);
}
}
//*****************************************************************************************//

кстати подскажите.... разве в СИ отсчет элементов массива начинается не с нуля?
вот у меня массив на двадцать байт, я пишу:
C
1
byte sendData[20] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
и все работает,
я пишу:
C
1
byte sendData[19] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
и оно не компилируется как так?
0
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
08.06.2017, 08:07  [ТС] 15
Витальич, не нашел карт подходящих?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
08.06.2017, 08:23 16
Я их и не искал, будет заказчик тогда и озабочусь, а так заняться времени нет.
0
08.06.2017, 08:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2017, 08:23
Помогаю со студенческими работами здесь

Корявое чтение карты c модуля RC522
Всем доброго времени суток суть проблемы заключается в след. попробовал перезаписать свой пропуск...

Не записывает на смарт карту
Поднял центр сертификации на виндоус сервер 2008 р2, теперь создаю шаблоны смарткарта пользователя...

Как послать двоеточие (:) с помощью SendKeys?
Здрасте, у меня никак не посылается двоеточие. Всё время шлётся ^, как будто я зажал шифт....

Как с помощью WinSock послать файл?
Kak s pomos`u WinSock poslat` fail? u menya est` Server i clent prilozenia, i ya hocu s Client...

как с помощью JMS послать XML сообщение ?
Народ кто знает , как с помощью JMS послать XML сообщение ? В одной доке нашёл , что для XML в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru