Тайм-аут, цель не ответила от считывателя ACR122U с тегами Jewel / Topaz512 NFC

Я создаю программу Windows / Java (с использованием javax.smartcardio) для связи с тегами Jewel / Topaz512 (от Innovision / Broadcom) с помощью устройства ACR122U (с микросхемой контроллера NFC PN532 внутри).

Я реализовал протокол Topaz512 (из этого листа данных ), но работает только половина моих команд.

  • Некоторые работающие команды: RID, RALL, READ, WRITE-NE, RSEG
  • Некоторые команды, которые не работают: WRITE-E, READ8, WRITE-E8, WRITE-NE8

Пример с командой WRITE-NO-ERASE

Например, вот что я получаю, когда отправляю команду WRITE-NO-ERASE:

Команда: FF:00:00:00:0C:D4:40:01:1A:7F:42:38:01:9A:00:17:E8

Где:

  • D4:40:01 - это команда InDataExchange,
  • 1A:7F:42 - это команда WRITE-NO-ERASE (значение: 0x42, блок 0x0F, байт 7),
  • 38:01:9A:00 - это 4-байтовый UID тега,
  • 17:E8 - это CRC.

Ответ: D5:41:00:42:90:00

Здесь ответ правильный: 0x42. Байт состояния (0x00) сообщает, что все прошло успешно.

Пример с командой WRITE-WITH-ERASE

И вот что я получаю, когда отправляю команду WRITE-WITH-ERASE:

Команда: FF:00:00:00:0C:D4:40:01:53:7F:42:38:01:9A:00:28:6E

Где:

  • D4:40:01 - это команда InDataExchange,
  • 53:7F:42 - это команда WRITE-WITH-ERASE (значение: 0x42, блок 0x0F, байт 7),
  • 38:01:9A:00 - это 4-байтовый UID тега,
  • 28:6E - это CRC.

Ответ: D5:41:01:90:00

Здесь байт состояния (0x01) сообщает о тайм-ауте, обнаруженном PN532. (Из документации PN532 (p67): «Тайм-аут , цель не ответила - 0x01 ")

Также, когда я удаляю таймауты PN532 (с FF:00:00:00:06:D4:32:02:00:00:00), нерабочие команды не отвечают D5:41:01:90:00, но ждут дольше, тогда я не получаю ответа.

Изменить 2020-04-20

Я просто пытался выполнить команды с помощью gscriptor (из pcsc-tools люкс), и у меня такое же поведение. Вот мои результаты:

Сценарий:

FF 00 00 00 06 D4 32 05 02 02 02

# SAMConfiguration
FF 00 00 00 04 D4 14 01 00

# SetParameters
FF 00 00 00 03 D4 12 04

# InListPassiveTarget: Jewel mode
FF 00 00 00 04 D4 4A 01 04

# InDataExchange: RID
FF 00 00 00 04 D4 40 01 78

# InDataExchange: RALL
FF 00 00 00 04 D4 40 01 00

# InDataExchange: RSEG 0-3
FF 00 00 00 05 D4 40 01 10 00
FF 00 00 00 05 D4 40 01 10 20
FF 00 00 00 05 D4 40 01 10 40
FF 00 00 00 05 D4 40 01 10 60

##########

# GetFirmwareVersion
FF 00 00 00 02 D4 02

# GetGeneralStatus
FF 00 00 00 02 D4 04

##########

# RFConfiguration: No timeout
FF 00 00 00 06 D4 32 02 00 00 00

# InDataExchange: READ-1
FF 00 00 00 05 D4 40 01 01 7F

# InDataExchange: READ-8
FF 00 00 00 05 D4 40 01 02 00

# InDataExchange: WRITE-E-1
FF 00 00 00 06 D4 40 01 53 7F 42

# InDataExchange: WRITE-E-8
FF 00 00 00 0C D4 40 01 55 02 01 02 03 04 05 06 07 08

# InDataExchange: WRITE-NE-1
FF 00 00 00 06 D4 40 01 1A 7F 42

# InDataExchange: WRITE-NE-8
FF 00 00 00 0C D4 40 01 1B 02 01 02 03 04 05 06 07 08

Результаты:


Sending: FF 00 00 00 06 D4 32 05 02 02 02
Received: D5 33 90 00
Normal processing.

Sending: FF 00 00 00 04 D4 14 01 00
Received: D5 15 90 00
Normal processing.

Sending: FF 00 00 00 03 D4 12 04
Received: D5 13 90 00
Normal processing.

Sending: FF 00 00 00 04 D4 4A 01 04
Received: D5 4B 01 01 0C 00 38 01 9A 00 90 00
Normal processing.

Sending: FF 00 00 00 04 D4 40 01 78
Received: D5 41 00 12 4C 38 01 9A 00 90 00
Normal processing.

Sending: FF 00 00 00 04 D4 40 01 00
Received: D5 41 00 12 4C 38 01 9A 00 00 10 25 00 00 10 3F
00 01 03 F2 30 33 02 03 F0 02 03 03 E3 D1 01 DF
54 02 65 6E 30 31 32 33 34 35 36 37 38 39 30 30
31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 55 55 AA
AA 12 4C 06 00 01 E0 00 00 00 00 00 00 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 10 00
Received: D5 41 00 38 01 9A 00 00 10 25 00 00 10 3F 00 01
03 F2 30 33 02 03 F0 02 03 03 E3 D1 01 DF 54 02
65 6E 30 31 32 33 34 35 36 37 38 39 30 30 31 32
33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 55 55 AA AA 12
4C 06 00 01 E0 00 00 00 00 00 00 00 00 00 00 00
00 00 47 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 10 20
Received: D5 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 10 40
Received: D5 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 10 60
Received: D5 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 90 00
Normal processing.

Sending: FF 00 00 00 02 D4 02
Received: D5 03 32 01 06 07 90 00
Normal processing.

Sending: FF 00 00 00 02 D4 04
Received: D5 05 01 00 01 01 00 00 02 80 90 00
Normal processing.

Sending: FF 00 00 00 06 D4 32 02 00 00 00
Received: D5 33 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 01 7F
Received: D5 41 00 47 90 00
Normal processing.

Sending: FF 00 00 00 05 D4 40 01 02 00
Received:
wrong SW size for:

Sending: FF 00 00 00 06 D4 40 01 53 7F 42
Received:
wrong SW size for:

Sending: FF 00 00 00 0C D4 40 01 55 02 01 02 03 04 05 06
07 08
Received:
wrong SW size for:

Sending: FF 00 00 00 06 D4 40 01 1A 7F 42
Received: D5 41 00 47 90 00
Normal processing.

Sending: FF 00 00 00 0C D4 40 01 1B 02 01 02 03 04 05 06
07 08
Received:
wrong SW size for:

Script was executed without error...

person Marc de Verdelhan    schedule 17.04.2020    source источник


Ответы (1)


Некоторое время назад я подробно изучил это и пришел к выводу, что микросхема контроллера NFC PN532 от NXP имеет проблему с прошивкой, которая не позволяет ему успешно принимать некоторые команды с тегами NFC Forum Type 1 (бренды Topaz / Jewel). Как уже отмечалось, ACR122U основан на этой микросхеме.

Когда я попытался записать по 8 байтовых блоков за раз, используя команду WRITE-E8 (0x54), полученный ответ был 0x01, время ожидания ответа тега.

То, что я пробовал, но не работает:

Включив эхо UID в InDataExchange, я даже поиграл с порядком байтов эха UID и получил тот же результат.

Использование команды inCommunicateThru вместо InDataExchange и вычисление значений CRC1 и CRC2 на уровне приложения (те же результаты)

Я пришел к окончательному выводу:

PN532 не может записывать страницы 0x10 и выше на тегах типа 1, что делает невозможным запись всего диапазона памяти на популярных моделях, таких как Topaz 512.

Рекомендация:

Этот вопрос был актуален в 2012 году, когда Topaz 512 был отличным недорогим NFC-тегом с большим объемом памяти. Теперь, когда есть модели NAG215 и NTAG216, я рекомендую использовать те модели, которые имеют большой объем памяти и универсальную совместимость с считывателями NFC.

person Papyrus    schedule 22.04.2020
comment
Большое спасибо за все ваши объяснения. Я бы хотел принять ответ, разрешающий проблему. Но похоже ваш единственный действительный. - person Marc de Verdelhan; 23.04.2020
comment
Наконец, поскольку я не мог использовать NTAGx, мне пришлось избавиться от этой проблемы с другим устройством NFC. Мне удалось выполнить команды WRITE -... с помощью USB-ключа NFC от Mikroe: mikroe.com / nfc-usb-dongle (с NXP PN7150 внутри). Также я сделал библиотеку Java для сборки команд Topaz 512. Его можно найти здесь: github.com/mdeverdelhan/Topaz512-driver - person Marc de Verdelhan; 08.07.2020