Я работаю над проектом, в котором мне нужно читать и писать карты Mifare classi c 1K с антенной ACR122U и Raspberry Pi. Мне нужно как можно больше контроля, поэтому я решил использовать PyUSB и отправлять команды напрямую в байтах. Пока все хорошо.
У меня есть скрипт со страницы учебника PyUSB. Все работает, пока скрипт не выполнит команду write. В результате возникает ошибка «Время ожидания истекло».
Вот код:
import usb.core
import usb.util
import sys
#I changed to my ids and it works
dev = usb.core.find(idVendor=0x072F, idProduct=0x2200)
if dev is None:
raise ValueError('Device not Found!')
else:
print(dev)
#This loops work perfectly fine. I get all information from the ACR122U
for cfg in dev:
sys.stdout.write(str(cfg.bConfigurationValue) + '\n')
for intf in cfg:
sys.stdout.write('\t' + \
str(intf.bInterfaceNumber) + \
',' + \
str(intf.bAlternateSetting) + \
'\n')
for ep in intf:
sys.stdout.write('\t\t' + \
str(ep.bEndpointAddress) + \
'\n')
try:
dev.detach_kernel_driver(0)
except:
print("No need to detach")
pass
dev.set_configuration()
print("*\n"*3)
ep = usb.util.find_descriptor(
intf,
#match first OUT Endpoint
custom_match = \
lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT)
assert ep is not None
print(ep)
print("*\n"*5)
try:
dev.set_interface_altsetting(interface=0, alternate_setting=0)
except:
pass
#It fails on this line
dev.write(ep.bEndpointAddress, [0xFF, 0x00, 0x48, 0x00, 0x00])
#I have tried many variations, e.g.
#dev.write(0x02, '\xFF\x00...')
#ep.write([0xFF, 0x00, 0x48, 0x00, 0x00])
#etc
dev.reset()
Отправляемая мной команда, полученная из документации ACR122U . Страница 24 из 47. Я пробовал nf c -tools.org раньше, но не смог заставить его читать и писать блочно, если вы знаете что-нибудь об этом, я рад вернуться назад. Я использую Raspbian на Raspberry Pi 3 B +.
Может быть, кто-то понял это раньше. Я только начинаю с USB, и я пытался заставить это работать в течение многих дней. Пожалуйста помоги. Любая помощь приветствуется. Спасибо!