Настройка ACR122U в режиме эмуляции карты — MacOS Catalina

Недавно я приобрел ACR122U у здесь. Я пытаюсь перевести его в режим эмуляции карты, чтобы он мог обмениваться данными с системой, на которой работает PN7150 в режиме инициатора.

Мне удалось установить связь с микросхемой PN532 устройства (руководство пользователя); отправка основных команд, например. получение статуса, версии FW и т.д...

Я не могу перевести его в режим эмуляции карты. Ниже приведен очень простой скрипт Python, который я использую, чтобы попытаться сделать это:

from smartcard.System import *
from smartcard import util

'''
Command Application Protocol Data Units

C-APDU Structure:
    [ Class + Instruction + Param_1 + Param_2 + Data Length + Data ]
'''

# ACS Direct Transmit Header - [ Class + Instruction + Param_1 + Param_2 ] #
ACS_DIRECT_TRANSMIT = [ 0xFF, 0x00, 0x00, 0x00 ]

# PN532 COMMANDS - [ Data Length + Data ] #
PN532_CMDS = {
                'GET_READER_FW_VERSION' : [ 0x02, 0xD4, 0x02 ],
                'GET_READER_STATUS'     : [ 0x02, 0xD4, 0x04 ],

                # Enable ISO/IEC 14443-4 PICC emulation & automatic RATS #
                'SET_PARAMETERS'        : [ 0x03, 0xD4, 0x12, 0x30 ],
                'CONFIGURE_CE_MODE'     : [
                                            0x27,             # Data Length
                                            0xD4, 0x8C,       # Command header
                                            0x05,             # Mode - PICC/Passive
                                            0x04, 0x00,       # ATQA
                                            0x12, 0x34, 0x56, # UID: Last 3 bytes
                                            0x20,             # SAK

                                            # =====[ Unused ] ===== #
                                            # FeliCa Params #
                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                            0x00, 0x00,

                                            # ATR Bytes #
                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                            # ===== [ Unused ] ===== #

                                            0x00, # General Bytes Length.
                                            0x00  # Historical Bytes Length.
                                          ]
             }

def printResponseApdu(data, sw1, sw2):
    data = util.toHexString(data)
    status = util.toHexString([sw1, sw2])
    print(f"R-APDU << Data:{data} Status:{status}")

def main():
    scReaders = readers()
    print("Available readers:", scReaders)

    reader = scReaders[0]
    print("Using:", reader)
    connection = reader.createConnection()

    connection.connect()
    print("Connection Established!")

    respData, sw1, sw2 = connection.transmit(ACS_DIRECT_TRANSMIT + PN532_CMDS['CONFIGURE_CE_MODE'])
    printResponseApdu(respData, sw1, sw2)

if __name__ == "__main__":
    main()

Это приводит к ошибке:

 ...
        sw1 = (response[-2] + 256) % 256
    IndexError: list index out of range

Я предполагаю, что это означает, что ответ не был получен, и я не думаю, что это проблема с драйвером, потому что другие команды работают нормально.

Любое понимание будет высоко оценено.


person Anviori    schedule 29.04.2020    source источник
comment
Хм, если вы посмотрите на техническую спецификацию ACR122 v3.06 непосредственно с веб-страниц ACS acs.com.hk/download-manual/418/TSP-ACR122U-3.06.pdf все ссылки на эмуляцию карт были удалены по сравнению с более старой версией v3.00, на которую есть ссылки с веб-сайта поставщика scbsolutions.com/express/ Может быть, этой функции никогда не было или она была удалена, так как в документе API нет ссылки на эмуляцию карт по сравнению с acr1252u, у которого есть подробности в API для эмуляции карт, Фиши?   -  person Andrew    schedule 30.04.2020
comment
Интересно... хотя внутренний трансивер (PN532) в ACR122U поддерживает эмуляцию карты. Я видел в Интернете другие примеры того, что это возможно (например, этот вопрос: stackoverflow.com/questions/14854933/) я просто не могу заставить это работать   -  person Anviori    schedule 30.04.2020
comment
Другой пример: github.com/AdamLaurie/RFIDIOt.   -  person Anviori    schedule 30.04.2020
comment
Это может быть не ваша проблема, но разобрали ли вы свой настоящий считыватель, чтобы проверить чип, заменили ли ACS чип в более поздних моделях клоном/альтернативой, которая не поддерживает эмуляцию карты, или, может быть, они просто каким-то образом отключили эту функцию, чтобы сделать его отличительной чертой ACR1252U? Возможно, стоит спросить техподдержку ACS, почему в версии 3 есть поддержка эмуляции карты, а в версии 3.06 нет.   -  person Andrew    schedule 30.04.2020
comment
Я открыл его и погуглил 5321 06 (самое верхнее число на микросхеме), что привело меня к NXP PN532, который является правильным чипом. Я связался с ними по этому поводу. Я опубликую их ответ здесь, когда получу его. Возможно, они подавляют его с помощью программного драйвера; но это предположения...   -  person Anviori    schedule 30.04.2020