在Linux中使用ACS ACR1252U USB NFC读卡器

在Linux中使用ACS ACR1252U USB NFC读卡器,第1张

概述在Linux中使用ACS ACR1252U USB NFC读卡器

我使用通过USB连接的ACS acr1252U读卡器( http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certifIEd-reader/ )说实话,我不知道如何让它工作。 我Google了一大堆东西,但没有运气。 我正在使用Debian的变种。 以下是或多或less我所做的:

我使用dmesg得到以下内容:

[ 7173.059710] usb 1-1.3: new full-speed USB device number 6 using DWc_otg [ 7173.160500] usb 1-1.3: not running at top speed; connect to a high speed hub [ 7173.163114] usb 1-1.3: New USB device found,IDvendor=072f,IDProduct=223b [ 7173.163147] usb 1-1.3: New USB device strings: Mfr=1,Product=2,SerialNumber=0 [ 7173.163168] usb 1-1.3: Product: acr1252 Dual Reader [ 7173.163186] usb 1-1.3: Manufacturer: ACS

我使用下面的Python代码来获取关于这些设备的更多细节:

#!/usr/bin/python import sys import usb.core # find USB devices dev = usb.core.find(find_all=True) # loop through devices,printing vendor and product IDs in decimal and hex for cfg in dev: print cfg sys.stdout.write('Decimal vendorID=' + str(cfg.IDvendor) + ' & ProductID=' + str(cfg.IDProduct) + 'n') sys.stdout.write('Hexadecimal vendorID=' + hex(cfg.IDvendor) + ' & ProductID=' + hex(cfg.IDProduct) + 'nn')

这个特定设备的输出是:

输出redirect时SIGINT丢失; 如何检测程序中的终止?

如何检查两个设备文件在C中是否相等?

如何获得单独的头文件的预处理输出?

使用tc延迟传入stream量会影响主机和虚拟机

在linux上安装PHPsh,Python错误

DEVICE ID 072f:223b on Bus 001 Address 004 ================= bLength : 0x12 (18 bytes) bDescriptorType : 0x1 Device bcdUSB : 0x200 USB 2.0 bDeviceClass : 0x0 SpecifIEd at interface bDeviceSubClass : 0x0 bDeviceProtocol : 0x0 bMaxPacketSize0 : 0x40 (64 bytes) IDvendor : 0x072f IDProduct : 0x223b bcdDevice : 0x100 Device 1.0 iManufacturer : 0x1 ACS iProduct : 0x2 acr1252 Dual Reader iSerialNumber : 0x0 bNumConfigurations : 0x1 CONfigURATION 1: 200 mA ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x2 Configuration wTotalLength : 0xb1 (177 bytes) bNumInterfaces : 0x2 bConfigurationValue : 0x1 iConfiguration : 0x0 bmAttributes : 0x80 Bus Powered bMaxPower : 0x64 (200 mA) INTERFACE 0: Smart Card ================================ bLength : 0x9 (9 bytes) bDescriptorType : 0x4 Interface bInterfaceNumber : 0x0 bAlternateSetting : 0x0 bNumEndpoints : 0x3 bInterfaceClass : 0xb Smart Card bInterfaceSubClass : 0x0 bInterfaceProtocol : 0x0 iInterface : 0x4 acr1252 Dual Reader PICC ENDPOINT 0x1: Bulk OUT =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x1 OUT bmAttributes : 0x2 Bulk wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x0 ENDPOINT 0x81: Bulk IN =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x81 IN bmAttributes : 0x2 Bulk wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x0 ENDPOINT 0x84: Interrupt IN ========================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x84 IN bmAttributes : 0x3 Interrupt wMaxPacketSize : 0x40 (64 bytes) bInterval : 0xa INTERFACE 1: Smart Card ================================ bLength : 0x9 (9 bytes) bDescriptorType : 0x4 Interface bInterfaceNumber : 0x1 bAlternateSetting : 0x0 bNumEndpoints : 0x3 bInterfaceClass : 0xb Smart Card bInterfaceSubClass : 0x0 bInterfaceProtocol : 0x0 iInterface : 0x5 acr1252 Dual Reader SAM ENDPOINT 0x2: Bulk OUT =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x2 OUT bmAttributes : 0x2 Bulk wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x0 ENDPOINT 0x82: Bulk IN =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x82 IN bmAttributes : 0x2 Bulk wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x0 ENDPOINT 0x83: Interrupt IN ========================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x83 IN bmAttributes : 0x3 Interrupt wMaxPacketSize : 0x40 (64 bytes) bInterval : 0xa Decimal vendorID=1839 & ProductID=8763 Hexadecimal vendorID=0x72f & ProductID=0x223b

我安装了PyUSB,并且能够使用一些示例代码来检测设备,但没有像读取NFC卡时(尽pipe有蜂鸣声,这使我相信USB设备本身工作正常)。

我也安装了libacsccID1软件包,说它支持这个设备https://github.com/acshk/acsccID ,但我不知道如何使用它。

除此之外,我不知道还有什么要做。 任何帮助将不胜感激。 我的项目的目标是根据检测到的NFC标签的值来控制GPIO输出。

— 更新@H_403_32@ —

我工作了一些,尽pipe我仍然无法正常工作,但是我有更多的数据。 具体来说,我正在工作: http : //www.digitalmihailo.com/usb-programming-with-python-on-linux-pyusb-version/

从数据表我可以确认它是一个USB 2.0全速设备:

为了testing,我只是想让蜂鸣器发声。 以下是该function的设备api文档的屏幕截图:

因此,我的设备的http://www.digitalmihailo.com/usb-programming-with-python-on-linux-pyusb-version/的简化版本将是:

#!/usr/bin/python import os import sys import time import usb.core import usb.util # According to what I've read,full speed USB is 64 byte packet size. packet_len = 64 # Packing a request. # Packets are 64 bytes long,most of the commands are 4 bytes long. So up to 18 # can be batched into a packet. For example command with bytes [0x94,0x0,0x0] is getting firmware ID def pack_request(*arguments): packet = [0x0] * packet_len i = 0 for arg in arguments: packet[i] = arg i += 1 #packet[0:4] = [0x94,0x0] #get firmware ID return ''.join([chr(c) for c in packet]) def main(): #Updated for the ACS acr1252U dev = usb.core.find(IDvendor=0x72f,IDProduct=0x223b) # was it found? if dev is None: raise ValueError('Device not found') try: dev.detach_kernel_driver(0) except: # this usually mean that kernel driver has already been dettached pass # ACS acr1252U only has 1 configuration dev.set_configuration() # Interface 0: Dual Reader PICC. This is what we want # Interface 1: Dual Reader SAM try: dev.set_interface_altsetting(0) except usb.core.USBError: print 'Error setting interface!' pass # According to the API,to sound the buzzer we must send: # # Class: 0xe0 # INS: 0x00 # P1: 0x00 # P2: 0x28 # Lc: 0x01 # DataIn (duration): 0xff (for 255 * 10ms = 2.55 seconds) raw = pack_request(0xe0,0x00,0x28,0x01,0xff) #send the packet # Params are (endpoint,data,timeout) # # According to the script output: # ENDPOINT 0x01: Bulk OUT dev.write(endpoint=0x01,data=raw) #done if __name__ == '__main__': main()

当我运行这个没有任何反应…没有蜂鸣器,没有错误信息。 这里有什么可能是错的?

谢谢!

ctypes加载具有依赖关系的ac共享库

静态链接仅提升库G ++

从命令行sorting不同长度的hex数字?

以编程方式请求在linux中提升权限

(客户端)直接连接到Redis的JavaScript?

只是出于好奇,我打开Info.pList(在/usr/lib/pcsc/drivers/ifd-acsccID.bundle/Contents/ ),并注意到我的设备没有列出。

所以我继续在ifdvendorID(0x072F),ifdProductID(0x223B)和ifdFrIEndlyname(ACS acr1252U双PICC-SAM读取器)阵列中添加我的信息,并运行pcscd -fd。

只有在这一步之后,pcsc_scan才能真正检测到我的设备,其他的一切或多或少开始工作。 最后我没有直接使用USB,而是使用了pyscard( http://pyscard.sourceforge.net/ )库。

这让蜂鸣器工作:

def sound_buzzer(reps): #NOTE: This function only works if a card is present! try: hresult,hcontext = SCardEstablishContext(SCARD_ScopE_USER) assert hresult == SCARD_S_SUCCESS hresult,readers = SCardListReaders(hcontext,[]) assert len(readers) > 0 reader = readers[0] hresult,hcard,DWActiveProtocol = SCardConnect(hcontext,reader,SCARD_SHARE_SHARED,SCARD_PROTOCol_T0 | SCARD_PROTOCol_T1) while reps > 0: buzzer = [0xE0,0x0F] # 0x0F = 15 * 10ms hresult,response = SCardControl(hcard,SCARD_CTL_CODE(3500),buzzer) sleep(0.15) reps = reps - 1 except Exception,e: #print 'Exception: '+ str(e) pass return

总结

以上是内存溢出为你收集整理的在Linux中使用ACS ACR1252U USB NFC读卡器全部内容,希望文章能够帮你解决在Linux中使用ACS ACR1252U USB NFC读卡器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1157369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存