Delen via


Hardwaredefinities

Belangrijk

Dit is de Documentatie voor Azure Sphere (verouderd). Azure Sphere (verouderd) wordt op 27 september 2027 buiten gebruik gesteld en gebruikers moeten tegen deze tijd migreren naar Azure Sphere (geïntegreerd). Gebruik de versiekiezer boven de inhoudsweergave om de Documentatie van Azure Sphere (geïntegreerd) weer te geven.

In deze sectie worden hardwaredefinitiebestanden beschreven en hoe u deze kunt maken voor Azure Sphere-borden en -modules.

Hardwaredefinitiebestanden

Hardwaredefinities dienen twee afzonderlijke, maar gerelateerde doeleinden:

Bordspecifieke definities definiëren de specifieke randapparatuur van een module of een ander bord en stellen een toepassing in staat om ernaar te verwijzen met behulp van id's die relevant en zinvol zijn. Een app kan bijvoorbeeld 'Red_LED_1' gebruiken in plaats van een ondoorzichtig nummer zoals GPIO '13'. De map HardwareDefinitions in de Azure Sphere SDK bevat dergelijke definities voor algemene Azure Sphere-borden en de chips die ze gebruiken. Deze map bevindt zich %ProgramFiles(x86)%\Microsoft Azure Sphere SDK\HardwareDefinitions in Windows en /opt/azurespheresdk/HardwareDefinitions in Linux.

Toepassingsspecifieke definities wijzen randapparatuur toe waarnaar in toepassingscode wordt verwezen naar bordspecifieke definities. Toepassingsspecifieke definities zijn gebaseerd op bordspecifieke definities en definiëren één set id's die kunnen worden gebruikt om naar randapparatuur op elk bord te verwijzen. Een toepassing die op meerdere borden wordt uitgevoerd, kan dus een toepassingsspecifieke definitie hebben voor elk type bord, maar de toepassing zelf gebruikt slechts één set randapparatuur-id's. De code zelf kan volledig ongewijzigd worden uitgevoerd op verschillende hardware; een ontwikkelaar hoeft alleen de verwijzing te wijzigen om de juiste definitie te gebruiken. De toepassingscode voor een koffiemachine verwijst bijvoorbeeld naar een BrewingStatus-indicator-LED. Het besturingsbord van de koffiemachine is afkomstig van twee leveranciers, Contoso en Fabrikam. Door het gebruik van toepassingsspecifieke definities voor elk bord kan de BrewingStatus-indicator worden toegewezen aan LED 2 op het besturingsbord dat door Contoso en LED 4 wordt geleverd op het besturingsbord dat door Fabrikam wordt geleverd.

Als uw toepassing hardwaredefinities van de SDK of van uw hardwareleverancier gebruikt en u geen eigen toepassingsspecifieke definitie maakt, kunt u de rest van dit onderwerp voorlopig overslaan en direct naar hardwareafhankelijkheden gaan.

U maakt uw hardwaredefinitiebestanden in JSON-indeling. Vervolgens genereert u C-headerbestanden van de JSON-bestanden.

Indeling van een hardwaredefinitiebestand

Een hardwaredefinitiebestand is een JSON-bestand met de volgende indeling:

{
    "Metadata":
    {
        "Type": "Azure Sphere Hardware Definition",
        "Version": 1
    },
    "Description":
    {
        "Name": "<name of board or module>",
        "MainCoreHeaderFileTopContent": [
            "/* Copyright (c) <vendor name> All rights reserved.",
            "   <vendor licensing information, if any> */",
            "",
            "// This header contains the peripheral pinout definitions for the",
            "// <name of board or module>"
        ]
    },
    "Imports" : [ {"Path": "<path to underlying hardware definition file>"} ],
    "Peripherals": [
       {"Name": "", "Type": " ", "Mapping": " ", "Comment": " "},
   ]
}

De sectie Metagegevens bevat informatie over het bestand (bestandstype, versie, enzovoort).

De sectie Beschrijving bevat informatie over het bord of de module. Het veld MainCoreHeaderFileTopContent bevat informatie die aan het begin van het gegenereerde headerbestand wordt geplaatst.

De sectie Import geeft de padnaam op van het hardwaredefinitiebestand voor het onderliggende hardwareplatform (bord of module).

De sectie Randapparatuur bevat de randapparatuur die dit bord beschikbaar maakt voor gebruik in toepassingen. Een beschrijving van een randapparaat heeft de volgende indeling:

{"   Name": "<name-in-code>", "Type": "<type>", "Mapping": "<name-in-imported-definition>", "Comment": "<helpful info>"}

Hier volgen de elementen van de sectie Randapparatuur :

Naam: de id die wordt gebruikt om te verwijzen naar het randapparaat in uw toepassingscode.

Type : het type randapparaat (bijvoorbeeld Gpio, Uart, Adc). Raadpleeg het hardwaredefinitiebestand in de sectie Import om typegegevens op te halen.

Toewijzing : wijst de id in het veld Naam toe aan de id die wordt gebruikt voor het randapparaat in het geïmporteerde hardwaredefinitiebestand.

Opmerkingen: bevat nuttige informatie die kan worden weergegeven in het gegenereerde headerbestand. Bijvoorbeeld toewijzingen vastmaken voor ISU*-randapparatuur of toewijzingen aan boord-LED's aan GPIO-pinnen van de onderliggende MCU of module.

Voorbeeld: bordspecifieke definitie

In het volgende voorbeeld ziet u een deel van het hardwaredefinitiebestand dat een bordspecifieke definitie bevat voor een fictief MT3620-ontwikkelbord met de naam MyBoard. Hiermee geeft u de randapparaatpinoutdefinities voor MyBoard op. Er worden resourcedefinities geïmporteerd uit het chipspecifieke hardwaredefinitiebestand (mt3620.json) voor de MT3620 MCU. De informatie in de sectie Randapparatuur resulteert in een pin-to-pin-toewijzing van de resources die door MyBoard worden weergegeven aan de resources van de onderliggende MT3620 MCU.

{
    "Metadata":
    {
        "Type": "Azure Sphere Hardware Definition",
        "Version": 1
    },
    "Description":
    {
        "Name": "MyBoard",
        "MainCoreHeaderFileTopContent": [
            "// This header contains the peripheral pinout definitions for ",
            "// MyBoard"
        ]
    },
    "Imports" : [ {"Path": "... /mt3620/mt3620.json"} ],
    "Peripherals": [
        {"Name": "MY_BOARD_LED_RED", "Type": "Gpio", "Mapping": "MT3620_GPIO8", "Comment": "LED 1 Red channel uses GPIO8."},
        {"Name": "MY_BOARD_LED_GREEN", "Type": "Gpio", "Mapping": "MT3620_GPIO16", "Comment": "LED 2 Green channel uses GPIO16"},
        {"Name": "MY_BOARD_BUTTON_A", "Type": "Gpio", "Mapping": "MT3620_GPIO12", "Comment": "Button A uses GPIO12"},
                              .
                              .
                              .
    ]
}

U kunt aanvullende voorbeelden zien van bordspecifieke definitiebestanden in de map HardwareDefinitions die deel uitmaakt van de Azure Sphere SDK-installatie.

Voorbeeld: toepassingsspecifieke definitie

In het volgende voorbeeld ziet u een gedeelte van een hardwaredefinitiebestand dat een toepassingsspecifieke definitie voor een fictief koffiemachineapparaat bevat.

Onder de randapparatuur die in de toepassing is opgenomen, zijn twee indicator-LED's en een drukknop. Ze worden in de toepassingscode verwezen door respectievelijk de id's COFFEEMAKER_STATUS_BREWING, COFFEEMAKER_STATUS_READY en COFFEEMAKER_BUTTON_START. Deze id's worden toegewezen aan randapparatuur die zijn gedefinieerd in de geïmporteerde bordspecifieke definitie voor het fictieve MT3620-bord MyBoard.

{
    "Metadata": {
        "Type": "Azure Sphere Hardware Definition",
        "Version": 1
    },
    "Description":
    {
        "Name": "Coffee Maker Application",
        "MainCoreHeaderFileTopContent": [
            "// This file implements the Coffee Maker application-specific definition on MyBoard",
        ]
    },
    "Imports" : [ {"Path": "... /MyHwDefs/my_board.json"} ],
    "Peripherals": [
         {"Name": "COFFEEMAKER_STATUS_BREWING", "Type": "Gpio", "Mapping": "MY_BOARD_LED_RED", "Comment": "Brewing status indicator uses MyBoard RED LED"},
         {"Name": "COFFEEMAKER_STATUS_READY", "Type": "Gpio", "Mapping": "MY_BOARD_LED_GREEN", "Comment": "Ready status indicator uses MyBoard GREEN LED"},
         {"Name": "COFFEEMAKER_BUTTON_START", "Type": "Gpio", "Mapping": "MY_BOARD_BUTTON_A", "Comment": "Start button uses MyBoard Button A"},
                                             .
                                             .
                                             .
    ]
}
  • De sectie Import bevat het pad naar het hardwaredefinitiebestand voor het fysieke bord of de fysieke module.

    "Imports" : [ {"Path": "... /MyHwDefs/my_board.json"} ],
    
  • De sectie Randapparatuur wijst de randapparatuur van de Koffiemachine toe aan de bijbehorende randapparatuur op een bord of module.

    {"Name": "COFFEEMAKER_BUTTON_START", "Type": "Gpio", "Mapping": "MY_BOARD_BUTTON_A", "Comment": " Start button uses MyBoard Button A"},
    

    Naam: bevat de id die wordt gebruikt voor het randapparaat in de toepassingscode.

    Toewijzing: bevat de id die wordt gebruikt voor het randapparaat in het hardwaredefinitiebestand voor een bord of module.

De volgende versie van de koffiezetapparaat kan worden gebouwd op MyBoardV2. Het zou een nieuwe bordspecifieke definitie hebben met randapparatuur zoals MY_BOARD_V2_LED_ORANGE. Dit wordt geïmporteerd door een nieuwe implementatie van de toepassingsspecifieke definitie van de koffiemachine die COFFEEMAKER_STATUS_BREWING toewijst aan deze nieuwe oranje LED. De daadwerkelijke code van de koffiemachinetoepassing blijft ongewijzigd.

Op dezelfde manier kan een nieuwe implementatie van de definitie 'sample_appliance.json', die wordt gebruikt door de Azure Sphere-voorbeeld-apps, ervoor zorgen dat deze voorbeeld-apps ongewijzigd kunnen worden uitgevoerd op MyBoard.

Koptekstbestanden

Headerbestanden worden gegenereerd op basis van de JSON-bestanden die de hardwaredefinities bevatten. U moet headerbestanden maken voor zowel bordspecifieke als toepassingsspecifieke definities.

Gebruik de opdracht azsphere hardware-definition generate-header om een headerbestand te genereren.

Als u het headerbestand wilt maken, voert u de volgende regel in bij de Azure Sphere-opdrachtprompt. Vervang door <filename> de naam van het JSON-bestand.

azsphere hardware-definition generate-header --hardware-definition-file <filename>

Het headerbestand bestandsnaam.h wordt gemaakt en in de map inc/hw geplaatst.

Voer bijvoorbeeld de volgende regel in om een headerbestand te genereren op basis van het JSON-bestand.

azsphere hardware-definition generate-header --hardware-definition-file my_board.json

Hieronder ziet u een gedeelte van het headerbestand my_board.h:

#pragma once
#include "... /mt3620/inc/hw/mt3620.h"

// LED Red channel uses GPIO8.
#define MY_BOARD_LED_RED MT3620_GPIO8

// LED Green channel uses GPIO16
#define MY_BOARD_LED_GREEN MT3620_GPIO16

// Button A uses GPIO12
#define MY_BOARD_BUTTON_A MT3620_GPIO12
                   .
                   .
                   .

Opmerking Het gegenereerde headerbestand wordt standaard geplaatst in inc/hween submap van de map die het JSON-invoerbestand bevat. Als deze submap niet bestaat, wordt deze gemaakt.

Nu u uw JSON-bestand met de hardwaredefinitie en het bijbehorende headerbestand hebt gemaakt, raadpleegt u Doelhardwareafhankelijkheden beheren voor de stappen voor het gebruik ervan in uw toepassing.