Für ein Schulprojekt versuchen wir auf ntag213 schreiben (Mifare Ultralight C 180Bytes) und wir sind nicht in der Lage zu schreiben. Abgesehen davon funktioniert die Bibliothek gut mit dem Lesen des Ultralight C/ntag213.Schreiben ntag213 (Mifare Ultralight C) mit mxgxw/MFRC522-python Bibliothek und MFRC522 Reader auf Raspi 2
Die gleiche Einstellung, Bibliothek und Hardware funktioniert gut auf den Mifare 1K Tags 1024kB.
Gibt es jemanden da draußen, der diese Bibliothek bereits in PYTHON mit einem MFRC522 Reader und einem Mifare Ultralight C Tag (ntag213) gemacht hat?
Links:
https://github.com/mxgxw/MFRC522-python http://cache.nxp.com/documents/data_sheet/NTAG213_215_216.pdf?pspll=1
def MFRC522_Write(self, blockAddr, writeData):
buff = []
buff.append(self.PICC_WRITE)
buff.append(blockAddr)
crc = self.CalulateCRC(buff)
buff.append(crc[0])
buff.append(crc[1])
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buff)
#because of a timeout in function ToCard, backdata after this is empty!!!!!!!!!
if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
status = self.MI_ERR
print str(backLen)+" backdata &0x0F == 0x0A "+str(backData[0]&0x0F)
if status == self.MI_OK:
i = 0
buf = []
while i < 16:
buf.append(writeData[i])
i = i + 1
crc = self.CalulateCRC(buf)
buf.append(crc[0])
buf.append(crc[1])
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,buf)
if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
print "Error while writing"
if status == self.MI_OK:
print "Data written"
So in ToCard Funktion suchen wir den Fehler zu suchen:
def MFRC522_ToCard(self,command,sendData):
backData = []
backLen = 0
status = self.MI_ERR
irqEn = 0x00
waitIRq = 0x00
lastBits = None
n = 0
i = 0
if command == self.PCD_AUTHENT:
irqEn = 0x12
waitIRq = 0x10
if command == self.PCD_TRANSCEIVE:
irqEn = 0x77
waitIRq = 0x30
self.Write_MFRC522(self.CommIEnReg, irqEn|0x80)
self.ClearBitMask(self.CommIrqReg, 0x80)
self.SetBitMask(self.FIFOLevelReg, 0x80)
self.Write_MFRC522(self.CommandReg, self.PCD_IDLE);
while(i<len(sendData)):
self.Write_MFRC522(self.FIFODataReg, sendData[i])
i = i+1
self.Write_MFRC522(self.CommandReg, command)
if command == self.PCD_TRANSCEIVE:
self.SetBitMask(self.BitFramingReg, 0x80)
#!!!!!!!!!!!!!!!!!!!!!!!!!!!
# as we saw in the data sheet we figured out that until here everything looks correctly.
# despite of this fact self.Read_MFRC522(self.CommIrqReg) never gets an ACK
#!!!!!!!!!!!!!!!!!!!!!!!!!!!
i = 2000
while True:
n = self.Read_MFRC522(self.CommIrqReg)
i = i - 1
if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)):
break
self.ClearBitMask(self.BitFramingReg, 0x80)
if i != 0:
if (self.Read_MFRC522(self.ErrorReg) & 0x1B)==0x00:
status = self.MI_OK
if n & irqEn & 0x01:
status = self.MI_NOTAGERR
if command == self.PCD_TRANSCEIVE:
n = self.Read_MFRC522(self.FIFOLevelReg)
lastBits = self.Read_MFRC522(self.ControlReg) & 0x07
if lastBits != 0:
backLen = (n-1)*8 + lastBits
else:
backLen = n*8
if n == 0:
n = 1
if n > self.MAX_LEN:
n = self.MAX_LEN
i = 0
while i<n:
backData.append(self.Read_MFRC522(self.FIFODataReg))
i = i + 1;
else:
status = self.MI_ERR
return (status,backData,backLen)
Bitte, Tutorial, versuchen Sie Ihre ersten Schritte zu machen. Wenn Sie auf ein Problem stoßen, das Sie nicht selbst lösen können, fragen Sie hier. –
Hallo, danke fürs Beantworten, aber du verstehst falsch! Wir haben bereits das ganze Setup gemacht, wir haben jetzt eine Weile (4 Wochen) mit dem MFRC522 Reader auf Raspberry Pi 2B und den Mifare 1kB Tags gearbeitet und alles funktioniert gut. Also technisch haben wir unsere Hausaufgaben und unsere Tutorials durch und durch gemacht ... aber etwas stimmt nicht mit dem Lesen der kleinen Schwester/Mifare Ultralight C Tag ... und wir fragen uns nur, ob jemand das schon getan hat ... es gibt keine adäquate Bibliothek oder etwas ... Ich habe gerade C++ Code gefunden ... aber wir brauchen Python, weil wir jetzt die Bibliothek von mxgxw neu schreiben, so dass es mit dem Ultralight funktioniert – Tschabadu
Das ist großartig! Also, frag hier, was du "jemanden" fragst, nach dem du suchst. Erkläre, was du hast, was du versucht hast, was du erreichen willst. Der Punkt ist, dass Ihre Fragen und Antworten wahrscheinlich jemand anderes sein wird. Ohne spezielle Informationen werden Ihre Fragen wahrscheinlich geschlossen. –