Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RASPI2上使用mxgxw/MFRC522 python库和MFRC522读取器编写ntag213(Mifare Ultralight C)_Python_Raspberry Pi_Rfid_Mifare_Write Error - Fatal编程技术网

在RASPI2上使用mxgxw/MFRC522 python库和MFRC522读取器编写ntag213(Mifare Ultralight C)

在RASPI2上使用mxgxw/MFRC522 python库和MFRC522读取器编写ntag213(Mifare Ultralight C),python,raspberry-pi,rfid,mifare,write-error,Python,Raspberry Pi,Rfid,Mifare,Write Error,对于一个学校项目,我们正在尝试在ntag213(Mifare Ultralight C 180字节)上编写,但我们无法在其上编写。除此之外,图书馆在阅读超轻C/ntag213时工作正常 同样的设置、库和硬件在Mifare 1K标签1024kB上运行良好 有没有人已经在PYTHON中用这个库使用MFRC522阅读器和Mifare Ultralight C标记(ntag213)实现了这一点 链接: def MFRC522_写入(self、blockAddr、writeData): buff=[]

对于一个学校项目,我们正在尝试在ntag213(Mifare Ultralight C 180字节)上编写,但我们无法在其上编写。除此之外,图书馆在阅读超轻C/ntag213时工作正常

同样的设置、库和硬件在Mifare 1K标签1024kB上运行良好

有没有人已经在PYTHON中用这个库使用MFRC522阅读器和Mifare Ultralight C标记(ntag213)实现了这一点

链接:

def MFRC522_写入(self、blockAddr、writeData):
buff=[]
buff.append(self.PICC_WRITE)
buff.append(blockAddr)
crc=self.CalulateCRC(buff)
buff.append(crc[0])
buff.append(crc[1])
(状态,backData,backLen)=self.MFRC522_ToCard(self.PCD_收发器,buff)
#由于ToCard函数超时,此函数后的backdata为空!!!!!!!!!
如果不是(状态==self.MI_OK)或不是(backLen==4)或不是(backData[0]&0x0F)==0x0A):
状态=self.MI_ERR
打印str(backLen)+“backdata&0x0F==0x0A”+str(backdata[0]&0x0F)
如果状态==self.MI\u正常:
i=0
buf=[]
而我<16:
buf.append(writeData[i])
i=i+1
crc=自身计算公式crc(buf)
buf.append(crc[0])
buf.append(crc[1])
(状态,backData,backLen)=self.MFRC522_ToCard(self.PCD_收发器,buf)
如果不是(状态==self.MI_OK)或不是(backLen==4)或不是(backData[0]&0x0F)==0x0A):
打印“写入时出错”
如果状态==self.MI\u正常:
打印“写入的数据”
因此,我们正在研究ToCard函数以搜索错误:

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)
def MFRC522_ToCard(self、command、sendData):
背景数据=[]
backLen=0
状态=self.MI_ERR
irqEn=0x00
waitIRq=0x00
最后一位=无
n=0
i=0
如果命令==self.PCD\u AUTHENT:
irqEn=0x12
waitIRq=0x10
如果命令==self.PCD\u收发器:
irqEn=0x77
waitIRq=0x30
self.Write_MFRC522(self.CommIEnReg,irqEn | 0x80)
self.ClearBitMask(self.CommIrqReg,0x80)
self.setbit掩码(self.FIFOLevelReg,0x80)
self.Write_MFRC522(self.CommandReg,self.PCD_IDLE);
而(i self.MAX_LEN:
n=自最大值
i=0

当我尝试做同样的事情时,这可能与超轻卡不需要授权这一事实有关。 至于您突出显示的代码的位置,我需要重写它

        while True:
        n = self.dev_read(0x04)
        if n == 0:
            continue  # Too fast
        if n & irq_wait:
            break  # Got it!
        if n & 0x01:
            error = True
            break  # The timer decrements the timer value in register TCounterValReg to zero

请找到教程,试着迈出第一步。当你遇到自己无法解决的问题时,请在此处提问。您好,感谢您的回答,但您理解错了!我们已经完成了整个设置,我们已经工作了一段时间(4周)Raspberry Pi 2B上的MFRC522读卡器和Mifare 1kB标签都可以正常工作。因此,从技术上讲,我们完整地完成了家庭作业和教程……但是,阅读little sister/Mifare Ultralight C标签有问题……我们只是想知道是否有人已经这样做了……没有足够的库或其他东西……我知道ST发现C++代码太多了……但是我们需要Python,因为我们现在正在从MXGXW改写库,以便它能与超高的程序一起工作,这就太好了!你正在寻找。解释你拥有什么,你尝试了什么,你想完成什么。重点是你的问题和答案可能会被其他人回答。如果没有任何具体信息,你的问题可能会被否决。因此,现在我们给出了库的一些代码片段,并对我们遇到的问题和原因进行了评论,希望如此s更具体一点。
        while True:
        n = self.dev_read(0x04)
        if n == 0:
            continue  # Too fast
        if n & irq_wait:
            break  # Got it!
        if n & 0x01:
            error = True
            break  # The timer decrements the timer value in register TCounterValReg to zero