aula teórica 9w3.ualg.pt/~apcosta/pin/teoricas/teorica10.doc · web viewos sistemas de...

8
Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa Aula Teórica 10 Sumário: Os sistemas de barramentos: PCI (continuação), ISA Plug & Play e USB. Leitura Recomendada: Capítulos 25, 26 e 35 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley. O barramento PCI – continuação Área de endereço de configuração Uma área de configuração de 256 bytes é fornecida para cada unidade PCI, num total de 64 registos de 32 bits cada um. Figura nº 1 – Área de configuração de uma unidade PCI. Um cabeçalho fixo de 64 bytes está localizado no início da área de configuração de cada unidade PCI (cada unidade tem este cabeçalho pré- definido). A utilização dos 192 bytes restantes depende de cada unidade. Em relação ao cabeçalho, a especificação PCI apenas requer que estejam preenchidas obrigatoriamente as entradas referentes a Unit ID, Manufacturer ID, Instruction e Status. Um Unit ID válido pode ser um valor entre 0000H e FFFEH. O valor FFFFH indica que a unidade PCI não está instalada. Desta forma, a rotina de inicialização da BIOS PCI pode identificar todas as unidades PCI existentes no PC. O Manufacturer ID é atribuído pelo comité que definiu o standard PCI. O Class code indica o tipo de unidade PCI. O campo está subdividido em três secções de um byte. O byte mais alto 1

Upload: ngoxuyen

Post on 27-Jan-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Aula Teórica 10

Sumário:Os sistemas de barramentos: PCI (continuação), ISA Plug & Play e USB.

Leitura Recomendada:Capítulos 25, 26 e 35 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley.

O barramento PCI – continuação

Área de endereço de configuração

Uma área de configuração de 256 bytes é fornecida para cada unidade PCI, num total de 64 registos de 32 bits cada um.

Figura nº 1 – Área de configuração de uma unidade PCI.

Um cabeçalho fixo de 64 bytes está localizado no início da área de configuração de cada unidade PCI (cada unidade tem este cabeçalho pré-definido). A utilização dos 192 bytes restantes depende de cada unidade.

Em relação ao cabeçalho, a especificação PCI apenas requer que estejam preenchidas obrigatoriamente as entradas referentes a Unit ID, Manufacturer ID, Instruction e Status.

Um Unit ID válido pode ser um valor entre 0000H e FFFEH. O valor FFFFH indica que a unidade PCI não está instalada. Desta forma, a rotina de inicialização da BIOS PCI pode identificar todas as unidades PCI existentes no PC. O Manufacturer ID é atribuído pelo comité que definiu o standard PCI. O Class code indica o tipo de unidade PCI. O campo está subdividido em três secções de um byte. O byte mais alto (no offset 0BH) indica o código base da classe, o byte do meio (no offset 0AH) guarda o código da sub-classe e o byte mais baixo (no offset 09H) indica a interface de programação. Nas páginas 730 a 732 do livro The Indispensable PC Hardware Book, existe uma tabela com os valores possíveis para estes bytes. A entrada Instruction serve para controlar a unidade, ou seja, define como a unidade deve reagir aos ciclos PCI. O registo Status indica o estado da unidade durante uma operação. A entrada INTLine indica a linha IRQ de interrupção de hardware atribuída à unidade PCI (são válidos valores entre 0 e 15).

Rotinas BIOS específicas para PCI

Através da interrupção 1AH da BIOS, função B1H, estão disponíveis uma série de serviços que permitem operar com o sistema PCI. Nomeadamente os seguintes:

1

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Figura nº 2 – Serviços da função B1H, da interrupção 1AH da BIOS.

Tabela com detalhes sobre os serviços da função B1H, da interrupção 1AH da BIOSSubfunção Descrição Entrada Saída

01H Detecta se está presente uma BIOS PCI

ah = b1hal = 01h

Se:carry flag = 00h, ah = 00h, dl = ‘P’ dh = ‘C’Então:BIOS PCI presente

02H Encontra uma unidade PCI

ah = b1hal = 02Hcx = unitdx = manufacturersi = index

carry flag = 1, erroah = código mensagem *bh = número do busbl = unit (bits 7 a 3) function (bits 2 a 0)

08H (byte), 09H (word)0AH (dword)

lê byte/word/dword deconfiguração

ah = b1hal = 08h, 09h ou 0ahbh = número busbl = unit (bits 7 a 3) function (bits 2 a 0)di = número registo

carry flag = 1, erroah = código mensagem *cl,cx ou ecx = byte/word ou dword lida

0BH (byte), 0CH (word)0DH (dword)

escreve byte/word/dword deconfiguração

ah = b1hal = 0bh, 0ch ou 0dhbh = número busbl = unit (bits 7 a 3) function (bits 2 a 0)cl,cx ou ecx = byte/word ou dword a escreverdi = número registo

carry flag = 1, erroah = código mensagem *

2

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Figura nº 3 – Tabela com códigos das mensagens.

ISA Plug & Play

As placas de expansão PCI são uma grande inovação por serem dispositivos Plug & Play, que são configurados automaticamente por uma BIOS Plug & Play. Quando o PCI emergiu, o bus ISA era ainda o sistema de bus dominante e muitas placas de expansão ainda não tinham disponíveis as versões PCI (Isso continua a acontecer ainda hoje com placas mais sofisticadas). Por esta razão, a Intel e a Microsoft desenvolveram o ISA Plug & Play, de forma a dar às placas ISA um mecanismo de configuração automática. O ISA Plug & Play da Intel e Microsoft é um standard que requer hardware especializado nas placas individuais e um sistema operativo que suporte uma BIOS Plug & Play. O primeiro sistema operativo a suportar o ISA Plug & Play foi o Windows 95.

Mecanismo de configuração do ISA Plug & Play

O ISA Plug & Play teve que ser incluído no conceito ISA sem provocar incompatibilidades com a estrututa ISA dos PC's. Foram adicionados três registos, cada um com 8 bits, para este propósito. Estes três registo tratam de toda a configuração Plug & Play e podem ser seleccionados de forma a evitar colisões. Toas as placas ISA Plug & Play são configuradas usando apenas estes três registos.

Figura nº 4 – Registos usados para configurar as placas ISA Plug & Play.

O registo Plug & Play interno é seleccionado via o porto de endereço de forma a que os dados possam depois ser escritos através dos portos de escrita (endereços superiores a 800H) ou lidos via os portos de leitura (endereços de 0203H a 03FFH).

Cada placa ISA Plug & Play tem três conjuntos de registos: um registo de controlo da placa que define as funções usadas para controlar a placa; um registo de controlo lógico do dispositivo, que é usado para verificar se existem conflitos de E/S; e um registo de configuração lógica do dispositivo, que é utilizado para definir os settings da memória, de E/S, de interrupções e de DMA. Alguns registos especifícos do fabricante podem também existir.

Cada placa ISA Plug & Play tem ainda um registo LFSR (Linear Feedback Shift Register) que é responsável por inicializar a placa. Por um lado gera os dados para a inicialização do protocolo chave, e por outro lado é usado para verificar se o teste checksum está correcto quando o protocolo de isolamento é executado. O protocolo chave e o protocolo de isolamento representam dois dos quatro estados possíveis da placa.

3

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Figura nº 5 – A estrutura lógica do porto ISA Plug & Play.

Figura nº 6 – Os registos ISA Plug & Play.

Barramento USB (Universal Serial Bus)

Como estivemos a ver, existe uma grande variedade de sistemas bus, o que resulta em muitos tipos diferentes de interfaces e conecções. Para reduzir e unificar os numerosos conectores usados num PC, foi desenvolvido o USB (Universal Serial Bus). Existe hoje uma grande variedade de dispositivos USB (teclados, ratos, scanners, impressoras, modems, drives de vários tipos, etc.). Electricamente o USB não é efectivamente um bus, existe simplesmente ao nível lógico. Fisicamente é preciso estabelecer sempre uma ligação ponto a ponto.

O USB é controlado por um host que se encontra localizado na motherboard ou numa placa de expansão PCI. Todas as actividades têm início no host (root hub), que consegue lidar com as interrupções do processador e usa tipicamente a IRQ11. O USB funciona por pooling, nenhum dispositivo USB consegue iniciar uma transferência por si próprio.

Os dispositivos têm o seu buffer de dados próprio (FIFO) que é necessário para assegurar que os dados não são perdidos se o bus estiver ocupado com um outro dispositivo. Todos os outros terão que esperar pela sua vez.

4

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Figura nº 7 – Topologia do USB.

O host USB actua também como um distribuidor (hub) para a ligação de vários dispositivos USB, a que se chamam nós. Este hub não é apenas um simples distribuidor que se limita a passar dados, ele tem um micro controlador que regula o tráfico dos dados de acordo com os dispositivos conectados.

O USB suporta três classes de velocidades, cada qual utiliza um tipo de cabo diferente:1. velocidade baixa : máximo de 1.5 Mbit/s (rato, teclado, joystick).2. velocidade média: máximo de 12 MBit/s (scanners, dispositivos áudio).3. velocidade alta: máximo de 480 MBit/s (dispositivos vídeo e dispositivos de memória).

O USB consiste de apenas quatro linhas. Para a transferência dos dados são usadas duas linhas diferenciais (+D e –D). Toda a comunicação é feita através destas duas linhas. A diferença entre elas é no máximo de 4 V. As outras duas linhas ligam à terra (GND) e à fonte de alimentação (VBus).

Figura nº 8 – As linhas do USB.

Existindo uma conecção USB no PC, é possível fazer hot-plugging (conectar ou desconectar dispositivos USB enquanto o PC está a funcionar).

Identificação e transferência de dados

Como já foi referido, o USB apenas utiliza duas linhas diferenciais (+D e –D) para toda a comunicação. Para a transferência de dados (virtualmente) em paralelo, vários canais (virtuais ) lógicos de dados são usados (os chamados pipes).

5

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Cada pipe usa parte da largura de banda disponível do USB, é mapeado pelo host USB e termina sempre num end-point (ENDP). Cada dispositivo USB suporta vários end-points e consequentemente vários pipes. A prioridade do dispositivo é determinada pela sequência de polling definida no host.

Para identificar os dispositivos existe um manufacturer ID (2 bytes), um device ID (2 bytes), um número de versão (2 bytes) e um código de classe (3 bytes). Durante a inicialização o host determina que tipos de dados cada unidade USB suporta e qual a largura de banda que requer. A cada USB é automaticamente atribuído um endereço próprio (um valor entre 127 possíveis). Essa atribuição é feita pelo host USB depois do arranque do sistema. O primeiro sistema operativo a suportar USB correctamente foi o Windows 98, os sistemas operativos anteriores tinham implementações USB, mas que funcionavam com muitas falhas.

São utilizados três tipos diferentes de pacotes para transferência de dados: token, data e hanshake.

Figura nº 9 – Tipos de pacotes USB.

Cada um deles é identificado pelo PID que vai informar sobre o tipo de dados que será enviado a seguir.

No pacote data, os dados propriamente ditos são transferidos como uma sequência de bytes não estruturada (stream pipe), com um tamanho máximo de 1500 bytes no pacote. CRC16 é um processo usado para verificação de erros de transmissão (CRC – Cyclic Redundancy Check).

No pacote token são enviadas mensagens ao host a informá-lo, por exemplo, onde estão os dados a serem transferidos. Estas mensagens têm uma estrutura fixa (ver figura nº 9). O método CRC5 reconhece e corrige possíveis erros.

6