2017-04-06 14 views
0

내가 알고있는 무엇 :USB 상호 작용 (- 버퍼 - 엔드 포인트 HostController)

  • USB 장치 (마우스) 나가는 데이터가 IST가 저장 호스트 인터럽트 IN 엔드 포인트가 있습니다.
  • 호스트는이 Interrupt IN Endpoint를 폴링하고 데이터를 버퍼에 씁니다.

어디에서이 버퍼를 찾을 수 있습니까? 나는 나의 마더 보드의 Technical Manual (USB ... Controller ... Buffer)에서 그것을 찾기 위해 열심히 노력했지만이 레지스터를 찾을 수 없었다.

HostController는 장치에서 Endpoint IN 데이터를 저장하기 위해 자체 버퍼를 사용합니까? 아니면 Host Conroller를 다른 레지스터에 매핑합니까?

그리고 동작 (예 : 마우스 움직임 또는 클릭)이 있으면 USB 호스트 컨트롤러가 인터럽트를 유발합니까? 이 저장된/버퍼 된 데이터는 어디에서 찾을 수 있습니까?

나는 우분투와 함께 일하고 /proc/interrupts에보고 내가 연결된 USB 장치의 IRQ 번호 (마우스)로 EHCI_HCD:USB2 컨트롤러를 찾을 수 있습니다 ...

어쩌면 사람이 이해를 도와 줄 수있는이 USB Enpoint => HostController => 인터럽트 --- 메커니즘.

정말 고마워요!

답변

0

어디에서이 버퍼를 찾을 수 있습니까? 나는 나의 마더 보드의 Technical Manual (USB ... Controller ... Buffer)에서 그것을 찾기 위해 열심히 노력했지만이 레지스터를 찾을 수 없었다.

이 버퍼는 URB 형식의 HID 클래스 드라이버에서 제공됩니다. 그래서 그것의 소프트웨어 버퍼.

호스트 컨트롤러는 장치에서 Endpoint IN 데이터를 저장하기 위해 자체 버퍼를 사용합니까? 아니면 호스트 컨트롤러가 다른 레지스터에 매핑합니까?

앞서 말했듯이 호스트 컨트롤러에는 데이터를 저장할 레지스터가 없습니다. 호스트 컨트롤러는 HCD가 전달한 소프트웨어 버퍼를 사용합니다.

그리고 동작 (예 : 마우스 움직임 또는 클릭)이 있으면 USB 호스트 컨트롤러가 인터럽트를 유발합니까? 이 저장된/버퍼 된 데이터는 어디에서 찾을 수 있습니까?

아니오 인터럽트가 발생하지 않습니다. 인터럽트 끝점을 폴링하여 상태를 가져옵니다. 인터럽트는 호스트 컨트롤러에서 사용자의 경우 Interrupt IN 전송 인 전송 완료를 알리기 위해 사용됩니다.

전송 설명자의 아래 그림을 참조하십시오. 호스트 컨트롤러는 각각 IN 및 OUT 트랜잭션의 경우 데이터를 저장하거나 검색하기 위해 "버퍼 포인터"를 사용합니다. Transfer Descriptor에 대해 더 알고 싶다면 EHCI specification을 읽으십시오.

enter image description here

+0

친애하는 @Shaibal. 답변 주셔서 감사합니다. 따라서 URB가 완료되면 호스트 컨트롤러가 인터럽트를 발생 시키나요? 제네릭 인터럽트 컨트롤러에 등록 되었습니까?핵심 정보를 알려주시겠습니까? pic "버퍼 포인터"의 소스는 무엇입니까 ... USB Specs.You에 설명 된 전송 설명자를 찾을 수 없습니다.이 소스가 있습니까? 감사합니다 – fetteotter

+0

예 호스트 컨트롤러는 전송 완료, 포트 변경 이벤트, 호스트 내부 오류의 세 가지 상황에 대해 인터럽트를 발생시킵니다. 인터럽트는 Generic Interrupt Controller에 등록됩니다. 인텔의 "ehci 사양"문서를 참조하십시오. 데이터 구조 다이어그램과 버퍼에 대한 세부 사항은 제 3 장의 섹션 5를 참조하십시오. :) – Shaibal