Muitos equipamentos utilizam leitores RFID que simulam um iButton no protocolo 1-Wire. Porém, para encapsular os bytes dos cartões no protocolo 1-Wire, alguns detalhes são importantes na hora da interpretação do pacote.
Para este gist, utilizaremos um único cartão de referência para os testes e exemplos.
O Cartão de Referência a ser utilizado possui o seguinte ID em hexadecimal: 0x DC 20 E7 8C. Veja foto abaixo.
A conversão desse ID para decimal é representado pelo "A2":
Caso consideremos a ordem dos bytes invertidos, ou seja, 0x 8C E7 20 DC, a conversão para decimal nessa ordem é representada pelo "A0":
Por padrão, consideraremos a ordem A2 como sendo o "normal".
O pacote de dados 1-Wire é dividido em um frame da seguinte forma:
Family Code | DATA | CRC |
---|---|---|
(1 byte) | (6 bytes) | (1 byte) |
Observe que o campo DATA possui 6 bytes, mas o cartão RFID possui apenas 4 bytes.
Dessa forma, o leitor irá preencher apenas 4 bytes desse campo, e os 2 restantes serão nulos.
Para simular um iButton, o campo Family Code será preenchido com o byte 0x01.
Assim, para o cartão de bytes 0x DC 20 E7 8C, o pacote 1-Wire na ordem normal dos bytes ficará:
0x 01 8C E7 20 DC 00 00 F3
E na ordem invertida, será:
0x 01 DC 20 E7 8C 00 00 6A
Essa ordem é a ordem de transmissão dos bytes. Ou seja, o byte 0x01 sempre será o primeiro byte a ser transmitido.
Você deve estar se perguntando: "mas por que na ordem normal, os bytes no pacote estão invertidos?". Isso se deve ao "endianess" do protocolo.
O protocolo 1-Wire padronizou os campos do pacote de dados em Little Endian (veja figura abaixo).
Observe que no formato Little-Endian de Transmissão, o LSB é enviado primeiro.
Por exemplo, para os bytes 0x DC 20 E7 8C, temos que o MSB (Most Significant Byte) é o byte 0x DC, e o LSB (Least Significant Byte) é o byte 0x 8C.
Como o protocolo de transmissão 1-wire está em little endian, o byte LSB é transmitido primeiro. Por isso que, ao montar o pacote de transmissão, a ordem dos bytes no campo DATA ficará invertida para que na recepção e processamento dos dados elas sejam interpretadas na maneira correta.
Vamos ver alguns exemplos utilizando um leitor de cartões RFID Mifare, e alguns rastreadores, Jiga e equipamentos de análise.
O leitor pode ser configurado para encapsular os dados do cartão no pacote 1-wire na ordem normal ou invertida.
A Jiga 1-Wire (equipamento proprietário Effortech) faz a leitura 1-wire, e o dado lido é processado para identificar os 4 bytes do cartão, considerando a ordem normal dos bytes. Os dados processados são enviados para o computador via serial RS-232.
- Com o leitor configurado com bytes normais, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes invertidos, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes normais, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes invertidos, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes normais, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes invertidos, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes normais, temos a seguinte leitura para o cartão DC 20 E7 8C:
- Com o leitor configurado com bytes invertidos, temos a seguinte leitura para o cartão DC 20 E7 8C: