I'm using a Windows 11 laptop and and ACS ACR1552 reader.
I'm using the ACS Script Tool (v5.02) to send APDUs to a NXP ICODE SLI tag.
I'm creating a transparent session, setting the protocol to 15693/Layer3, and then using transparent exchange encapsulation to the send the APDUs to the tag.
GET_SYSTEM_INFO and READ_SINGLE_BLOCK seems to work OK.
WRITE_SINGLE_BLOCK returns a "64 01" error but does appear to actually write the data.
I have not been able to find any info on the meaning or cause of this 64 01 response.
Can anyone shed some light on this?
Here's the sequence of APDUs I'm working with.
; (1) establish transparent session
< FF C2 00 00 02 81 00 00
> C0 03 00 90 00 90 00
; (2) transparent exchange - switch protocol to SwitchProtocolRf::ISO15693 SwitchProtocolLayer::PART3
< FF C2 00 02 04 8F 02 02 03
> C0 03 00 90 00 8F 01 00 90 00
; (3) get sys info
< FF C2 00 01 04 95 02 02 2B 00
> C0 03 00 90 00 92 01 00 96 02 00 00 97 0F 00 0F 2E 98 5C 8A 00 01 04 E0 00 00 1B 03 01 90 00
; (4) read user block 0 with security status
< FF C2 00 01 05 95 03 42 20 00 00
> C0 03 00 90 00 92 01 00 96 02 00 00 97 06 00 00 00 11 22 33 90 00
; (5) write block 0 with 12 34 56 78
< FF C2 00 01 09 95 07 02 21 00 12 34 56 78 00
> C0 03 01 64 01 90 00
; (6) read user block 0 with security status
< FF C2 00 01 05 95 03 42 20 00 00
> C0 03 00 90 00 92 01 00 96 02 00 00 97 06 00 00 12 34 56 78 90 00
; (7) end transparent session
< FF C2 00 00 02 82 00 00
> C0 03 00 90 00 90 00
I had this exact same issue reading/writing icode SLIX/SLIX2 tags, the writes were working but giving the 64 01 timeout.
I was able to solve the problem by adjusting the timeout for the command by including the timer option within the same transaction as the write.
Example: Write "00 01 02 03" to block 0
> ff c2 00 01 10 5f 46 04 40 42 0f 00 95 07 02 21 00 00 01 02 03 00
Transparent command
Size of command (0x10 = 16 bytes to follow)
Timeout command
Command To Device
As can be seen, the response is now correct.
This command is basically the same as shown in the original poster's question, with the addition of the green section, which is, per the docs setting a 1sec timeout (which is probably way excessive).
5f 46 = Timer Data Object
04 = Length
40 42 0f 00 = 1,000,000 (microseconds, LSB first), i.e. 000f4240h = 1,000,000
Probably too late to be useful for the original poster, but maybe this will save someone else the 2-3 hours it cost me.
You could check the reference manual REF-ACR1552U-Series-1.06.pdf. page 43.
Please read the document of the reader.