Manual MifareUSB/Serial 08/2012 V2.6 Manual MifareUSB/Serial Este manual descreve as conexões de hardware e os comandos para leitura, escrita e configurações para os leitores/gravadores de cartão Mifare USB a partir da versão 2.3. Conector P3 1 ES1 2 ES2 3 ES3 4 ES4 5 ES5 6 ES6 7 5V 8 ES7 9 5V 10 GND Conector P1 1 TX 2 5V 3 GND 4 D+(USB) 5 D-(USB) 6 RX 7 D0 8 D1 - existem apenas na versão 3.1 Alimentação: 5V ±10% Consumo: Antena Mifare desligada 20mA Antena Mifare ligada 100mA Saída 20mA por ES Dois ou Quatro LED indicativos (depende do modelo disponível). Buzzer (depende do modelo disponível). Detalhes da versão MifareUSB O MifareUSB conecta-se a um PC através de uma porta USB, sendo totalmente compatível com a versão USB 2.0. Usa a alimentação do próprio PC para funcionar. Na versão USB apenas as saídas digitais estão disponíveis (SOB ENCOMENDA). Conectando-se o MifareUSB ao PC, este criará uma porta serial enumerada na seqüência das portas já instaladas. O drive do MifareUSB instalará uma porta com a descrição Leitor Gravador de Cartões Mifare (COMxx) (figura 1).
Figura 1 Uma vez instalado o MifareUSB, o acesso poderá ser feito em qualquer software com capacidade de comunicação com os canais seriais do PC, por exemplo o HyperTerminal. Em nosso site (www.teenpo.com.br), temos a disposição, gratuitamente, um software de demonstração do MifareUSB.
Leitor Gravador Mifare Teenpo no Linux Por padrão, o Linux já traz um drive de acesso a dispositivos CDC em seu kernel. Quando um dispositivo CDC é conectado a um PC com Linux, uma porta ttyacmx será criada (Testes efetuados com o Ubuntu 12.04). Abra uma janela de terminal e digite: dmesg grep -i tty Serão listados os dispositivos USB tty disponíveis....ttyacm0... Digite: lsusb e serão listados os dispositivos USB por seu identificador. O Leitor Mifare Teenpo será listado pelo identificador: [0234:FF27] Abra o minicom, altere a porta para ttyacmx, apague as strings de inicialização do modem pois não há a necessidade de nenhuma inicialização, salve as mudanças feitas e inicie a comunicação. Digite V e enter, o leitor deverá bipar e retornar a versão de firmware. Todas as funções poderão ser testadas no minicom, de acordo com os exemplos mostrados neste manual.
Detalhes da versão MifareSerial O MifareSerial tem as mesmas funções de escrita e leitura da versão USB mais quatro saídas e 3 entradas digitais (SOB ENCOMENDA). O MifareSerial conecta-se serialmente a uma taxa de 9600 bps 8 bits, sem paridade e um stop bit como padrão de fabrica, podendo ser ajustada a qualquer momento de acordo com a necessidade. Comandos O MifareUSB/Serial tem a disposição comandos para escrita, leitura e configuração. São eles: Ligar e desligar sinal da antena Ler número de série do cartão Selecionar cartão Autenticar cartão usando chave gravada no chip Autenticar cartão chave fornecida pelo usuário Ler Bloco Escrever em bloco Escrever nos blocos de configuração do cartão Ler Valor Escrever Valor Incrementar Valor Decrementar Valor Escrever chave de criptografia no MifareUSB/Serial Ler automaticamente um bloco definido pelo usuário Ler automaticamente o número do cartão Suspender e retomar leituras automáticas Ler entradas (todas ao mesmo tempo. SOB ENCOMENDA) Ativar ou desativar saída digital Mudar Baudrate da Porta Serial (Valido apenas para o modelo MFSerial) Todos os comandos serão enviados ao MifareUSB/Serial em ASCII e os valores em hexadecimal.ex: Para se enviar o numero 25 decimal usaremos os caracteres 1 e 9.
Todos os comandos enviados ao MifareUSB/Serial serão finalizados com o caracter 13 (RETURN, 0x0d), e todas as respostas do MifareUSB/Serial serão em ASCII e terminarão com os caracteres #13(0x0d) e #10(0x0a), RETURN e LINEFEED respectivamente. Todos os valores serão em HEXADECIMAL e os caracteres de A a F usados para codificar os valores em hexadecimal serão sempre em letras maiúsculas. Resumo dos comandos Comando Exemplo Descrição Comentario C C05 Ligar antena Responde OK C C00 Desligar antena Responde OK S S Seleciona cartão Responde OK A A010161 Autentica setor Responde OK ou ER R R01 Lê bloco 01 Responde conteúdo do bloco ou ER W W01H<dados> Grava no bl.01 em hexa Responde OK ou ER O O01 Lê valor no bl 01 Responde Valor ou ER J J0100000064 Escreve 100 no bl01 Responde OK ou ER K K0100000001 Incrementa o bl01 em 1 Responde OK or ER L L0100000001 Decrementa o bl01 em 1 Responde OK ou ER N N Lê o num. Serie do cartão Responde num. Cartão ou nada B B100161 Sel, aut., e lê bl 16 Responde conteúdo ou ER E E090161A<data> Sel, Aut. E grava Bl 9 Responde OK ou ER e e030161a<data> Sel, Aut. E grava Bl 3 Responde OK ou ER G G010161 Sel. Aut., e Lê o Valor Bl01 Responde o valor ou ER H H010161<dado> Sel.,Aut. e grava valor Responde OK ou ER I I010161<dado> Sel., Aut. e Incrementa Bl01 Resposde OK ou ER Q Q010161<dado> Sel., Aut. e Decrementa Bl01 Responde OK ou ER P P000160<chave> Grava chave 0 na EEPROM Responde OK b b07 Muda Baudrate do leitor Responde OK D D010160 Liga leitura autom. de bloco Responde o dados do bloco indicado F F Liga leitura auto do ID cartão Responde o ID quando houver M M0000 Desliga leitura autom. Responde OK U U Suspende a leitura autom. Responde OK Z Z Retoma leitura autom. Responde OK V V Retorna Versao do leitor
Tempos de execução Estes são os tempos de execução dos comandos (não são considerados os tempos de comunicação). Seleção 48 ms Autenticação chave fornecida - 35 ms Autenticação chave interna - 32 ms Leitura de Bloco - 15 ms Gravação de Bloco - 28 ms Ligar e Desligar Sinal da Antena Este comando é usado quando se deseja que o consumo de energia seja menor. O MifareUSB/Serial consome apenas o necessário as funções lógicas. Comando: C05 + chr(13) Liga a antena C00 + chr(13) Desliga antena Retorno: OK + chr(13) + chr(10) Ler Número de Série do Cartão Este comando lê o numero de serie do cartão, caso o cartão já esteja no campo de atuação do leitor e o sinal da antena esteja ligada. O MifareUSB/Serial retornará em ASCII o numero do cartão em valores hexadecimal. Comando: N + chr(13) Lê numero do cartão Retorno: B2FADFD1 + chr(13) + chr(10) Para que o cartão possa ler lido ou escrito, primeiro deve ser selecionado. Comando: S + chr(13) Seleciona o cartão Retorno: OK + chr(13) + chr(10) Seleciona Cartão
Autentica Cartão Após o cartão ter sido selecionado, há a necessidade de ser autenticado, ou seja, o cartão receberá uma chave criptográfica de 6 bytes que liberará a leitura ou escrita por parte do MifareUSB/Serial. Existem duas maneiras de se autenticar um cartão Mifare. O primeiro é se fornecendo a chave criptográfica no corpo do comando de autenticação. O outro é se usando uma chave gravada previamente na memória EEPROM do MifareUSB/Serial. Os cartões Mifare vem de fabrica com suas chaves zeradas ( 0xFFFFFFFFFF). Portanto para se ler ou escrever um cartão novo, deve-se usar a chave com o valor 0xFFFFFFFFFF. Comando: Retorno: A100000FFFFFFFFFFFF + chr(13) Autentica Cartão OK + chr(13) + chr(10) Este comando autenticará os blocos 16, 17, 18 e 19. Onde: A 10 00 00 FFFFFFFFFFFF C BB TT CC VVVVVVVVV C Comando Autenticar BB Bloco a ser autenticado (em HEXA) TT Tipo de autenticação CC Chave de autenticação V Numero da Chave (em HEXA) Quando o Valor de CC é zero, o valor de TT pode ser zero ou um, que indicará a autenticação nas chaves A ou B sendo 00 para chave fornecida A e 01 para chave fornecida B. Se o valor de CC for 60 ou 61, indica que usaremos as chave de autenticação A ou B previamente gravadas no leitor, e o valor de TT (em HEXA), informa ao MifareUSB/Serial qual das 32 possíveis chaves internas serão usadas na autenticação, sendo 16 para chave A e 16 para a B. Exemplo 1: Comando: A190460 + chr(13) Autentica Cartão Retorno: OK + chr(13) + chr(10). Onde: A 19 04 60 A Comando Autenticar 19 Autenticação do bloco 25 04 Chave interna numero 4
60 Usa a chave A para autenticação Exemplo 2: Comando: A3A1861 + chr(13) Autentica Cartão Retorno: OK + chr(13) + chr(10). Onde: A 3A 18 61 A Comando Autenticar 3A Autenticação do bloco 58 18 Chave interna numero 24 61 Usa a chave B para autenticação Exemplo 3: Comando: Retorno: A3A0001FFFFFFFFFFFF + chr(13) Autentica Cartão OK + chr(13) + chr(10) Onde: A 3A 18 61 A Comando Autenticar 3A Autenticação do bloco 58 00 indicador de chave fornecida 01 Usa a chave B para autenticação FFFF...FF Chave para autenticação Ler Bloco Após o cartão ter sido selecionado e ter o bloco que se deseja ler devidamente autenticado, o cartão está pronto para ser lido. O comando de leitura informa ao MifareUSB/Serial qual bloco deverá ser lido. O retorno do MifareUSB/Serial será de 32 caracteres ASCII que representam o valor em hexadecimal do conteúdo do bloco lido: Comando: R10 + chr(13) - Ler bloco 16 Retorno: 0102030405060708090A0B0C0D0E0F + chr(13) + chr(10); Na resposta, cada par representa o valor em hexa contido em cada byte do bloco lido codificado em ASCII. Teríamos a seguinte resposta: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Exemplo 1: Comando: R14 + chr(13) Resposta: 54-65-73-74-65-31-32-33-0D-00-00-00-00-00-00-00 Em ASCII: T e s t e 1 2 3 + chr(13) + chr(10); Ler Valor Após o cartão ter sido selecionado e ter o bloco, onde o valor que se deseja ler, devidamente autenticado, o cartão está pronto para ser lido. O comando de leitura informa ao MifareUSB/Serial qual bloco de valor deverá ser lido. O retorno do MifareUSB/Serial será de 8 caracteres ASCII que representam o valor em hexadecimal do conteúdo do bloco lido: Comando: O10 + chr(13) - Ler bloco 16 Retorno: 00000064 + chr(13) + chr(10); // valor em hexa para 100 Na resposta, cada par representa o valor em hexa contido em cada byte do bloco lido codificado em ASCII. Seleciona, autentica e lê bloco Este comando seleciona, autentica e lê o bloco indicado no corpo do comando. Ele diminui a quantidade de comandos enviados ao MifareUSB/Serial. Funciona de forma análoga ao comando autentica.. O retorno do MifareUSB/Serial será de 32 caracteres ASCII que representam o valor em hexadecimal do conteúdo do bloco lido: Comando: B100000FFFFFFFFFFFF + chr(13) - Ler bloco 16 Retorno: 0102030405060708090A0B0C0D0E0F + chr(13) + chr(10); Cada par representa o valor em hexa contido em cada byte do bloco lido codificado em ASCII. Teríamos a seguinte resposta: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Exemplo 1: Comando: Resposta: B100000FFFFFFFFFFFF + chr(13) 54-65-73-74-65-31-32-33-0D-00-00-00-00-00-00-00
Em ASCII: T e s t e 1 2 3 + chr(13) + chr(10); Seleciona, autentica e lê Valor Este comando seleciona, autentica e lê o valor contido no bloco indicado formatado com bloco de valores. Ele lê e verifica a integridade do valor contido no bloco indicado a leitura. Funciona de forma análoga ao comando autentica. O retorno do MifareUSB/Serial será de 8 caracteres ASCII que representam o valor em hexadecimal do conteúdo do bloco lido ou ER caso o bloco não esta formatado como Valor. Comando: G100000FFFFFFFFFFFF + chr(13) - Ler bloco 16 Retorno: 00000064 + chr(13) + chr(10); - Retorno o valor 100 decimal Exemplo 2: Comando: G100000FFFFFFFFFFFF + chr(13) Resposta: 30 30 30 30 30 30 36 34 Em ASCII: 0 0 0 0 0 0 6 4 + chr(13) + chr(10); Escrever Bloco Para se escrever em um bloco do cartão deve-se proceder da mesma forma que na leitura. Há a necessidade de se selecionar o cartão, autenticar o bloco de destino da escrita e enviar os dados a serem escritos. Pode-se escrever no cartão de duas formas. Com os dados enviados no formato ASCII, quando se deseja escrever algum texto ou no modo Hexadecimal, onde os dados enviados são valores. Usa-se o indicador A ou H para isso. Escrever em ASCII Comando: W02ATeste de escrita + chr(13) Resposta: OK + chr(13) + chr(10); W 02 10 A Teste de escrita Onde: W Comando de escrita 02 Bloco de escrita A Indicador de escrita em ASCII Tes... 16 caracteres de dados para escrita
Escrever em HEXA Comando: W02H0102030405060708090A0B0C0D0E0F10 + chr(13) Resposta: OK + chr(13) + chr(10); W 02 A 0102030405060708090A0B0C0D0E0F10 Onde: W Comando de escrita 03 Bloco de escrita H Indicador de escrita modo Hexa 0102...10 32 caracteres de dados para 16 valores de escrita escrita Escrever Valor Para se escrever em um bloco de valor do cartão deve-se proceder da mesma forma que na leitura. Há a necessidade de se selecionar o cartão, autenticar o bloco de destino da escrita e enviar os dados a serem escritos. Para se escrever um valor deve-se enviar o valor codificado em hexadecimal em 4 bytes. Como se envia o dado em ASCII, serão enviados 8 caracteres. Escrever Valor Comando: J0100000064 + chr(13) Resposta: OK + chr(13) + chr(10); J 01 00 00 00 64 Onde: J Comando de escrita 01 Bloco de escrita 00 00 00 64 Valor 64 em hexa.
Seleciona, autentica e grava bloco Este comando seleciona, autentica e grava os dados enviados no bloco e com a autenticação enviados no corpo do comando. Ele diminui a quantidade de comandos enviados ao MifareUSB/Serial. Funciona de forma análoga ao comando autentica. e escreve bloco. O retorno do MifareUSB/Serial será ou OK ou ER : Comando escrita em ASCII: E020001FFFFFFFFFFFFAteste de escrita + chr(13) - Escreve bloco 01 Retorno: OK + chr(13) + chr(10); Onde: E Comando de escrita de bloco 02 Bloco de escrita 00 - Indicador de chave de escrita, neste caso 00 01 - indicador de usa da chave A FF..FF Chave de autenticação do bloco (em Hexa) A - - Indicador de escrita em ASCII Teste de escrita Dados a serem escritos Comando escrita em HEXA: E010000FFFFFFFFFFFFH0102030405060708090A0B0C0D0E0F10+ chr(13) - Escreve bloco 01 Retorno: OK + chr(13) + chr(10); Onde: E Comando de escrita de bloco 00 Bloco de escrita 00 - Indicador de chave de escrita, neste caso 00 01 - indicador de usa da chave A FF..FF Chave de autenticação do bloco (em Hexa) H - - Indicador de escrita em Hexadecimal 0102...0F Dados a serem escritos
Seleciona, autentica e grava blocos de configuração Este comando seleciona, autentica e grava os dados enviados apenas nos blocos de configuração do cartão. Estes dados configurarão no cartão as chaves de A e B e a forma com que elas devem ser usadas. Este comando foi implementado por medida de segurança para se evitar a escrita inadvertida nestes blocos. Ele funciona de forma análoga ao comando Seleciona autentica e grava dados, onde apenas o caracter de comando é diferente. Quando se envia este comando a qualquer bloco de dados, ele será aceito e modificará os dados do bloco. O comando aceita apenas a forma Hexadecimal de escrita. Leia o descrito do cartão Mifare para detalhes dos blocos de configuração. O retorno do MifareUSB/Serial será ou OK ou ER: e070000ffffffffffffha0a1a2a3a4a5a6ff800769010203040506 + chr(13) - Escreve bloco 07 Retorno: OK + chr(13) + chr(10); Onde: e - Comando de escrita de bloco de configuração 00 - Bloco de escrita 00 - Indicador de chave de escrita, neste caso 00 01 - Indicador de usa da chave A FF..FF - Chave de autenticação do bloco (em Hexa) H - - Indicador de escrita em Hexadecimal A0A1...06 - Dados a serem escritos no bloco de configuração Seleciona, autentica e grava valor Este comando seleciona, autentica, formata um bloco como valor e grava um valor neste bloco. Funciona de forma análoga ao comando seleção, autenticação e gravação de bloco. O retorno do MifareUSB/Serial será ou OK ou ER Escrever em ASCII Comando: H020000FFFFFFFFFFFF00000064 + chr(13) Resposta: OK + chr(13) + chr(10); H020000FFFFFFFFFFFF00000064 Onde: H Comando de escrita de valor 03 Bloco de escrita 01 - Indicador de chave de escrita, neste caso 00 00 - indicador de usa da chave A FF..FF Chave de autenticação do bloco (em Hexa)
00 00 00 00 00 64 Valor 100 em hexa. Escreve chave criptográfica no MifareUSB/Serial Para se autenticar um bloco do cartão Mifare deve-se proceder de duas maneiras. Ou se envia a chave de leitura no corpo do comando de autenticação ou instrui-se o MifareUSB/Serial a usar uma de suas 32 chaves (16 para chave A e 16 para B) gravadas na memória EEPROM interna. As chaves guardadas na EEPROM do MifareUSb/Serial não podem ser lidas mas podem ser reescritas, isso torna as chaves realmente seguras. Comando: Retorno: P000460010203040506 OK + chr(13) + chr(10); P 00 04 60 010203040506 Onde : P Comando de grava chave 00 SEMPRE ZERO 04 Número da chave 60 Indica a chave A(60) ou B(61) 0102... Valor da chave Este comando grava na chave A o valor 010203040506 na posição 4 Exemplo: P 00 0F 61 FFADCD12783A Onde : P Comando de grava chave 00 SEMPRE ZERO 0F Chave número 16 61 Indica a chave B FFAD... Valor da chave
Ler constantemente um bloco definido pelo usuário Este comando automatiza o uso do MifareUSB/Serial para uma leitura constante de um bloco determinado e envia a leitura pelo canal de comunicação. O MifareUSB/Serial seleciona, autentica com a chave indicada no comando e lê o bloco automaticamente. Pode-se escolher se a autenticação será por chave fornecida pelo usuário ou por uma das chaves gravadas no MifareUSB/Serial. Comando: D100000010203040506 + chr (13) Resposta: OK + chr(13) + chr(10); D 10 0000 010203040506 Onde D Comando de leitura constante 10 Bloco a ser lido(em hexa) 0000 indica que a chave é fornecida no comando 0102.. Chave criptográfica Quando o cartão é aproximado do MifareUSB/Serial, imediatamente é enviado pelo canal de comunicação os dados do bloco programado para leitura. Os dados estão descrito no item Leitura de Bloco Exemplo 1: Comando: Resposta: D100360 OK + chr(13) + chr(10); D 10 Onde D Comando de leitura constante 10 Ler bloco 16 (em hexa) 03 Chave de autenticação 60 Indica autenticação pela chave A Exemplo 2: Comando: Resposta: D190361 OK + chr(13) + chr(10); D 10 Onde D Comando de leitura constante 19 Ler bloco 25 (em hexa) 03 Chave de autenticação 61 Indica autenticação pela chave B
Leitura constante do numero de série do cartão Este comando automatiza o uso do MifareUSB/Serial para uma leitura constante do cartão que se aproximar do campo do leitor de cartões. Comando: F + chr (13) Resposta: B2FADFD1 + chr(13) + chr(10) Suspende e Retoma a leitura constante do cartão Estes comandos suspendem e retomam a leitura automática tanto do número de serie do cartão como de um bloco pré-programado. A vantagem do uso destes comandos, ao invés do desligar e ligar o comando, é que com eles, não há a necessidade se enviar todos os dados de numero de bloco, chave de autenticação, etc.., quando se desejar retomar a leitura constante.. Comando: U + chr (13) // comando para suspender Resposta: OK + chr(13) + chr(10) Comando: Z + chr (13) // comando para retomar leitura Resposta: OK + chr(13) + chr(10) Muda o Baudrate do Leitor Este comando muda o Baudrate do leitor de acordo com o valor enviado. Como padrão, o leitor sai de fabrica com 9600 bps. Use a tabela abaixo para ajustar (VALIDO APENAS PARA OS MODELOS SERIAIS). Valor BPS 01 2400 02 4800 03 9600 04 19200 05 38400 06 56700 07 115200 Comando: b07 + chr (13) // muda para o baudrate para 115200 bps Resposta: OK + chr(13) + chr(10)
Comando: b03 + chr (13) // muda para o baudrate para 9600 bps Resposta: OK + chr(13) + chr(10) Após a troca do baudrate, o leitor se autoresetará, assumindo a nova configuração. O valor do baudrate é mantido pelo leitor mesmo após ele ser desligado.