Guia de design do driver SPB (Barramento Periférico Simples)
Esta seção descreve como escrever um driver para um dispositivo de controlador SPB (barramento periférico simples ) ou para um dispositivo periférico conectado a um SPB. A categoria SPB inclui ônibus como I²C e SPI. O fornecedor de hardware de um dispositivo controlador SPB fornece um driver de controlador SPB para gerenciar as funções de hardware no controlador. Esse driver pode dar suporte a uma família de dispositivos de controlador semelhantes. O fornecedor de hardware para um dispositivo periférico conectado a SPB fornece um driver periférico SPB para gerenciar as funções de hardware no dispositivo periférico. Esse driver pode dar suporte a uma família de dispositivos periféricos em uma variedade de plataformas de hardware que fornecem SPBs compatíveis.
Em versões do Windows antes de Windows 8, o sistema operacional obteve informações de dispositivos conectados a SPB em uma placa-mãe do computador apenas indiretamente por meio do firmware da plataforma. Começando com Windows 8, os fornecedores de hardware podem fornecer drivers do Windows para controlar diretamente seus controladores SPB e seus dispositivos periféricos conectados a SPB e disponibilizar esses dispositivos para uso pelo sistema operacional e por aplicativos. Para obter mais informações, consulte Drivers de controlador SPB e Drivers de dispositivo periférico SPB.
Os SPBs são frequentemente usados para conectar dispositivos periféricos de baixa velocidade a chipsets de placa-mãe e módulos SoC (System on a Chip). Um circuito integrado requer menos pinos para se conectar a um barramento serial do que a um barramento paralelo, que transmite vários bits de dados por ciclo de relógio. Normalmente, os SPBs são usados em aplicativos sensíveis ao custo em que contagens baixas de pinos e conexões simples são mais importantes do que a velocidade de transmissão de dados. Como os SPBs são executados em baixas velocidades e exigem poucas conexões elétricas, eles são frequentemente usados em aplicativos nos quais a energia da bateria deve ser conservada.
Por exemplo, a placa-mãe do computador em um laptop pode usar um barramento I²C para se comunicar com um dispositivo de baixa velocidade que monitora o nível da bateria. Da mesma forma, o módulo SoC em um telefone inteligente ou em outro dispositivo móvel pode usar um barramento I²C para se conectar a um dispositivo de sensor, como um acelerômetro, um dispositivo GPS ou um sensor de temperatura.
Um SPB não é um barramento Plug and Play. Os dispositivos periféricos normalmente têm conexões fixas com um SPB e não podem ser removidos. Mesmo que um dispositivo periférico possa ser desconectado de um slot em um SPB, o slot normalmente é dedicado a esse dispositivo. Durante a inicialização do sistema, o firmware ACPI na plataforma de hardware enumera os dispositivos periféricos conectados ao SPB para o gerenciador de Plug and Play e especifica os recursos de hardware dedicados a cada dispositivo.
Incluído nesses recursos está uma ID de conexão que identifica a conexão do dispositivo com o SPB. A ID de conexão encapsula as informações (por exemplo, um endereço de barramento e uma frequência de relógio de barramento) que um controlador SPB exige para estabelecer uma conexão com o dispositivo. Outros recursos de hardware podem incluir uma interrupção à qual o driver conecta seu ISR. No entanto, os recursos de hardware para o dispositivo não incluem memória para registros de dispositivo. Um dispositivo periférico conectado a SPB não é mapeado para memória e pode ser acessado somente por meio do SPB. Para obter mais informações, consulte IDs de conexão para dispositivos periféricos SPB-Connected.
Um SPB não fornece meios específicos de barramento para transmitir solicitações de interrupção de dispositivos periféricos para o processador. Em vez disso, um dispositivo periférico conectado a SPB sinaliza uma interrupção por meio de um caminho de hardware separado que está fora do SPB e do controlador SPB. A ISR (rotina de serviço de interrupção) para um dispositivo periférico conectado a SPB deve ser executada em IRQL = PASSIVE_LEVEL para que ele possa enviar solicitações de E/S de forma síncrona para acessar serialmente os registros de hardware do dispositivo pelo SPB. Para obter mais informações, consulte Interrupções de dispositivos periféricos SPB-Connected.