NFC Mifare Ultralight - reading succeeds, writing always gives an error

430 views
Skip to first unread message

Peter De Leuze

unread,
Aug 23, 2016, 2:12:48 AM8/23/16
to nfc-developers
Hello,

I recently started with the implementation of a desktop Java program to read and write mifare ultralight cards.
I used the source code from https://github.com/grundid (many compliments) and the examples.

At some point, I got everything working on a ACS ACR122U devices. But at some point, I am keep getting write errors. e.g.: 

org.nfctools.NfcException: org.nfctools.mf.MfException: Writing block failed. Page: 34, Response: SW1: 99 SW2: 0
        at org.nfctools.mf.ul.Type2NdefOperations.writeBufferOnTag(Type2NdefOperations.java:146)
at org.nfctools.mf.ul.Type2NdefOperations.writeNdefMessage(Type2NdefOperations.java:72)

Strangely, when I read the card, I can see the content, and also after changing the record content, it is again (after writing errors) changed...


As Debug, right before the exception:

DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD60004040103A010
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000504440326D1
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600060401225405
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000704656E2D55
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600080453506574
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600090465722069
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000A0473206465
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000B04206F706E
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000C0469657577
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000D0420646520
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000E044D415820
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6000F0421FE0000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600100400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600110400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600120400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600130400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600140400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600150400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600160400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600170400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600180400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600190400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001A0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001B0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001C0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001D0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001E0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD6001F0400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600200400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600210400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 9000
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600220400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 6300

Is this something normal or is it an issue ? Because of this error, the code does not complete normally... 
I used the recent version from nfc-tools, with some adjustments.

Necessarry adjustments to get this to work in the first place:

in the class UltralightHandler.java  -->  isCapabilityContainerValid(...) method -->  I had to change to  return block[0] == (byte)0xE1 && (block[1] == (byte)0x10 || block[1] == (byte)0x11)  && block[2] >= (byte)0x06;
(So added the  || block[1] == (byte)0x11  because it is never value 0x10 !!) 

I am using Mifare Ultralight and Ultralight C cards. Both have that problem....

I hope someone can help me with this issue. Help is appriciated and I will be ever gratefull ;-)

Peter De Leuze

unread,
Aug 23, 2016, 2:17:04 AM8/23/16
to nfc-developers
Additional Information:

When reading the tag again (after trying to write it) I get the following Exception:

...
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFB0002804
DEBUG: org.nfctools.spi.acs.AcsTag - response: 6300
org.nfctools.mf.MfException: Reading block failed. Page: 40, Response: SW1: 99 SW2: 0
at org.nfctools.spi.acs.AcrMfUlReaderWriter.readBlock(AcrMfUlReaderWriter.java:47)
at org.nfctools.mf.ul.Type2NfcTagListener.isLocked(Type2NfcTagListener.java:128)
at org.nfctools.mf.ul.Type2NfcTagListener.createNdefOperations(Type2NfcTagListener.java:94)


When trying to write in the same session, I get this exception:

...
DEBUG: org.nfctools.spi.acs.AcsTag - command: FFD600220400000000
DEBUG: org.nfctools.spi.acs.AcsTag - response: 6300
org.nfctools.NfcException: org.nfctools.mf.MfException: Writing block failed. Page: 34, Response: SW1: 99 SW2: 0
DEBUG: org.nfctools.spi.acs.InitiatorTerminalTagScanner - Waiting while card present
at org.nfctools.mf.ul.Type2NdefOperations.writeBufferOnTag(Type2NdefOperations.java:146)
at org.nfctools.mf.ul.Type2NdefOperations.writeNdefMessage(Type2NdefOperations.java:72)


So the page that it mentions where the problem is, is for reading at page 40, but for writing at page 34 ...


Op dinsdag 23 augustus 2016 08:12:48 UTC+2 schreef Peter De Leuze:
Reply all
Reply to author
Forward
0 new messages