Peças: No teclado

Na semana passada, introduzimos uma nova versão da ferramenta de interface serial universal do Bus Pirate. A última atualização do firmware incluía uma biblioteca de decodificador no teclado para as duas versões de hardware.

Há uma tonelada de velha em teclados, fazendo o seu caminho para o aterro. Vamos mostrar como reciclar um como um dispositivo de entrada para o seu próximo projeto.

Conexão

Pirata de ônibus
PC no teclado (PIN #)

SDA.
Dados KBD (3)

Scl.
Relógio KBD (1)

+ 5volts.
VDD (5)

Gnd.
GND (2)

Em teclados se comunicam sobre uma interface bidirecional de dois fios. O barramento é colecionador aberto, mas os teclados já têm resistores de pull-up internos. O PC no protocolo do teclado é descrito aqui. Usamos nossa ferramenta de pirata de ônibus para demonstrar o protocolo de teclado, mas os mesmos princípios básicos se aplicam a qualquer microcontrolador.

Nós conectamos o pirata do ônibus ao teclado como descrito na tabela. Acreditamos que esta é uma fêmea através do buraco no teclado, mas nós não avaliamos isso. Você conhece uma fonte para novos soquetes?

Protocolo

O teclado oferece o sinal de relógio para todas as transferências de dados; O lado do PC se assemelha a um dispositivo escravo. Nenhuma das bibliotecas existentes da interface do pirata de ônibus funcionam com um relógio externo, por isso escrevemos uma biblioteca fácil de decodificador de teclado. A biblioteca depende do sinal do relógio do teclado, e vai travar se o teclado falhar ou não estiver conectado. Se você usar nossa biblioteca em seu próprio projeto, considere adicionar um atraso no tempo limite nas funções Readbit () e WritteBEIT ().

PC para códigos de comando do teclado

Código
Comando

0xed.
Definir LEDs de status

0xee.
Echo 0xee.

0xf0.
Definir tipo Scancode.

0xf3.
Definir taxa de repetição

0xf4.
Ativar teclado

0xf5.
Teclado desativar

0xfe.
Reenvie o último byte.

0xff.
Redefinir o teclado

Um PC usa esses comandos para controlar várias funções de um teclado. O teclado responde aos comandos com um byte de reconhecimento (Oxfa). Em nossa experiência, o teclado será redefinido se o byte de reação não for lido logo após o envio do comando.

Teclado para códigos de reação de PC

Código
Resposta

0xfa.
Reconhecer

0xaa.
Auto teste passou

0xee.
Resposta de eco

0xfe.
Reenvie o último byte.

0x00 ou 0xff.
Erro ou estouro de buffer

O teclado tem um número de códigos de reação de bytes únicos. Muitos comandos do PC são reconhecidos com 0xFA. 0xaa é enviado após uma reinicialização do teclado.

Configurar o pirata de ônibus

Hiz> M.
1. Hiz.

9. PC no teclado
Modo> 9 <-Set Mode Conjunto de modo 900. X02 PC no decodificador KB Pronto PC no teclado>

Primeiro, configuramos o pirata do ônibus no modo de teclado, opção 9.

PC no teclado> P <-Power Supply Setup W / w alterna a oferta 3.3volt? 1. No. 2. Sim MODO> 1 <-NO 3.3Volt fornecem W / w tocou 5Volt fornecimento? 1. No. 2. Sim Modo> 2 <-Use a fonte de 5volt 9xx fornecimento configurado, use w / w para alternar Monitor de tensão 9xx: 5V: 0.0 | 3.3V: 0.0 | Vpullup: 0.0 | PC no teclado> W <-Capital 'W', gire o fornecimento 9xx 5volt fornecem PC no teclado>

Em seguida, configuramos a fonte de alimentação do Pirate Bus para oferecer 5Volts para o teclado no.

PC no teclado> r <-read byte do teclado X30 PCATKB LEIA: Nenhum <-No dados disponíveis PC no teclado>

A biblioteca do teclado segue a sintaxe padrão do pirata de ônibus. Valores numéricos são enviados para o teclado como bytes, ‘R’ lê um byte do teclado. O protocolo é programado pelo teclado, então as operações bitwise estão desativadas. Se nenhum dado estiver disponível, a leitura retornará ‘nenhuma’.

Configure o teclado

PC no teclado> 0xee R <-Send 0xee, leia um byte X20 PCATKB WRITE: 0xee tem Ack <-Write Oxee, Got Ack Bit X30 PCATKB leu: 0xee <-read 0xee, Echo foi bem sucedido PC no teclado>

Podemos testar a conexão com o teclado no comando ECHO, 0xee. O teclado responderá 0xee se nossas conexões estiverem corretas.

O teclado responde aos comandos com um bit de ACK no nível de protocolo e, novamente, com um byte ACK. Descobrimos que nossos teclados de teste redefinir automaticamente se o byte ACK não foi lido imediatamente após o envio do comando.

PC no teclado> 0xee <-comando comando X20 PCATKB escrever: 0xee tem Ack <-Wrote Echo, Got Ack PC no teclado> r <-read one byte X30 PCATKB ler: 0xaa <-read 0xaa, indicador de reset PC no teclado>

Aqui, tentamos enviar o comando Echo e depois ler a resposta mais tarde. A redefinição do teclado automaticamente e respostas 0xaa, autoteste passou.

PC no teclado> 0xff r r <-reset comando, leia dois bytes X20 PCATKB WRITE: 0XFF GOT ACK <-WRITE RESET Command, Got ACK X30 PCATKB ler: 0xfa <-command ack byte X30 PCATKB LEIA: Nenhum <-read uma vez muito mais para redefinir PC no teclado>

O teclado é redefinido escrevendo o comando 0xff e lendo dois bytes. O teclado não é redefinido até que o segundo byte seja lido.

PC no teclado> R <-LEAD A BYTE X30 PCATKB LEIA: 0XAA <-Reset Success PC no teclado>

Um curto período após a reinicialização, podemos ler os resultados do poder de poder (post), 0xaa indica o sucesso do pós-sucesso.

PC no teclado> 0xf5 r <-disable o teclado X20 PCATKB Escrever: 0xf5 Got Ack <-Wrote Command X30 PCATKB Ler: 0xfa <-read ack byte PC no teclado> 0xf4 r <-enable teclado X20 PCATKB WRITE: 0xf4 recebeu o comando ack <-wrote X30 PCATKB Ler: 0xfa <-read ack byte PC no teclado>

0xf5 disa.Bles Teclado Entrada. 0xf4 permite o teclado e limpa o buffer.

PC no teclado> 0xed R 0B111 R

Leave a Reply

Your email address will not be published.