SPB I/O 요청 인터페이스 사용
Windows 8부터 SPB 프레임워크 확장(SpbCx)은 SPB I/O 요청 인터페이스를 지원하는 시스템 제공 구성 요소입니다. SPB 주변 장치 드라이버는 이 인터페이스를 사용하여 I²C, SPI 및 기타 간단한 SPB(주변 버스 )에 연결된 디바이스에 I/O 요청을 보냅니다. 다양한 버스 유형에서 표준화된 I/O 요청 인터페이스를 사용할 수 있게 함으로써 SpbCx는 다양한 하드웨어 플랫폼 및 여러 하드웨어 공급업체의 SPB 컨트롤러에서 주변 장치 제품군에 대한 드라이버 지원을 제공하는 작업을 간소화합니다.
다음 조건이 충족되면 SPB 연결 주변 디바이스의 하드웨어 공급업체는 여러 버스 유형에서 작동할 수 있는 하나의 디바이스 드라이버를 개발할 수 있습니다.
- 주변 장치는 이러한 버스와 하드웨어 호환이 가능해야 합니다.
- 드라이버는 이러한 모든 버스 유형에서 동일한 디바이스 제어 프로토콜을 사용할 수 있습니다.
SPB 프레임워크 확장은 주변 드라이버에서 버스 관련 코드를 제거함으로써 이러한 드라이버의 개발 시간을 단축하고 지원되는 버스 유형에서 보다 일관된 동작을 보장합니다.
SPB에 연결된 주변 장치는 메모리 매핑되지 않으며 이러한 디바이스의 드라이버는 이러한 디바이스의 하드웨어 레지스터에 직접 액세스할 수 없습니다. 대신 SPB 주변 장치 드라이버는 SPB 컨트롤러를 사용하여 디바이스 간에 데이터를 직렬로 전송해야 합니다. 이러한 전송을 요청하려면 드라이버가 디바이스에 I/O 요청을 보내야 합니다. 이 I/O 요청은 SpbCx에서 관리하는 큐로 전송됩니다.
SpbCx는 SPB 컨트롤러 드라이버와 협력하여 드라이버의 I/O 요청을 처리합니다. SPB 컨트롤러용 하드웨어 공급업체는 컨트롤러 하드웨어와 관련된 작업을 수행하기 위해 SPB 컨트롤러 드라이버를 제공합니다.
드라이버만 SPB 컨트롤러의 I/O 요청 인터페이스에 I/O 요청을 보낼 수 있습니다. 애플리케이션은 SPB 컨트롤러에 I/O 요청을 직접 보낼 수 없습니다. 대신 애플리케이션은 SPB에 연결된 주변 디바이스에 대한 I/O 요청을 드라이버에 보낸 다음 드라이버에 의존하여 디바이스 간에 데이터를 전송하는 데 필요할 수 있는 모든 I/O 요청을 SPB 컨트롤러에 보낼 수 있습니다.
드라이버가 SPB에 연결된 주변 디바이스에 I/O 요청을 보내려면 먼저 드라이버가 디바이스에 대한 논리적 연결을 열어야 합니다. 이 연결을 열려면 드라이버는 플러그 앤 플레이 관리자로부터 하드웨어 리소스로 받은 연결 ID를 사용합니다. 자세한 내용은 SPB 주변 장치용 커넥트온 ID를 참조하세요.
SpbCx 및 SPB 컨트롤러 드라이버는 SPB 연결 주변 디바이스에 대한 읽기 및 쓰기 요청을 공동으로 처리합니다. IRP_MJ_READ 요청에 대한 응답으로 SPB 컨트롤러는 주변 장치에서 드라이버 제공 버퍼로 지정된 바이트 수를 전송합니다. IRP_MJ_WRITE 요청에 대한 응답으로 SPB 컨트롤러는 드라이버 제공 버퍼에서 주변 장치로 지정된 바이트 수를 전송합니다.
0바이트를 전송하는 IRP_MJ_READ 또는 IRP_MJ_WRITE 요청의 경우 SpbCx는 STATUS_SUCCESS 상태 코드로 요청을 완료하지만 작업을 수행하지 않습니다.
SpbCx 및 SPB 컨트롤러 드라이버도 이러한 SPB별 I/O 제어 코드(IOCTL)를 처리합니다.
SPB 주변 장치 드라이버는 이러한 IOCTL을 사용하여 I/O 전송 시퀀스를 수행 합니다. I/O 전송 시퀀스는 단일 원자 버스 작업으로 수행되는 순서가 지정된 버스 전송(읽기 및 쓰기 작업) 집합입니다. 이러한 IOCTL에 대한 자세한 내용은 I/O 전송 시퀀스를 참조 하세요.
특정 SPB 컨트롤러에 대한 SPB 컨트롤러 드라이버는 하드웨어별 기능을 수행하는 사용자 지정 IOCTL을 지원할 수 있습니다. SpbCx가 처리하지 않는 IOCTL 및 SPB 컨트롤러용 하드웨어 공급업체가 하드웨어별 작업을 수행해야 하는 SPB 주변 장치 드라이버의 이점을 지원합니다. SPB 주변 장치 드라이버가 SpbCx나 SPB 컨트롤러 드라이버가 인식하지 못하는 IOCTL을 보내면 작업이 수행되지 않으며 오류 상태 값이 STATUS_NOT_SUPPORTED I/O 요청이 완료됩니다.
SPB에 연결된 주변 장치용 드라이버는 일반적으로 UMDF(사용자 모드 드라이버 프레임워크 ) 드라이버 또는 KMDF(커널 모드 드라이버 프레임워크 ) 드라이버입니다. 읽기, 쓰기 또는 IOCTL 요청을 SPB 연결 주변 장치로 보내기 위해 UMDF 드라이버는 IWDFIoRequest::Send와 같은 메서드를 호출합니다. KMDF 드라이버는 WdfIoTargetSendReadSynchronousously, WdfIoTargetSendWriteSynchronously 또는 WdfIoTargetSendIoctlSynchronously와 같은 메서드를 호출합니다.
SPB에 연결된 주변 장치 디바이스에 I/O 요청을 보내는 방법을 보여 주는 코드 예제는 다음 항목을 참조하세요.