다음을 통해 공유


상위 수준 애플리케이션에서 SPI 사용

Azure Sphere는 master 모드에서 SPI(직렬 주변 장치 인터페이스)를 지원합니다. SPI는 주변 장치와 통합 회로 간의 통신에 사용되는 직렬 인터페이스입니다. SPI는 master 디바이스가 하위 디바이스 집합을 제어하는 master/하위 모델을 사용합니다. I2C와 달리 SPI는 더 복잡한 고속 주변 장치와 함께 사용할 수 있습니다.

애플리케이션은 Applibs SPI API를 호출하여 SPI master 인터페이스에서 작업을 수행하여 SPI를 통해 주변 장치에 액세스할 수 있습니다. LSM6DS3 SPI 샘플에서는 MT3620 디바이스에서 SPI용 하드웨어를 구성하고 애플리케이션에서 SPI를 사용하는 방법을 설명합니다.

칩 선택

Chip select는 SPI master 인터페이스와 하위 디바이스 집합 간의 연결을 관리하고 master 인터페이스가 각 하위 디바이스에 데이터를 독립적으로 보내고 받을 수 있도록 합니다. Azure Sphere는 칩 선택에서 활성-낮음 및 활성-높음 설정을 기본 설정으로 지원합니다. 각 SPI master 인터페이스는 하나의 애플리케이션에서만 사용할 수 있습니다. 애플리케이션은 SPI master 인터페이스를 열고 인터페이스에서 읽기 및 쓰기 작업을 수행하기 전에 연결된 각 하위 디바이스를 식별해야 합니다. Azure Sphere의 SPI 읽기 및 쓰기 작업은 차단 API를 사용합니다.

SPI 요구 사항

SPI를 사용하는 애플리케이션은 SPI에 적합한 헤더 파일을 포함하고 애플리케이션 매니페스트에 SPI 설정을 추가해야 합니다.

모든 애플리케이션은 대상 하드웨어를 설정하고 해당 하드웨어 정의 헤더 파일을 포함해야 합니다.

헤더 파일

 #define SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

SPI_STRUCTS_VERSION 헤더 파일을 포함하기 전에 전처리기 정의를 선언합니다. 애플리케이션에서 사용하는 구조체 버전을 지정합니다.

"path-to-your-target-hardware.h"를 하드웨어의 헤더 파일 경로로 바꿉니다.

애플리케이션 매니페스트 설정

SPI API를 사용하려면 애플리케이션 매니페스트에 SpiMaster 기능을 추가한 다음 각 SPI master 컨트롤러를 기능에 추가해야 합니다. 이렇게 하면 애플리케이션이 컨트롤러에 액세스할 수 있습니다. Azure Sphere 애플리케이션 매니페스트에는 애플리케이션 매니페스트 에 대한 자세한 내용이 있습니다.

코드에서 하드웨어에 대해 정의된 상수를 사용하여 SPI master 인터페이스를 식별합니다. 컴파일러는 앱을 빌드할 때 이러한 값을 원시 값으로 변환합니다.

예를 들어 MT3620 RDB(참조 개발 보드)를 대상으로 하고 두 개의 SPI master 인터페이스를 구성하는 애플리케이션 매니페스트에서 발췌한 내용은 다음과 같습니다.

"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],

다음 발췌문에서는 Avnet MT3620 시작 키트를 대상으로 하는 애플리케이션에서 동일한 SPI master 인터페이스를 지정하는 방법을 보여 줍니다.

"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]

칩 구성 SPI master 인터페이스 선택 및 열기

SPI master 인터페이스에서 작업을 수행하기 전에 칩 선택을 구성하고 인터페이스를 열어야 합니다. 칩 선택을 구성하려면 SPIMaster_InitConfig 함수를 호출하여 SPIMaster_Config 구조체 를 초기화합니다. SPIMaster_Config 초기화한 후 필드를 SPI_ChipSelectPolarity_ActiveLow.로 업데이트 csPolarity 합니다. /reference/applibs/ity_Activ. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

SPI master 인터페이스를 열려면 SPIMaster_Openfunction 호출합니다. 그러면 인터페이스에 기본 설정이 적용되고 칩 선택 설정이 적용됩니다.

  • SPI_Mode_0 SPI 비트 순서에 대한
  • SPI_BitOrder_MsbFirst 통신 모드의 경우

SPI master 인터페이스에 대한 설정 업데이트

초기화 후 인터페이스에 대한 설정을 변경할 수 있습니다.

SPI master 인터페이스에서 읽기 및 쓰기 작업 수행

Azure Sphere는 SPI를 사용하여 읽기 및 쓰기 작업을 수행하기 위한 몇 가지 옵션을 지원합니다. 단방향 읽기 또는 쓰기 작업 및 일부 POSIX API와의 상호 운용성을 유지하기 위해 POSIX read(2) 및 write(2) 함수를 호출할 수 있습니다.

SPIMaster_WriteThenRead 함수를 호출하여 다른 트랜잭션의 중단 없이 단일 버스 트랜잭션에서 결합된 쓰기를 수행한 다음 읽기 작업을 수행할 수 있습니다.

읽기 또는 쓰기 작업 간의 타이밍을 보다 정확하게 제어해야 하는 경우 SPIMaster_TransferSequential 함수를 호출합니다. 이렇게 하면 한 쌍의 CS 사용 및 사용 안 함 상태 간에 여러 읽기 및 쓰기 작업을 수행할 수 있습니다.

SPI 인터페이스 닫기

인터페이스를 닫려면 표준 POSIX 함수 close()를 호출합니다.

MT3620 지원

이 섹션에서는 MT3620 개발 보드에서 Azure Sphere를 실행할 때만 적용되는 SPI 옵션에 대해 설명합니다.

MT3620에 대한 SPI 사양은 MT3620 지원 상태에 나열됩니다. MT3620 개발 보드 사용자 가이드에서는 배선에 대한 핀 레이아웃 및 기능을 설명합니다.

Microsoft Azure Sphere SDK 설치 디렉터리의 HardwareDefinitions 폴더에는 일반적인 Azure Sphere 개발 보드, 모듈 및 칩에 대한 정의가 포함되어 있습니다. 여기에는 다른 MT3620 하드웨어와 함께 MT3620, MT3620 RDB에 대한 master 인터페이스를 정의하는 헤더 및 JSON 파일이 포함되어 있습니다. HardwareDefinitions 폴더의 기본 위치는 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions Windows 및 /opt/azurespheresdk/HardwareDefinitions Linux에 있습니다.

  • MT3620 개발 보드를 구성할 때 모든 ISU 포트를 SPI master 인터페이스로 사용할 수 있습니다. 각 ISU에 최대 두 개의 하위 디바이스를 연결할 수 있습니다. ISU 포트를 SPI master 인터페이스로 사용하는 경우 I2C 또는 UART 인터페이스와 동일한 포트를 사용할 수 없습니다.
  • MT3620은 최대 40MHz의 SPI 트랜잭션을 지원합니다.
  • MT3620은 단일 버스 트랜잭션 내에서 동시 양방향 읽기 및 쓰기(전체 이중) SPI 작업을 지원하지 않습니다.