SerCx2 아키텍처 개요
SerCx2는 직렬 컨트롤러 드라이버와 함께 작동하여 주변 드라이버와 직렬로 연결된 주변 장치 간의 통신을 가능하게 합니다. 일반적으로 직렬 컨트롤러는 SoC(System on a Chip) 칩에 통합되어 SoC 칩 외부에 있지만 동일한 인쇄 회로 보드에 솔더되는 주변 장치와 낮은 핀 수 통신을 제공합니다.
다음 다이어그램은 직렬로 연결된 주변 장치와 이 디바이스의 드라이버 간의 통신 경로를 보여 줍니다. 이 주변 장치 드라이버는 커널 모드 또는 사용자 모드에서 실행되며 주변 디바이스가 연결된 직렬 포트로 I/O 요청을 보냅니다.
SerCx2와 직렬 컨트롤러 드라이버는 모두 커널 모드에서 실행되며 SerCx2 DDI(디바이스 드라이버 인터페이스)를 통해 서로 통신합니다. 직렬 컨트롤러 드라이버는 SerCx2에서 구현되는 드라이버 지원 메서드를 호출합니다. SerCx2는 직렬 컨트롤러 드라이버에 의해 구현되는 이벤트 콜백 함수를 호출합니다.
일반적으로 직렬 컨트롤러의 하드웨어 레지스터는 메모리 매핑됩니다. 직렬 컨트롤러 드라이버는 직렬 포트를 구성하고 직렬 포트에 연결된 주변 디바이스와 데이터를 전송하기 위해 이러한 레지스터에 직접 액세스합니다. 더 긴 데이터 전송의 경우 SerCx2는 일반적으로 DMA 전송을 사용합니다(이전 다이어그램에 표시되지 않음).
주변 장치 드라이버가 주변 디바이스에 대한 논리적 연결을 여는 데 필요한 정보는 연결 ID라고 하는 특수한 유형의 하드웨어 리소스에 캡슐화됩니다. 자세한 내용은 직렬로 연결된 주변 장치용 연결 ID를 참조하세요.
일반적으로 드라이버만 직렬 컨트롤러에 직접 I/O 요청을 보냅니다. 사용자 모드 애플리케이션이 직렬로 연결된 주변 장치와 통신해야 하는 경우 디바이스의 주변 드라이버는 애플리케이션과 디바이스 간의 중개자 역할을 합니다. 애플리케이션이 주변 장치 간 데이터를 전송해야 하는 경우 애플리케이션은 쓰기(IRP_MJ_WRITE) 요청 또는 읽기(IRP_MJ_READ) 요청을 주변 드라이버에 보내고, 주변 장치 드라이버는 직렬 컨트롤러에 해당 쓰기 또는 읽기 요청을 전송하여 응답합니다. 또한 주변 장치 드라이버는 디바이스 I/O 제어 요청(IOCTL)을 보내 직렬 포트를 구성할 수 있습니다. SerCx2에서 지원하는 IOCTL 목록은 직렬 I/O 요청 인터페이스를 참조하세요.
직렬 컨트롤러에 I/O 요청을 보내는 주변 드라이버는 KMDF(커널 모드 드라이버 프레임워크)를 사용하는 커널 모드 드라이버 또는 UMDF( 사용자 모드 드라이버 프레임워크 )를 사용하는 사용자 모드 드라이버입니다. SerCx2는 주변 드라이버가 직렬 컨트롤러로 보낸 I/O 요청의 큐를 관리합니다.
읽기 또는 쓰기 요청에 대한 응답으로 SerCx2는 하나 이상의 I/O 트랜잭션을 시작하여 요청의 직렬 컨트롤러와 데이터 버퍼 간에 데이터를 이동합니다. 각 I/O 트랜잭션은 프로그래밍된 PIO(I/O) 또는 DMA를 사용하여 요청의 직렬 컨트롤러와 데이터 버퍼 간에 데이터를 전송합니다. 직렬 컨트롤러 드라이버에서 지원하는 I/O 트랜잭션 유형은 직렬 컨트롤러의 하드웨어 기능에 따라 달라집니다. 자세한 내용은 SerCx2 I/O 트랜잭션 개요를 참조하세요.