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)
  • Formato da mensagem:
  • 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)
  • As mensagens de erro (recebidas pelo host) distinguem-se pelo primeiro byte, havendo as seguintes opções:
    • Timeout define-se como falta de resposta:
  • Existem 6 tipos de erro, sendo que para o caso, os mais relevantes são:

Resumo dos comandos

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)
  • Basicamente envia (e recebe uma mensagem) com primeiro byte 0x10 (ou 0x11 para resposta) com informação acerca da versão do firmware e do hardware da placa AS3992
  • Estrutura:
    • OUT_FIRM_HARDW_ID (0x10)
      • Byte 2 pode ser 0x00 para firmware ou 0x01 para hardware
    • IN_FIRM_HARDW_ID(0x11)

OUT_ANTENNA_POWER (0x18)/IN_ANTENNA_POWER (0x19)
  • No funcionamento mais básico, indica à placa para ligar ou desligar o envio de potência para a antena
  • Estrutura
  • 0x00 para OFF, 0xFF para ON
  • Para o nosso caso, não é necessário ajustar a potência, assume-se só o máximo
  • Resposta do AS3992 no formato:

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
  • Estrutura:
    • OUT_CHANGE_FREQ (0x41)
    • IN_CHANGE_FREQ (0x42)
  • 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
  • Os valores do byte MASK poderão ser:
  • 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
      ByteFunção
      41Comando de mudança de frequência
      08Tamanho da mensagem
      08Desligar o modo de hop, limpa a lista de frequências, apenas uma frequência central
      0D F6 38Frequência central de utilização 915MHz
      D8Nível de RSSI (-40dBm)
      03Número do perfil (03 - EUA)
      (00)x5656 bytes de redundância
  • A resposta seria da forma:
    • 42 40 FE FF (0x00)x60
      ByteFunção
      42Comando de confirmação de mudança de frequência
      40Tamanho da mensagem
      FEModo hop OFF (seria FC se fosse ON)
      FFTerminador
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
  • Exemplo de comunicação, host envia:
    • 43 03 01
      Byte Função
      43Comando de inventário com RSSI (envio)
      03Tamanho da mensagem em bytes
      01Iní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
      0F
      ByteFunção
      44Receção de inventário com RSSI (envio)
      16Tamanho da mensagem em bytes
      01Apenas uma tag encontrada
      9ENível de energia do sinal recebido
      AC 3C 0DFrequência da deteção, “AC 3C 0D” passa a “0D 3C AC” que se traduz em 866900 kHz
      0ETamanho da mensagem EPC e fo PC
      30 00PC (serve de tampão)
      01 02 03 04 05 06 07 08 09 10 6A 0FID (único) de cada tag

Protocolo de comunicação (host wise) detalhado
  • Fluxograma detalhado do protocolo (a ser implementado) para a comunicação com o leitor AS3992, com as mensagens a ser enviadas em cada estado.