ISA Plug and Play
Por Ricardo Zelenovsky e Alexandre Mendonça em 11 de maio de 1998
Introdução
O barramento ISA, apesar das limitações técnicas de sua especificação (16 bits e 8MHz de clock), permite que se projetem placas de expansão simples, baratas e que oferecem desempenhos suficientes para determinados periféricos, como placas fax-modem, placas de som e portas de comunicação serial e paralela.
Contudo, frente ao modismo plug and play, surgiu a necessidade de estabelecer-se um modelo que permitisse a configuração dinâmica dos recursos de hardware para as placas ISA. Vale observar que o arranjo de sinais elétricos do barramento que é usado pelas placas ISA plug and play é o mesmo que o especificado pela IBM, em 1984, por ocasião do projeto do PC AT.
O modelo ISA plug and play requer que todos os adaptadores ISA instalados respondam aos ciclos de I/O para três registradores: o registrador de endereços (279h, só para escrita), o registrador de escrita (A79h, só para escrita) e o registrador de leitura (programável entre 203h e 3FFh, só para leitura). Por estes registradores, o adaptador (placa) é programado para estar em um dos 4 estados de operação: Espera por Chave, Sleep, Isolamento ou Configuração.
Basicamente, o estado de Espera por Chave é aquele em que a placa está pronta para operação, ou seja, apta para trocar informações com os aplicativos ou device-drivers. Nos outros três estados, todos os dispositivos lógicos implementados são desconectados eletricamente do barramento para que se efetue o processo de configuração de recursos.
Estado de Espera por Chave
Após a placa ISA ter seus recursos (endereços, IRQ, etc.) programados, estando ela pronta para operação, tendo sido configurada, todos os dispositivos lógicos nela contidos são conectados eletricamente ao slot ISA. Neste caso, diz-se que a placa está no estado de Espera por Chave, ou Wait for Key. Ela entra neste estado logo após o reset do computador (via sinal RESET DRV do barramento) ou por ocasião do término de todos os processos de configuração, quando então o software de gerenciamento plug and play, através de uma escrita conveniente (ver registrador de Controle de Configuração), deixa todas as placas operacionais.
Para iniciar a configuração dos adaptadores, a BIOS ou o sistema operacional realiza uma seqüência apropriada de 32 escritas no registrador de endereços (279h), quando então os adaptadores vão para o estado Sleep. O circuito 1 detecta a seqüência de inicialização e desabilita um sinal W.F.KEY, que sinaliza se o adaptador está no estado Espera por Chave. Reparar a presença de um flip-flop, gatilhado por borda, que garante que os dispositivos sejam eletricamente conectados ao barramento somente após o término do processo de configuração, e não por ocasião do reset.
Porém, é possível que endereços, IRQs e canais de DMA sejam inicializados com valores pré-estabelecidos (fixos ou determinados por jumpers). Projetos com este atributo podem utilizar o reset para já deixar a placa operacional, sem que se espere por um processo de configuração, o que permite a utilização de uma placa ISA plug and play num computador que não seja plug and play. Neste caso, o sinal HAB BARR do circuito 1 fica sendo o próprio W.F.KEY.
clique para ampliar
Circuito 1: Detecta a seqüência de inicialização e que controla a conexão dos dispositivos lógicos, contidos na placa, ao barramento ISA.Estados Sleep, Isolamento e Configuração
Os adaptadores entram no estado Sleep logo após ser detecatada a seqüência de inicialização, quando então ficam aguardando que o software de gerenciamento plug and play isole, através de uma seqüência de isolamento, uma placa de cada vez, atribuindo a cada uma delas um número de seleção diferente, denominado CSN (Card Select Number), número este que passará a identificar o adaptador para futuros processos de configuração de recursos.
A seqüência de isolamento é um processo bastante interessante. Cada placa possui um código identificador de 72 bits (código fabricante e número de série), que é utilizado nos seguintes passos:
a) O software plug and play escreve 01h no registrador de endereços (279h), selecionando assim o registrador de identificação serial (ver Figura 1).
b) Todas as placas que estejam com CSN=0 entram (via hardware), após o primeiro pulso /IOR para o registrador de leitura, no estado de Isolamento, participando da seqüência iniciada.
c) São efetuados 72 pares de leituras para o registrador de identificação serial, um par relacionado a cada bit do código de identificação.
d) No primeiro par de leituras, uma placa cujo primeiro bit do código de identificação seja 1 deve colocar no barramento de dados os valores 55h e AAh nas leituras (com impedância de saída suficiente para que não haja conflitos de barramento), respectivamente para a primeira e segunda leituras. Uma placa cujo primeiro bit seja 0 deve ler o barramento para verificar se algum outro adaptador colocou 55h e AAh nas leituras. Se isto ocorrer, o adaptador deve abortar esta seqüência de isolamento e aguardar uma outra.
e) O mesmo procedimento do item (d) é realizado para os outros 71 bits, o que resulta no isolamento de uma única placa após o último bit.
f) O software plug and play atribui o valor de seleção da placa (CSN) à placa resultante e é iniciada outra seqüência de isolamento, até que todas as placas tenham sido identificadas e tenham recebido um valor para CSN.
Após todos os adaptadores receberem um CSN, cada um deles poderá entrar no estado de Configuração, um de cada vez, para a programação dos recursos, bastando que CSN=WAKE (ver Figura 1 e circuito 5, que serão comentadas no decorrer do artigo).
Registradores de Controle
Todo projeto ISA plug and play deve implementar 8 registradores para o controle de configuração do adaptador físico (conectado ao slot) e alguns outros para cada dispositivo lógico presente (ex: porta serial, interface de disco, porta paralela, etc. - cada dispositivo pode exigir seus próprios recursos). Ver Figura 1.
Para selecionar qual registrador será acessado num determinado instante, escreve-se um offset (de acordo com a Figura 1) no registrador de endereços (279h). Decodifica-se o valor escrito, visando a condicionar a habilitação do registrador selecionado a um ciclo de I/O para o endereço do registrador de escrita (A79h) ou para o registrador de leitura (programável), e à condição de não se estar no estado de Espera por Chave. O circuito 2 realiza esta função. Notar que os sinais Y00h a Y07h são os offsets já decodificados.
offset registrador presença 00h Reg. de Endereço de Leitura um por placa 01h Reg. de Seqüência de Isolamento um por placa 02h Reg. de Controle de Configuração um por placa 03h WAKE um por placa 04h Reg. Dados dos Recursos um por placa 05h Reg. de Estado um por placa 06h CSN um por placa 07h Reg. Seleção do Dispositivo um por placa 30h Ativação dispositivo 31h I/O Check dispositivo 40h a 5Ch Descritores de Memória dispositivo 60h e 61h bloco de I/O dispositivo 62h e 63h boco de I/O dispositivo 64h e 65h bloco de I/O dispositivo 66h e 67h bloco de I/O dispositivo 68h e 69h bloco de I/O dispositivo 6Ah e 6Bh bloco de I/O dispositivo 6Ch e 6Dh bloco de I/O dispositivo 6Eh e 6Fh bloco de I/O dispositivo 70h e 71h canal de interrupção dispositivo 72h e 73h canal de interrupção dispositivo 74h canal de DMA dispositivo 75h canal de DMA dispositivo 76h a A8h blocos de memória dispositivo
Figura 1: Mapeamento dos registradores de configuração de uma placa ISA plug and play.
clique para ampliar
Circuito 2: Faz a seleção adequada do registrador de controle.O registrador de Endereço de Leitura (offset 00h) é programado pelo software plug and play e define, dentre 203h e 3FFh, qual o endereço atribuído para o registrador de leitura. A regra é simples: o bit 7 escrito corresponde ao bit 9 do registrador de leitura, o bit 6 ao bit 8 e assim por diante. Os dois bits menos significativos foram arbitrados iguais a 1. O circuito 3 implementa este registrador. A seguinte seqüência de código programa o registrador de leitura para o endereço 203h:
mov dx, 279h ;seleciona reg. de endereços mov al, 0h ;seleciona offset 00h out dx, al ;realiza ciclo de I/O mov dx, A79h ;seleciona reg. de escrita mov al, 80h ;programa pela regra 203h out dx, al ;realiza ciclo de I/O
clique para ampliar
Circuito 3: Controla leituras aos registradores de configuração.O registrador de Seqüência de Isolamento (offset 01h) é responsável por colocar 55h ou AAh no barramento, isto quando o adaptador estiver participando da seqüência de isolamento.
O registrador de Controle de Configuração (offset 02h), conforme ilustrado na Figura 2 e implementado no circuito 4, é utilizado para zerar o número de seleção de todas as placas (CSN) ou o de todos os dispositivos lógicos e também para colocar todas as placas no estado Espera por Chave, para que fiquem operacionais.
clique para ampliar
Figura 2: Mapeamento do registrador de Controle de Configuração.
clique para ampliar
Circuito 4: Implementação do registrador de controle de configuração.Os offsets relativos a WAKE e CSN (03h e 06h) são gerenciados de forma que, quando WAKE=CSN (CSN é programado durante a seqüência de isolamento), o adaptador fica selecionado como foco de entrada para determinados acessos. Um valor CSN=0 é inválido, devendo ser interpretado como se CSN¹WAKE, pois a placa requer uma seqüência de isolamento. O circuito 5 implementa a comparação CSN=WAKE.
O registrador de Dados dos Recursos (offset 04h) permite que se obtenham dados do fabricante, número de série, identificadores de dispositivos lógicos e descritores que informam que recursos estes exigem.
O registrador de Estado (offset 05h) informa se o adaptador está pronto para ter seu registrador de Dados dos Recursos acessado.
clique para ampliar
Circuito 5: Verifica se o adaptador está selecionado, ou seja, se está no modo de Configuração.O registrador de Seleção do Dispositivo (offset 07h), em placas com mais de um dispositivo lógico implementado, é comparado com o identificador do dispositivo para, no máximo, permitir que um dos dispositivos lógicos seja o foco de entrada para a programação de recursos. O circuito 6 realiza tal comparação. A partir deste ponto, supõem-se gerados sinais Y30h a YFFh, condicionados ao casamento do dispositivo lógico.
A Figura 3 (circuito 7) sugere a implementação de uma região de 8 endereços consecutivos de I/O, programável pelos offsets 60h e 61h. Notar que os bits A8 a A15, que compõem os endereços da região de I/O são escritos e lidos com offset 60h, e que os bits A3 a A7 são acessados pleo offset 61h. Observar que uma leitura deste offset retorna os 3 bits menos significativos iguais a zero. Desta forma, para que o software plug and play saiba o tamanho da região de I/O a alocar, basta escrever FFh nos offsets 60h e 61h. Em seguida, fazer uma leitura dos mesmos. O número de bits iguais a zero está associado ao tamanho da região a alocar. No exemplo da Figura 3, são lidos três bits nulos, o que informa que são 8 (23) endereços de I/O necessários. A programação de blocos de memória é parecida com a de blocos de I/O, e, por isso, não será detalhada.
clique para ampliar
Circuito 6: Checa o casamento do dispositivo selecionado com o dispositivo lógico.
clique para ampliarFigura 3: Circuito para a programação de uma região de 8 endereços de I/O. A Figura 4 (circuito 8) mostra como são programados os recursos de interrupção (offsets 70h e 71h). Pelo offset 70h, é passado o valor da IRQ alocada, que é decodificado para permitir que o pedido de interrupção seja conectado eletricamente ao barramento. O offset 71h é responsável por informar o tipo de ativação elétrica. No caso da Figura 4, optou-se por uma interrupção ativada por nível alto.
O circuito 8 (para programar um canal de DMA) lembra a Figura 3. Contudo, cada sinal gerado pelo decodificador controla duas conexões elétricas: a do pedido de DMA e a do reconhecimento do pedido.
Reparar que os circuitos 8 e 9 são alimentados pelo sinal HAB BARR, que condiciona todas as conexões de saída para o barramento e é gerado pelo circuito 1.
clique para ampliar
Figura 4: Circuito para receber um valor de IRQ e conectar o pedido de interrupção ao barramento.
clique para ampliar
Circuito 9: Programa um canal de DMA.Conclusões
É interessante ressaltar que um aplicativo ou device-driver não precisa proceder a qualquer tarefa extra além de obter os recursos alocados de serviços residentes da BIOS ou sistema operacional.
Apesar da complexidade do hardware extra exigido (cerca de 4 mil portas lógicas), é incontestável a versatilidade resultante da opção por um projeto plug and play. Como o poder de mercado fala mais alto, e o mercado é praticamente dominado por um público que tem dificuldades em interpretar conceitos de hardware ou literaturas técnicas, placas configuradas por software são bem mais cômodas de serem instaladas e manuseadas.
Contudo, o desenvolvedor não deve descartar a hipótese de projetar protótipos muito específicos, cujo manuseio estará restrito a pessoas especializadas, com recursos estáticos (determinados por jumpers ou chaves). Neste caso, a simplicidade e rapidez do projeto tornam seus custos reduzidos.
Para saber mais:
- Artigo sobre a Arquitetura Plug and Play
- Artigo sobre o PCI Plug and Play
- Livro Plug and Play System Architecture, de Tom Shanley
- Livro PCI System Architecture, de Tom Shanley e Don Anderson
- Livro ISA System Architecture, de Tom Shanley e Don Anderson
Originalmente em http://www.clubedohardware.com.br/artigos/865
© 1996-2008, Clube do Hardware. Todos os direitos reservados.
É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998.
Não nos responsabilizamos por danos materiais e/ou morais de qualquer espécie promovidos pelo uso das informações contidas no Clube do Hardware.