Protocolo Comunicação RFID - AS3992
Funcionamento básico do protocolo
- Comunicação realizada através do envio de mensagens de 64 bytes (formato byte 0x00)
- As mensagens devem ser preenchidas com bytes irrelevantes (a 0x00) até a palavra ser preenchida (ou seja, obter 64B);
- As mensagens recebidas (e enviadas) podem ser convertidas em de bytes para strings para facilitar a comunicação com o utilizador (pelo menos)
- O byte 2 deverá ser o tamanho da mensagem enviada (tirando o número de 0x00 para encher a mensagem, ex: 10 03 01). Se for sempre realizada a inserção dos bytes de redundância, este byte será sempre 64 (0x40)
- Os comandos começados por OUT referem-se a mensagens enviadas para o leitor e começados por IN referem-se a comandos recebidos pelo host como resposta a comandos OUT
Mensagens de erro (do leitor para o host)
Comandos relevantes (reader oriented)
Existem comandos e mensagens que não serão aqui explicitadas, sendo utilizadas apenas aquelas que se consideram relevantes para o projeto em questão. Assim sendo, comando que se refiram a manipulação de registos do leitor não serão objeto de atenção.
OUT_FIRM_HARDW_ID (0x10)/IN_FIRM_HARDW_ID(0x11)
OUT_ANTENNA_POWER (0x18)/IN_ANTENNA_POWER (0x19)
OUT_CHANGE_FREQ (0x41)/IN_CHANGE_FREQ(0x42)
- O leitor permite escolher a frequência de leitura, através deste comando. Existem 2 maneiras de realizar a leitura no dispositivo, ou com apenas uma frequência, ou através de hooping entre várias, escolhendo uma frequência específica
- Para além disso, existe um byte que serve para realizar a deteção de dois tipos diferentes (byte 2 - MASK), sendo que a única opção relevante neste caso é a ativação do modo hop. Dito isto, ainda é possível definir o perfil em questão através do uso de um byte 7, sendo o perfil definido abaixo
- Existem perfis de frequência, cada um de acordo com o que está estabelecido na gama de cada zona geográfica:

- Para o nosso caso, dada a gama de frequências (915MHz) em que nos encontramos a trabalhar, o perfil será o perfil dos EUA (perfil 03)
- Assim, a inicialização das frequências de do leitor poderá ser feita através do comando hexadecimal:
- 41 08 08 0D F6 38 D8 03 (00)x56
Byte Função 41 Comando de mudança de frequência 08 Tamanho da mensagem 08 Desligar o modo de hop, limpa a lista de frequências, apenas uma frequência central 0D F6 38 Frequência central de utilização 915MHz D8 Nível de RSSI (-40dBm) 03 Número do perfil (03 - EUA) (00)x56 56 bytes de redundância
- 41 08 08 0D F6 38 D8 03 (00)x56
- A resposta seria da forma:
- 42 40 FE FF (0x00)x60
Byte Função 42 Comando de confirmação de mudança de frequência 40 Tamanho da mensagem FE Modo hop OFF (seria FC se fosse ON) FF Terminador
- 42 40 FE FF (0x00)x60
Comandos relevantes (transponder oriented)
- Estes comandos forçam o microcontrolador do leitor AS3992 a comunicar com as tags, exigindo que a alimentação da antena esteja ligada (comando OUT_ANTENNA_POWER), e que haja tags na vizinhança (byte 0 ≠ 0xFF → ver Mensagens de erro)
- Existem vários comandos para realizar a leitura, mas os sugeridos aqui possuem mais documentação e são mais adequados
- Para o projeto em questão, não é necessário escrever ou ler conteúdo das tags, pelo que também não encontram aqui esses comandos
OUT_INVENTORY_RSSI (0x43)/IN_INVENTORY_RSSI(0x44)
- A leitura é efetuada apenas quando o host indica que esta se realize, com a flag 0x01 (iniciar inventário). Depois, a resposta inclui o número de tags que foi lida (juntamente com o ID da primeira tag a ser lida), indicando também ao host o número de vezes que a função necessita de ser chamada com a flag 0x02 (informação da próxima tag).
- Estrutura:
- OUT_INVENTORY_RSSI (0x43)

- O byte 2 pode ser 0x01 para “Start inventory” (para começar a leitura), ou 0x02 para obter a informação acerca da próxima tag
- IN_INVENTORY_RSSI (0x44)

- O byte 3 devolve uma indicação (razoável) da potência emitida pela tag. Dado que esta depende da distância a que esta se encontra, é razoável admitir que, sendo a antena um radiador semi-isotrópico, para uma certa leitura de inventário, a tag que possua o valor mais elevado nesta componente será a que se encontra mais próxima do leitor. Este valor pode ser desconstruído em duas componentes, uma em fase e outra em quadratura, tal que:
- Signal strength of signal Q =(0x9E>>4)*2=18
- Signal strength of signal I =(0x9E&0x0F)*2=28
- Apesar de não estar indicado na imagem acima, existe ainda um espaço para a frequência a que ocorreu a deteção, nos bytes 4, 5, e 6 (recebido em ordem contrária, ou seja, a frequência será nos bytes 6,5,4)
- Os restantes bytes contêm o ID da tag em questão
- O byte 3 devolve uma indicação (razoável) da potência emitida pela tag. Dado que esta depende da distância a que esta se encontra, é razoável admitir que, sendo a antena um radiador semi-isotrópico, para uma certa leitura de inventário, a tag que possua o valor mais elevado nesta componente será a que se encontra mais próxima do leitor. Este valor pode ser desconstruído em duas componentes, uma em fase e outra em quadratura, tal que:
- OUT_INVENTORY_RSSI (0x43)
- Exemplo de comunicação, host envia:
- 43 03 01
Byte Função 43 Comando de inventário com RSSI (envio) 03 Tamanho da mensagem em bytes 01 Início de inventário
- Resposta: 44 16 01 9E AC 3C 0D 0E 30 00 01 02 03 04 05 06 07 08 09 10 6A
0FByte Função 44 Receção de inventário com RSSI (envio) 16 Tamanho da mensagem em bytes 01 Apenas uma tag encontrada 9E Nível de energia do sinal recebido AC 3C 0D Frequência da deteção, “AC 3C 0D” passa a “0D 3C AC” que se traduz em 866900 kHz 0E Tamanho da mensagem EPC e fo PC 30 00 PC (serve de tampão) 01 02 03 04 05 06 07 08 09 10 6A 0F ID (único) de cada tag
- 43 03 01













