하드웨어 정의

이 섹션에서는 하드웨어 정의 파일 및 Azure Sphere 보드 및 모듈에 대해 파일을 만드는 방법을 설명합니다.

하드웨어 정의 파일

하드웨어 정의는 별개이지만 관련된 두 가지 용도로 사용됩니다.

보드별 정의는 모듈 또는 기타 보드의 특정 주변 장치를 정의하고 애플리케이션이 관련되고 의미 있는 식별자를 사용하여 참조할 수 있도록 합니다. 예를 들어 앱은 GPIO "13"과 같은 불투명 번호 대신 "Red_LED_1"를 사용할 수 있습니다. Azure Sphere SDK의 HardwareDefinitions 디렉터리에는 일반적인 Azure Sphere 보드 및 사용하는 칩에 대한 이러한 정의가 포함되어 있습니다. 이 디렉터리가 %ProgramFiles(x86)%\Microsoft Azure Sphere SDK\HardwareDefinitions Windows 및 /opt/azurespheresdk/HardwareDefinitions Linux에 있습니다.

애플리케이션별 정의는 애플리케이션 코드에서 참조되는 주변 장치를 보드별 정의에 매핑합니다. 애플리케이션별 정의는 보드별 정의를 기반으로 하며 모든 보드에서 주변 장치를 참조하는 데 사용할 수 있는 단일 식별자 집합을 정의합니다. 따라서 여러 보드에서 실행되는 애플리케이션에는 각 보드 유형에 대한 애플리케이션별 정의가 있을 수 있지만 애플리케이션 자체는 하나의 주변 장치 식별자 집합만 사용합니다. 코드 자체는 다른 하드웨어에서 완전히 변경되지 않고 실행할 수 있습니다. 개발자는 적절한 정의를 사용하기 위해 참조만 변경하면 합니다. 예를 들어 커피 메이커의 애플리케이션 코드는 BrewingStatus 표시기 LED를 참조합니다. 커피 메이커 제어 보드는 두 공급 업체에 의해 공급된다, Contoso와 Fabrikam. 각 보드에 애플리케이션별 정의를 사용하면 BrewingStatus 표시기를 Contoso에서 제공하는 제어 보드의 LED 2와 Fabrikam에서 제공하는 제어 보드의 LED 4에 매핑할 수 있습니다.

애플리케이션이 SDK 또는 하드웨어 공급자의 하드웨어 정의를 사용하고 고유한 애플리케이션별 정의를 만들지 않는 경우 현재 이 항목의 나머지 부분을 건너뛰고 하드웨어 종속성 사용으로 바로 이동하면 됩니다.

JSON 형식으로 하드웨어 정의 파일을 만듭니다. 그런 다음 JSON 파일에서 C 헤더 파일을 생성합니다.

하드웨어 정의 파일의 형식

하드웨어 정의 파일은 다음 형식의 JSON 파일입니다.

{
    "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": " "},
   ]
}

메타데이터 섹션에는 파일(파일 형식, 버전 등)에 대한 정보가 포함되어 있습니다.

설명 섹션에는 보드 또는 모듈에 대한 정보가 포함되어 있습니다. "MainCoreHeaderFileTopContent" 필드에는 생성된 헤더 파일의 시작 부분에 배치될 정보가 포함됩니다.

가져오기 섹션은 기본 하드웨어 플랫폼(보드 또는 모듈)에 대한 하드웨어 정의 파일의 경로 이름을 지정합니다.

주변 장치 섹션에는 이 보드가 애플리케이션에서 사용하기 위해 노출하는 주변 장치가 나열되어 있습니다. 주변 장치 설명의 형식은 다음과 같습니다.

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

다음은 주변 장치 섹션의 요소입니다.

이름 - 애플리케이션 코드에서 주변 장치를 참조하는 데 사용되는 식별자입니다.

형식 - 주변 장치 유형(예: Gpio, Uart, Adc)입니다. 형식 정보를 얻으려면 가져오기 섹션에 나열된 하드웨어 정의 파일을 참조하세요.

매핑 - 이름 필드의 식별자를 가져온 하드웨어 정의 파일의 주변 디바이스에 사용되는 식별자에 매핑합니다.

주석 - 생성된 헤더 파일에 표시되는 유용한 정보를 제공합니다. 예를 들어 ISU* 주변 장치에 대한 고정 할당 또는 온보드 LED를 기본 MCU 또는 모듈의 GPIO 핀에 매핑합니다.

예: 보드별 정의

다음 예제에서는 MyBoard라는 가상의 MT3620 개발 보드에 대한 보드별 정의를 포함하는 하드웨어 정의 파일의 일부를 보여 줍니다. MyBoard에 대한 주변 핀아웃 정의를 지정합니다. MT3620 MCU에 대한 칩별 하드웨어 정의 파일(mt3620.json)에서 리소스 정의를 가져옵니다. 주변 장치 섹션의 정보는 MyBoard에서 노출하는 리소스를 기본 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"},
                              .
                              .
                              .
    ]
}

Azure Sphere SDK 설치의 일부인 HardwareDefinitions 디렉터리에서 보드별 정의 파일의 추가 예제를 볼 수 있습니다.

예: 애플리케이션별 정의

다음 예제에서는 가상의 커피 메이커 어플라이언스 대한 애플리케이션별 정의를 포함하는 하드웨어 정의 파일의 일부를 보여 줍니다.

애플리케이션에 포함된 주변 장치 중에는 두 개의 표시기 LED와 푸시 단추가 있습니다. 애플리케이션 코드는 각각 식별자 COFFEEMAKER_STATUS_BREWING, COFFEEMAKER_STATUS_READY 및 COFFEEMAKER_BUTTON_START 의해 참조됩니다. 이러한 식별자는 가상의 MT3620 보드 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"},
                                             .
                                             .
                                             .
    ]
}
  • 가져오기 섹션에는 실제 보드 또는 모듈에 대한 하드웨어 정의 파일의 경로가 포함되어 있습니다.

    "Imports" : [ {"Path": "... /MyHwDefs/my_board.json"} ],
    
  • 주변 장치 섹션은 CoffeeMaker 제어 보드 주변 장치를 보드 또는 모듈의 해당 주변 장치에 매핑합니다.

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

    이름 - 애플리케이션 코드의 주변 디바이스에 사용되는 식별자를 포함합니다.

    매핑 - 보드 또는 모듈의 하드웨어 정의 파일에서 주변 디바이스에 사용되는 식별자를 포함합니다.

다음 버전의 커피 메이커는 MyBoardV2에 빌드될 수 있습니다. MY_BOARD_V2_LED_ORANGE 같은 주변 장치가 있는 새로운 보드별 정의가 있습니다. 이는 이 새로운 주황색 LED에 COFFEEMAKER_STATUS_BREWING 매핑하는 커피 메이커의 애플리케이션별 정의의 새로운 구현에 의해 가져옵니다. 실제 커피 메이커 애플리케이션 코드는 변경되지 않은 상태로 유지됩니다.

마찬가지로 Azure Sphere 샘플 앱에서 사용하는 "sample_appliance.json" 정의의 새로운 구현을 통해 이러한 샘플 앱이 MyBoard에서 변경되지 않고 실행되도록 할 수 있습니다.

헤더 파일

헤더 파일은 하드웨어 정의를 포함하는 JSON 파일에서 생성됩니다. 보드별 정의와 애플리케이션별 정의 모두에 대한 헤더 파일을 만들어야 합니다.

azsphere hardware-definition generate-header 명령을 사용하여 헤더 파일을 생성합니다.

헤더 파일을 만들려면 Azure Sphere 명령 프롬프트에 다음 줄을 입력합니다. 를 JSON 파일의 이름으로 바꿉 있습니다 <filename> .

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

헤더 파일 filename.h가 만들어지고 inc/hw 폴더에 배치됩니다.

예를 들어 다음 줄을 입력하여 JSON 파일에서 헤더 파일을 생성합니다.

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

다음은 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
                   .
                   .
                   .

참고 기본적으로 생성된 헤더 파일은 입력 inc/hwJSON 파일이 포함된 디렉터리의 하위 디렉터리여야 하는 에 배치됩니다. 이 하위 디렉터리가 없으면 생성됩니다.

하드웨어 정의 JSON 파일과 함께 제공되는 헤더 파일을 만들었으므로 애플리케이션에서 사용하는 단계는 대상 하드웨어 종속성 관리를 참조하세요.