Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een SPB-randapparaatstuurprogramma bepaalt een randapparaat dat is verbonden met een eenvoudige randapparatuurbus (SPB). De hardwareregisters van dit apparaat zijn alleen beschikbaar via de SPB. Als u wilt lezen van of schrijven naar het apparaat, moet het stuurprogramma I/O-aanvragen verzenden naar de SPB-controller. Alleen deze controller kan gegevensoverdrachten naar en van het apparaat via de SPB initiëren.
Vanaf Windows 8 biedt Windows stuurprogramma-ondersteuning voor randapparatuur op eenvoudige randapparatuurbussen (SPBs). SPBs, zoals I2C en SPI, worden veel gebruikt om verbinding te maken met sensorapparaten met lage snelheid, zoals versnellingsmeters, GPS-apparaten en beeldschermen op accuniveau. In dit overzicht wordt beschreven hoe een SPB-apparaatstuurprogramma voor randapparatuur, in samenwerking met andere systeemonderdelen, een met SPB verbonden randapparaat beheert.
Een SPB-randapparaatstuurprogramma kan worden ontwikkeld om gebruik te maken van het User-Mode Driver Framework (UMDF) of het Kernel-Mode Driver Framework (KMDF). Zie Aan de slag met UMDF-voor meer informatie over het ontwikkelen van een UMDF-stuurprogramma. Zie Aan de slag met Kernel-Mode Driver Frameworkvoor meer informatie over het ontwikkelen van een KMDF-stuurprogramma.
Apparaatconfiguratiegegevens
De hardwareregisters van een met SPB verbonden randapparaat zijn niet toegewezen aan het geheugen. Het apparaat kan alleen worden geopend via de SPB-controller, die gegevens serieel overdraagt naar en van het apparaat via de SPB. Voor het uitvoeren van I/O-bewerkingen verzendt het SPB-randapparaatstuurprogramma I/O-aanvragen naar het apparaat en voert de SPB-controller de gegevensoverdrachten uit die nodig zijn om deze aanvragen te voltooien. Voor meer informatie over de I/O-aanvragen die naar randapparatuur op SPBs kunnen worden verzonden, zie Gebruiken van de SPB I/O-aanvraaginterface.
In het volgende diagram ziet u een voorbeeld van een hardwareconfiguratie waarin een SPB, in dit geval een I2C-bus, twee randapparatuur verbindt met een SoC-module (System on a Chip). De randapparatuur bevindt zich buiten de SoC-module en maakt verbinding met vier pinnen op de module. De SoC-module bevat de hoofdprocessor (niet weergegeven), plus een I2C-controller en een gpio-controller (general-purpose I/O). De processor gebruikt de I2C-controller om gegevens serieel naar en van de twee randapparatuur te verzenden. De onderbrekingsaanvraaglijnen van deze apparaten zijn verbonden met twee GPIO-pinnen die zijn geconfigureerd als interrupt-invoer. Wanneer een apparaat een interruptaanvraag signaleert, stuurt de GPIO-controller de interrupt door naar de processor.
Omdat de GPIO-controller en ik2C-controller in dit voorbeeld zijn geïntegreerd in de SoC-module, zijn hun hardwareregisters toegewezen aan het geheugen en kunnen ze rechtstreeks worden geopend door de processor. De processor heeft echter slechts indirect toegang tot de hardwareregisters van de twee randapparatuur, via de I2C-controller.
Een SPB is geen PnP-bus (Plug and Play) en kan daarom niet worden gebruikt om automatisch nieuwe apparaten te detecteren en te configureren die zijn aangesloten op de bus. De bus- en interruptverbindingen van een SPB-verbonden apparaat zijn vaak permanent. Zelfs als het apparaat kan worden losgekoppeld van een sleuf, is deze sleuf doorgaans toegewezen aan het apparaat. Bovendien biedt een SPB geen in-band hardwarepad voor het doorsturen van interruptaanvragen van een randapparaat op de bus naar de buscontroller. In plaats daarvan is het hardwarepad voor interrupts gescheiden van de buscontroller.
De leverancier van het hardwareplatform slaat de configuratiegegevens op voor een met SPB verbonden randapparaat in de ACPI-firmware van het platform. Tijdens het opstarten van het systeem inventariseert het ACPI-stuurprogramma de apparaten in de bus voor de PnP-manager. Voor elk geïnventariseerd apparaat levert ACPI informatie over de bus- en interruptverbindingen van het apparaat. De PnP-manager slaat deze informatie op in een gegevensarchief met de naam resourcehub.
Wanneer het apparaat wordt opgestart, levert de PnP-manager het stuurprogramma van het apparaat met een set hardwareresources die de configuratiegegevens inkapselen die door de resourcehub voor het apparaat worden opgeslagen. Deze resources omvatten een verbindings-id en een interruptnummer. De verbindings-id bevat informatie over de busverbinding, zoals de SPB-controller, het adres van de bus en de klokfrequentie. Voordat I/O-aanvragen naar het apparaat kunnen worden verzonden, moet het stuurprogramma eerst de verbindings-id gebruiken om een logische verbinding met het apparaat te openen. Het onderbrekingsnummer is een Windows-interruptresource waarmee het stuurprogramma de onderbrekingsserviceroutine (ISR) kan verbinden. Het stuurprogramma kan eenvoudig worden overgezet van het ene hardwareplatform naar het andere, omdat de verbindings-id en het onderbrekingsnummer abstracties op hoog niveau zijn die platformspecifieke informatie over de fysieke bus verbergen en verbindingen onderbreken.
Software- en hardwarelagen
In het volgende blokdiagram ziet u de lagen software en hardware die een randapparaat op een SPB verbinden met een toepassingsprogramma dat gebruikmaakt van het apparaat. Het stuurprogramma van het SPB-randapparaat in dit voorbeeld is een UMDF-stuurprogramma. Het randapparaat (onderaan het diagram) is een sensorapparaat (bijvoorbeeld een versnellingsmeter). Net als in het voorgaande diagram is het randapparaat verbonden met een I2C-bus en signaleert interrupt-aanvragen via een pin op een GPIO-controller.
De drie blokken die grijs worden weergegeven, zijn door het systeem geleverde modules. Vanaf Windows 7 is de sensorklasse-extensie beschikbaar als sensorspecifieke extensie voor de UMDF. Vanaf Windows 8 zijn de SPB-frameworkextensie (SpbCx) en GPIO-frameworkextensie (GpioClx) beschikbaar als extensies voor KMDF die functies uitvoeren die specifiek zijn voor SPB-controllers en GPIO-controllers.
Boven aan het voorgaande diagram roept de toepassing de methoden aan in de Sensor-API of Location-API om te communiceren met het sensorapparaat. Via deze aanroepen kan de toepassing I/O-aanvragen verzenden naar het apparaat en gebeurtenismeldingen ontvangen van het apparaat. Zie Inleiding tot het sensor- en locatieplatform in Windowsvoor meer informatie over deze API's.
Wanneer de toepassing een methode aanroept waarvoor communicatie met het stuurprogramma van het SPB-randapparaat is vereist, maakt de Sensor-API of locatie-API een I/O-aanvraag en verzendt deze naar het apparaatstuurprogramma van het SPB-randapparaat. De module voor de extensie van de sensorklasse helpt het stuurprogramma bij het verwerken van deze I/O-aanvragen. Wanneer het stuurprogramma een nieuwe I/O-aanvraag ontvangt, stuurt de bestuurder onmiddellijk de aanvraag door aan de sensorklasse-extensie, die de aanvraag in de wachtrij zet totdat het stuurprogramma klaar is om deze te verwerken. Als een I/O-aanvraag van de toepassing de overdracht van gegevens naar of van het randapparaat vereist, maakt het SPB-randapparaatstuurprogramma een I/O-aanvraag voor deze overdracht en verzendt de aanvraag naar de I2C-controller. Dergelijke aanvragen worden gezamenlijk verwerkt door SpbCx en het stuurprogramma I2C-controller.
SpbCx is een door het systeem geleverd onderdeel waarmee de wachtrijen van I/O-aanvragen voor een SPB-controller worden beheerd, zoals de I2C-controller in dit voorbeeld. Het stuurprogramma I2C-controller, dat wordt geleverd door de hardwareleverancier voor de controller, beheert alle hardwarespecifieke bewerkingen in de I2C-controller. Het controllerstuurprogramma heeft bijvoorbeeld toegang tot de geheugentoegewezen hardwareregisters van de controller om gegevensoverdrachten naar en vanuit het randapparaat te initiëren via de I2C-bus.
Het randapparaat geeft een interruptaanvraag aan wanneer een hardwaregebeurtenis optreedt die aandacht vereist van het stuurprogramma van het SPB-randapparaat of de gebruikersmodustoepassing. De interruptlijn van het randapparaat is verbonden met een GPIO-pin die is geconfigureerd voor het ontvangen van interruptaanvragen. Wanneer het apparaat een interrupt aan de GPIO-pin signaleert, geeft de GPIO-controller een interrupt aan de processor. Als reactie op deze interrupt roept de interrupt-traphandler van de kernel de ISR van GpioClx aan. Deze ISR voert een query uit op het GPIO-controllerstuurprogramma, dat vervolgens toegang heeft tot de geheugen-gebaseerde hardwareregisters van de GPIO-controller om de onderbrekende GPIO-pinhout te identificeren. Als u de interrupt wilt dempen, wordt het GPIO-controllerstuurprogramma gewist (als de interrupt wordt geactiveerd door de rand) of maskers (indien geactiveerd op niveau) de interruptaanvraag bij de GPIO-pincode. De interrupt moet worden gedempt om te voorkomen dat de processor dezelfde interrupt opnieuw neemt wanneer de traphandler terugkeert. Voor een door niveau geactiveerde interrupt moet de ISR in het stuurprogramma van het SPB-randapparaat toegang hebben tot de hardwareregisters van het randapparaat om de interrupt te wissen voordat de GPIO-pin kan worden ontmaskerd.
Voordat de interrupt-traphandler van de kernel terugkeert, wordt de ISR in het stuurprogramma van het SPB-randapparaat gepland om te draaien op IRQL = PASSIVE_LEVEL. Vanaf Windows 8 kan een UMDF-stuurprogramma de ISR verbinden met een onderbreking die het stuurprogramma ontvangt als een abstracte Windows-interruptresource; Zie Interruptsverwerken voor meer informatie. Om te bepalen welke ISR moet worden aangeroepen, zoekt het besturingssysteem de virtuele interrupt op die is toegewezen aan de onderbrekende GPIO-pin en zoekt de ISR die is verbonden met de interrupt. Deze virtuele interrupt wordt gelabeld als een secundaire interrupt in het voorgaande diagram. De hardware-interrupt van de GPIO-controller wordt daarentegen gelabeld als een primaire interrupt.
Omdat de ISR in het stuurprogramma van het SPB-randapparaat op passief niveau wordt uitgevoerd, kan de ISR synchrone I/O-aanvragen gebruiken om toegang te krijgen tot de hardwareregisters in het randapparaat. De ISR kan blokkeren totdat deze aanvragen zijn voltooid. De ISR, die met een relatief hoge prioriteit wordt uitgevoerd, moet zo snel mogelijk terugkeren en alle achtergrondverwerking als gevolg van een onderbreking uitstellen naar een werkroutine die met een lagere prioriteit wordt uitgevoerd.
Als reactie op de secundaire interrupt plaatst het SPB-randapparaatstuurprogramma een gebeurtenis in de sensorclassextensie, die de gebeurtenis aan de gebruikersmodusapplicatie meldt via de Sensor-API of Locatie-API.