wiki:S6350serialcom

TI S6350 communication overview

In order to use the TI reader within RealBasic we had to implement some of the serial protocol ourselves. You must first generate a command encapsulated in the TI protocol and have the payload of the command be the ISO15693 command. Only 3 of the ISO15693 commands are used to track RFID's, Inventory All Slots, Inventory 1 Slot and Silence Tag.

TI S6350 protocol header

To use ISO15693 commands with the TI reader the command must be encapsulated in a TI command followed by a checksum. An example of the TI command structure follows:

Byte 1 is the Start of Frame, always 01
Byte 2 and 3 is the length of the command including the 2 byte check sum that is added to the end, Least Significant Byte first
Byte 4 and 5 is the node address, leave at 00 as we do not reference nodes
Byte 6 is the command flags, no flags present
Byte 7 is the command, &h60 means it is an ISO15693 command which will be in the data portion of the packet
Byte 8 is the config byte for the reader
Byte 9 through x are for the data which can be an ISO15693 command
Bytes x+1 and x+2 are the checksum

Inventory All Slots

This sends an ISO15693 inventory command for the TI S6350 reader. It does an inventory of all time slots, this supports anti-collision but is too slow to use during a race as it takes about .3 seconds to return results. This command is used to scan in racers before a race starts. By using the inventory all slots command everyone can line up on the finish line and one inventory done to add them to the race.

The breakdown of the command is as follows:

Byte 1 is the Start of Frame, always 01
Byte 2 and 3 is the length of the command including the 2 byte check sum that is added to the end, Least Significant Byte first
Byte 4 and 5 is the node address, leave at 00 as we do not reference nodes
Byte 6 is the command flags, no flags present
Byte 7 is the command, &h60 means it is an ISO15693 command which will be in the data portion of the packet
Byte 8 is the config byte for the reader, &h11 means 100% modulation and 1/4 data mode
Byte 9 is the ISO15693 command flags, &h07 means 2 sub carriers, high data rate, inventory_flag set, nb_slots_flag set to all 16 slots
Byte 10 is the ISO15693 command, &h01 means inventory
Byte 11 is the optional mask that is not set
Bytes 12 and 13 are the checksum

The resulting command could look like this:
chrB(&h01) + chrB(&h0D) + chrB(&h00) + chrB(&h00) + chrB(&h00) + chrB(&h00) + chrB(&h60) + chrB(&h11) + chrB(&h07) + chrB(&h01) + chrB(&h00) + chrB(&h7B) + chrB(&h84)

The response returned for this command will have all the UID's listed. The UID's will be in reverse byte order.

Inventory 1 slot

This sends an ISO15693 inventory command for the TI S6350 reader. This does an inventory of just the first time slot, which allows for a faster inventory responses but can not handle collisions. A collision is when two tags or more tags are in the field at the same time. To minimize collisions silence the tag after it is detected.

This command is used to detect RFID's during a race. The response time to this command is approximately 2ms giving us sufficient accuracy for tracking RFID's.

The breakdown of the command is as follows:

Byte 1 is the Start of Frame, always 01
Byte 2 and 3 is the length of the command including the 2 byte check sum that is added to the end, Least Significant Byte first
Byte 4 and 5 is the node address, leave at 00 as we do not reference nodes
Byte 6 is the command flags, no flags present
Byte 7 is the command, &h60 means it is an ISO15693 command which will be in the data portion of the packet
Byte 8 is the config byte for the reader, &h11 means 100% modulation and 1/4 data mode
Byte 9 is the ISO15693 command flags, &h27 means 2 sub carriers, high data rate, inventory_flag set, nb_slots_flag set to 1 slot
Byte 10 is the ISO15693 command, &h01 means inventory
Byte 11 is the optional mask that is not set
Bytes 12 and 13 are the checksum

The resulting command could look like this:
ChrB(&h01) + ChrB(&h0D) + ChrB(&h00) + ChrB(&h00) + ChrB(&h00) + ChrB(&h00) + ChrB(&h60) + ChrB(&h11) + ChrB(&h27) + ChrB(&h01) + ChrB(&h00) + ChrB(&h5B) + ChrB(&hA4)

The response to this command will only have 1 UID. The UID will be in reverse byte order.

Inventory Response

The response from the TI S6350 will look like this:

Byte 1 is the Start of Frame, always 01
Byte 2 and 3 is the length of the command including the 2 byte check sum that is added to the end, Least Significant Byte first
Byte 4 and 5 is the node address, leave at 00 as we do not reference nodes
Byte 6 is the command flags, no flags present
Byte 7 is the command, &h60 means it is an ISO15693 command which will be in the data portion of the packet
Bytes 8&9 are ISO settings.
Bytes 10&11 are padding
Bytes '12+n' is the data with the UIDs (reverse byte order and 2 bytes of &h00 padding each)
Last 2 Bytes are the checksum
  
Sample Response with 4 UIDs.
01 35 00 00 00 00 60 41 82 00 00 00 00 80 14 C0 12 00 00 07 E0 00 00 B6 E7 53 13 00 00 07 E0 00 00 79 14 C0 12 00 00 07 E0 00 00 7F 14 C0 12 00 00 07 E0 C6 39

UID's are in reverse byte order. They are padded with 2 extra bytes of the value &h00. The following UID's were in the above response:

  • E007000012C0147F
  • E007000012C01479
  • E00700001353E7B6
  • E007000012C01480

Silence Tag

The UID passed must be a string in the reverse byte order that it is received in the string assembled by this can be sent directly to the serial port to silence the given RFID tag

The breakdown of the command is as follows:

Byte 1 is the Start of Frame, always 01
Byte 2 and 3 is the length of the command including the 2 byte check sum that is added to the end, Least Significant Byte first
Byte 4 and 5 is the node address, leave at 00 as we do not reference nodes
Byte 6 is the command flags, no flags present
Byte 7 is the command, &h60 means it is an ISO15693 command which will be in the data portion of the packet
Byte 8 is the config byte for the reader, &h11 means 100% modulation and 1/4 data mode
Byte 9 is the ISO15693 command flags, &h23 means 2 sub carriers, high data rate, and address flag is set
Byte 10 is the ISO15693 command, &h02 means be quiet
Byte 11-18 are the UID that needs to shut up
Byte 19 and 20 are the checksum that is added later

An example would be:

ChrB(&h01) + ChrB(&h14) + ChrB(&h00) + ChrB(&h00) + ChrB(&h00) + ChrB(&h00) + ChrB(&h60) + ChrB(&h11) + ChrB(&h23) + ChrB(&h02) + UID + Checksum

Collisions

The ISO15693 protocol allows for 16 time slots for communicating with an RFID reader. A collision occurs when 2 or more tags use the same time slot. By default each tag will use the 1st time slot unless a collision occurs. In the event of a collision the tags will randomly move to a different time slot.

The Inventory All Slots command can handle this as it checks each of the 16 slots for a RFID. Unfortunately doing this operation is slow, it takes about .3 seconds, far too long for a lap counter to get accurate lap times.

The solution is to use the Inventory 1 slot command during races. This command will just check the 1st time slot for a tag. To prevent collisions you must silence the tag immediately after it is detected. If a tag is silenced it will not transmit again until it leaves and reenters the antenna loop. The response time to this command is < 2ms giving us sufficient accuracy for lap counting.

Checksum

The checksum used by the TI S6350 is very basic. It is a 2 byte checksum. The first byte is the XOR of the string. The second byte is teh XOR of &hFF and the first byte.

Here is an example of the code to do this:

  dim data as string
  dim checksum as string
  dim xornumber1 as integer
  dim xornumber2 as integer

  'Do a XOR of all the bytes of the string for byte 1 of the checksum
  'Do not worry about xornumber having a zero initially, this does not impact the XOR operation

  for i as Integer=1 to len(data)
    xornumber1 = xornumber1 xor ascB(mid(data,i,1))
  next
  
  'calculates byte 2 of the checksum
  xornumber2 = &hFF xor xornumber1

  'put the two together for the complete checksum
  checksum = chrB(xornumber1) + chrB(xornumber2)