Форум программистов, компьютерный форум, киберфорум
Наши страницы
Arduino
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
1

тривиальная apdu команда и неверный ответ карты

02.10.2017, 03:13. Просмотров 785. Ответов 14
Метки нет (Все метки)

модуль pn532 подключенный к arduino по протоколу i2c наконец то заработал.
однако посылая карте команду, я получая не то что хочу увидеть какой ни будь ответ с SW1SW2 из этого списка:
Кликните здесь для просмотра всего текста

SW1SW2 Значение
Успешное исполнение
9000 ОК.
61ХХ ОК, но есть еще ХХ байтов данных.
Исполнение завершилось с замечаниями
62ХХ SW2 уточняет причины замечания. Постоянная память не была изменена.
63ХХ SW2 уточняет причины замечания. Постоянная память была изменена.
Ошибки при исполнении команды
6400 Команда не была исполнена. Постоянная память не была изменена.
65ХХ Команда не была исполнена. Постоянная была изменена.
66ХХ Команда не была исполнена по причинам безопасности.
Ошибки, связанные с форматом команды
6700 Неправильная длина команды.
6881 Карта не поддерживает указанный логический канал.
6882 Карта не поддерживает указанный вид Secure Messaging.
69XX Команда не разрешена.
6AХХ Неправильные параметры команды.
6B00 Неправильные параметры команды.
6CXX Неправильный Le.
6D00 Неизвестный INS.
6E00 Неизвестный CLA.
6F00 Ошибка без описания.


для простоты и чистоты эксперемента я решил взять свою карту мастеркард, сначала скачал приложение для телефона, уж не помню как называется, но в нем я сверился с правильностью формирования мною apdu команды, тоесть в синтаксической части посылаемой команды ошибки быть не може вот она:

Код
0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00
на одном известном сайте есть инфографика, где расписывается по байтово каждый элемент команды а так же ответ карты на эту команду:
Кликните здесь для просмотра всего текста
Код
PCD     Select File
            CLA: 00
            INS: A4
            P1: 04
            P2: 00
            Lc: 0E
            Data: 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 // Select PPSE (2PAY.SYS.DDF01)
            Le: 00
PICC    Successful
            Data (37 bytes)
                Tag 6F:FCI Template
                Length:23
                Value :84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 
                       A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 04 10 10 
                       87 01 01
                    Tag 84:Dedicated File (DF) Name
                    Length:0E
                    Value :32 50 41 59 2E 53 59 53 2E 44 44 46 30 31
                    Tag A5:FCI Proprietary Template
                    Length:11
                    Value :BF 0C 0E 61 0C 4F 07 A0 00 00 00 04 10 10 87 01 
                           01
                        Tag BF0C:FCI Discretionary Data
                        Length:0E
                        Value :61 0C 4F 07 A0 00 00 00 04 10 10 87 01 01
                            Tag 61:Application Template
                            Length:0C
                            Value :4F 07 A0 00 00 00 04 10 10 87 01 01
                                Tag 4F:Application Identifier
                                Length:07
                                Value :A0 00 00 00 04 10 10
                                Tag 87:Application Priority Indicator
                                Length:01
                                Value :01
                SW1 SW2: 90 00


сдается мне мой код срабатывает не верно прошу ознакомиться с ним и сказать что я делаю не так... а я точно что то делаю не так, так как ответ приходит не понятный более того это даже не похоже на ответ....
Hello!
Found chip PN532
Firmware ver. Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an ISO14443A card
Tag number: 1
responseLength: 7
DC 07 E4 00 00 07 A2 ⸮.⸮...⸮
а вот код который я использую, прошу указать на ошибки:
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
 
// If using the breakout with SPI, define the pins for SPI communication.
#define PN532_SCK  (2)
#define PN532_MOSI (3)
#define PN532_SS   (4)
#define PN532_MISO (5)
 
// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield
 
// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:
 
// Use this line for a breakout with a software SPI connection (recommended):
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);
 
// Use this line for a breakout with a hardware SPI connection.  Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.
//Adafruit_PN532 nfc(PN532_SS);
 
// Or use this line for a breakout or shield with an I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
 
void setup(void) {
  Serial.begin(115200);
  Serial.println("Hello!");
 
  nfc.begin();
 
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
  
}
 
 
void loop(void) {
  uint8_t success;
  Serial.println("Waiting for an ISO14443A card");
  
  // set shield to inListPassiveTarget
success = nfc.inListPassiveTarget();
if(success) {
  
  uint8_t apdu[] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
  uint8_t apduLength=sizeof(apdu);
  uint8_t response[255];
  uint8_t responseLength;
  success = nfc.inDataExchange(apdu, apduLength, response, &responseLength);
  Serial.print("responseLength: "); Serial.println(responseLength);
  nfc.PrintHexChar(response, responseLength);
}
    
  
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2017, 03:13
Ответы с готовыми решениями:

Неверный ответ примера
Дан пример: 2,25/1.125-0,5*0,875/(2,75+0,75). Не выходит верный ответ вообще, все что знал...

Вывести неверный ответ
Привет, можете помочь вывести неправильное кол-во ответов, тоесть я нашел алгоритм тестов и он...

выводит неверный ответ
#include &lt;iostream.h&gt; #include &lt;stdio.h&gt; const int n = 100; int main (int argc, char * const...

Программа выдаёт неверный ответ
program achoo; var a:array of integer; S,i,N:integer; begin For i:=1 to 50 do begin write...

Программа выдаёт неверный ответ
Помогите подправить программу, пожалуйста: Найти все двузначные числа, сумма цифр которых не...

14
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
08.10.2017, 18:33  [ТС] 2
прочитал тут где то что i2c может передавать только 32 байта за раз, значит ли это что нужно подключать по spi чтобы все заработало?
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 21:37 3
SadiQ228, подскажите получилось ли у вас по i2c получить данные? Или работает только SPI?
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 21:48  [ТС] 4
Только spi
Работает быстрее и приходит все рекомендую

Добавлено через 34 секунды
Наверное можно и по итуси но я разбираться не хотел
1
13.08.2019, 21:48
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 21:52 5
SadiQ228, засада, у меня rc522 от Амперки, она работает только по I2C, мучаюсь уже больше недели..
А можете скетчем (программой) поделится? Был бы очень благодарен Вам, а то малоли я что-то не так делаю.

У вас такая же проблема, что данные кривые приходят? Или у вас совсем они обрезались?
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 22:02  [ТС] 6
Rc522 spi поддерживает но чтобы отправить команду придётся постараться у меня почти получилось но вовремя пришёл модуль pn532 от elechous.
Бесплатно я ничем не делюсь, ну только разве что советами
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 22:08 7
SadiQ228, где можем пообщаться на счёт скетча?
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 22:10  [ТС] 8
мы же уже общаемся
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 22:19 9
Я ошибся в номере микросхеме, я использую PN532:
http://wiki.amperka.ru/%D0%BF%D1%80%...1%82%D1%8B:nfc

И вот этот скетч:
https://pastebin.com/hyBb1Zpq

Но почему-то, после запроса:
Код
00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
Я получаю:
Код
00 6F 2C 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 1A BF 0C 17 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FC 7E BC 87 DB BA 9B 79 FF A7 DD DE DD 9D 3C 7B F7 EA EC 2F B8 9F AB 4D DA 7A BA 7F 77 DD DF 9F F3 8B FB 2D FF C2 37 3D FD DF FB CA BE E7 FE AD AF E3 BA 99 CF F5 37 77 EF D9 83 EF F7 E3 5B 95 CA F7 85 FB AF FD BD FF 7D 7B D9 B6 BF B6 F7 8A BD EA 68 3E C8 7D EF DC 95 7C 7C EC D7 2D B2 B9 D5 AD 99 38 EB AB 06 48 FF 7E FB A4 FA 66 53 EA 5E 1B FF DF FB 70 8E 9D BA F4 BE 15 7A AA F6 65 BF EC DF BE 5F BA F9 3D 5D 00 00 A4 04 00 0E 32
Код
.o,..2PAY.SYS.DDF01.............................................................................................~.....y......<{.../...M.z.w......-..7=..............7w......[.........}{........h>.}...||..-.....8...H.~...fS.^....p......z..e...._..=]......2
Но при тесте на телефоне (credit card reader), после такого запроса должен быть другой ответ, не должно быть столько "FF", можете подсказать что я не так делаю?

Добавлено через 2 минуты
Скетч для SPI, но как я уже говорил я использую I2C, по этому в Adafruit_PN532 nfc передаю только два параметра.

И по какой-то причине у меня не работает он с использованием:
C++
1
nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)
По этому я использую:
C++
1
nfc.inListPassiveTarget()
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 22:32  [ТС] 10
изначаль тебе надо врубить опцию PN532DEBUG в либе, и пазырить че там да как

но я поробую заглянуть сквозь пространство и предположить что в файле Adafruit_PN532.cpp
у тебя навеное #define PN532_PACKBUFFSIZ 64 - это по умолчанию ( размер буфера)
измени на 128 и заработает)

Добавлено через 39 секунд
про I2С разбирайся сам, я юзаю SPI
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 22:49 11
Если бы всё было так просто, будь у меня такой маленький буфер, я бы не получил такое длинное сообщение.
Проблема именно в ответе я полагаю (по крайней мере он отличается от того который получается телефон).
Вот полный лог отправляемых команд и ответов:

Код
[READ]apdu(255):  00 6F 2C 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 1A BF 0C 17 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 33 ED 2F FE E7 E5 6F 10 F2 6F 5C 17 FF EE FB 8B F0 C9 30 9B ED AA AD DA D5 AB C7 6A AE E6 BA 5C 26 F0 FB E3 FF 43 F2 BD 4A 27 FE F2 ED C7 BA 7F 5B 2D 37 CC AF 79 EE 1E 5A 88 EF 5F FC 5E BC 87 D9 BA 9B 79 FF A7 DC DE DD 9D 3C 7B F7 EA EC 2F B8 9F AB 4D DA 68 BA 7F 77 DD DF 1F F2 8B FB 2D FF C2 37 35 FD DF FB 8A 3E A7 DE AD AF E3 BA 9D CF F5 37 77 EF D9 83 EF F7 A3 5B 95 CA F7 85 FB AE FD BD FF 7D 7B C9 B6 BF B6 F7 8A BD EA 68 2E C8 7D 6F 5C 95 7C 3C EC D7 2D B2 B9 D5 AD 99 38 EB AB 06 48 FF 7E FB B6 FA 66 53 EA 5E 1B FF DF F9 70 8E 9D BA F4 BE 15 7A AA 76 65 BF EC DF AE 5F BA F1 3D 5D 00 A4 04 00 0E 32 50    .o,..2PAY.SYS.DDF01................................3./...o..o\.......0........j...\&....C..J'.....[-7..y..Z.._.^.....y......<{.../...M.h.w......-..75....>.........7w......[.........}{........h..}o\.|<..-.....8...H.~...fS.^....p......z.ve...._..=].....2P
[SEND]startAID:  00 A4 04 00 07 A0 00 00 00 03 10 10 00
[READ]StartAID:  00 6F 6A 84 07 A0 00 00 00 03 10 10 A5 5F 50 0A 56 69 73 61 20 44 65 62 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FC 5E BC 87 D9 BA 9B 79 FF A7 DC DE DD 9D 3C 7B F7 EA EC 2F B8 9F AB 4D DA 68 BA 7F 77 DD DF 1F F2 8B FB 2D FF C2 37 35 FD DF FB 8A 3E A7 DE AD AF E3 BA 9D CF F5 37 77 EF D9 83 EF F7 A3 5B 95 CA F7 85 FB AE FD BD FF 7D 7B C9 B6 BF B6 F7 8A BD EA 68 2E C8 7D 6F 5C 95 7C 3C EC D7 2D B2 B9 D5 AD 99 38 EB AB 06 48 FF 7E FB B6 FA 66 53 EA 5E 1B FF DF F9 70 8E 9D BA F4 BE 15 7A AA 76 65 BF EC DF AE 5F BA F1 3D 5D 00 A4 04 00 0E 32 50    .oj.........._P.Visa Deb........................................................................................^.....y......<{.../...M.h.w......-..75....>.........7w......[.........}{........h..}o\.|<..-.....8...H.~...fS.^....p......z.ve...._..=].....2P
[SEND]GetApplication:  80 A8 00 00 02 83 00 00
[READ]GetApplication:  69 85    i.
[SEND]berBuffer1:  00 B2 01 0C 00
[READ]berBuffer1:  69 85    i.
Pan not found
[SEND]berBuffer3:  00 B2 02 0C 00
[READ]berBuffer3:  69 85    i.
Pan not found
[SEND]berBuffer4:  00 B2 01 14 00
[READ]berBuffer4:  69 85    i.
Pan not found
[SEND]berBuffer5:  00 B2 02 14 00
[READ]berBuffer5 is:  69 85    i.
Pan not found
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 22:51  [ТС] 12
это I2C разделяет ответ на куски, я с этим разбираться не стал
а вообще рекомендую буфер увеличить он у тебя по умолчанию 64 а ответы от карты намного больше!
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 22:53 13
Я увеличил до 255, при 64 действительно получаю не весь ответ, но похоже что проблема и правда в I2C, не подскажите где можно почитать про разделение ответа от I2C?
0
SadiQ228
-16 / 12 / 7
Регистрация: 16.12.2016
Сообщений: 524
13.08.2019, 22:59  [ТС] 14
FF этим символом он просто дополняет ответ... так как видит его длинну, это НЕ неверные символы тебе пришли, это тебе ничего не пришло значит

Добавлено через 45 секунд
нет не подскажу никто об этом не пишет я случайно нашел ответ на форуме arduino.cc но там мне никто так и не ответил
а я и не стал дальше искать
0
iliailia1212
0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 7
13.08.2019, 23:06 15
Понял, спасибо большое, буду искать, может в документации к pn532 что-то есть.
0
13.08.2019, 23:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2019, 23:06

Деление даёт неверный ответ
mov eax,11016 mov ebx,16384 xor edx, edx cdq idiv ebx после этого всего в edx просто...

Неверный ответ, но задача выполнена
Напишите программу, которая выведет все целые числа в диапазоне от 0 (включительно) до 999...

Команда RCL дает неверный результат. Исправить код
смысл в чем. отве АХ должен получится 2245, а получается 8245 . решаю на калькуляторе косанды. что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru