본문 바로가기

모바일(Mobile)/안드로이드(Android)

[Android] 안드로이드 기기와 USB 외부 장치

개요 (OverView)

안드로이드에서 USB 장치와의 통신 및 상호작용은 AOA (Android Open Accessory)라는 기술에 의해서 지원됩니다.

가장 대표적인 사례로는 마우스, 로봇 컨트롤러, 키오스크, 카드리더기 등이 이에 해당합니다.

일반적인 사용자 환경에서는 보통 안드로이드 기기에 마우스나 키보드 같은 USB 외부 장치를 연결하면 자동으로 HID(Human Interface Descriptor)라는 기술을 통해 통신이 지원되고 따라서 안드로이드 장치 내에서 USB 장치를 사용할 수 있습니다.


서로 다른 두 장치(하드웨어)를 서로 USB(Universal Serial Bus)로 연결하면 일어나는 일

마우스, PC, 스마트폰 등 다양한 하드웨어 장치를 USB로 서로 연결하면 두 장치는 USB 디스크립터(Descriptor)를 서로 주고 받으면서 통신을 시작합니다.

USB 디스크립터(Descriptor)는 계층형 구조를 가지고 있으며, 제조 단계에서 함께 탑재 되어 출고 되는 것이 일반적이므로 응용프로그래머가 별도로 개발할 일은 거의 없습니다.

 

fig 1.0.  USB  디스크립터 (Descriptor)의 계층 구조

 

일반적인 상황에서 USB 연결을 통하여 외부 장치와 안드로이드 OS가 탑재된 기기를 연결하면 안드로이드 OS가 탑재된 기기는 USB 호스트(Host)의 역할을 수행하므로, USB 장치에 전원을 공급하고 장치로부터 데이터를 전송 받습니다.


USB의 전원 공급

USB의 전원 공급  앞서 USB는 꽂기만 해도 PC에서 USB 장치에 전원을 공급한다고 했는데, 이것이 가능한 이유는 USB에는 4가지 선이 있기 때문입니다. 2개의 선(D+, D-)은 호스트와 디바이스 간의 데이터를 주고 받기 위해 사용하고, 2개의 선(Vbus, GND)은 전원을 공급하기 위해 사용합니다.

fig 1.1 USB 포트의 구조

 

 

그러나 연결하고자 하는 두 장치에서 모두 안드로이드와 같은 OS가 탑재되어 있다면 이 때는 어느 쪽을 USB 호스트(Host)로 할 지 애매한 상황이 됩니다.

 

따라서, 보통은 안드로이드 와 같이 별도로 OS가 탑재된 장치끼리 연결할 때에는 연결하는 선의 말단이 서로 달라 이로 기인한 전기적 흐름의 차이로 USB 호스트(HOST)와 디바이스를 구분합니다.


안드로이드가 탑재된 장치의 USB 연결

안드로이드 OS와 같은 OS가 탑재되어 있다고 하더라도 해당 장치를 USB 장치로 다른 기기에서 인식할 수 있도록 할 수 있고, 이미 대중적으로 지원되는 기술 중 하나입니다.

 

이에 해당하는 가장 대표적인 사례로 안드로이드 스튜디오로 스마트폰을 USB로 연결하여 앱을 개발하고 설치하는 상황을 들 수 있습니다.

 

안드로이드 스튜디오가 설치된 PC(보통 Window or Mac OS)와 스마트폰 (IOS or Android)은 서로 독립적인 OS를 가지고 있는 상황이며 스마트폰이 연결되는 부분은 C타입, 컴퓨터가 연결되는 부분은 A타입으로 구성되어 있으므로 연결된 두 선에는 전류의 흐름이 달라 어느 쪽이 호스트이고 어느 쪽이 디바이스인지 판단할 수 있습니다.

 

 

fig 1.2 안드로이드 장치를 USB Device로서 연결하는 경우(갤럭시 노트 20 기준)

 

 


 USB 호스트(Host)와 USB 장치(Device) 사이의 역할 결정 문제

서로 다른 장치를 A to A로 연결하는 경우에는 어느 쪽을 USB 호스트(Host)인지 결정하는 것이 어려울 수 있습니다.

만약 안드로이드기기와 PC 사이에 USB A 타입 선에서 A 타입 선으로 연결 했을 때, 별다른 설정이 없다면 어떤 쪽이 호스트(Host)로서 연결되는지 확인한 결과 두 장치(PC, 안드로이드) 모두에서 USB 호스트 혹은 액세서리인지 확인할 수 있는 정보 또는 알림을 조회할 수 없었습니다. (왜 이런 일이 발생하는지는 추후 더 알아본 후 본 게시글에 첨부할 예정입니다.)

 

안드로이드 USB 저장장치가 호스트인지 액세서리인지 결정되었을 때는, 아래와 같이 동작합니다.

fig 1.3. 안드로이드 USB 호스트 및 액세서리 모드

 

 

fig 1.4. 안드로이드 기기의 USB 연결 화면


 USB 통신에서 문제가 발생할 경우

만약 앱을 실행하지 않는 디바이스 쪽에서 USB로 연결했을 때, 자동으로 디바이스 모드가 되는 것을 지원하지 않는다면,

혹은 연결 했더라도 무언가 문제가 발생했다면 연결된 USB 저장장치 목록에서 확인할 수 없고 정보를 확인할 수 없습니다.

 

스마트폰에서도 두 장치 간에 연결이 올바르지 않으면 다음과 같이 사용자에게 이상이 있음을 알려주고 있습니다.

 

fig 1.5. 안드로이드 장치의 USB 연결이 불량인 경우

 


 

참고자료

https://developer.android.com/develop/connectivity/usb?hl=ko

 

USB 호스트 및 액세서리 개요  |  Connectivity  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. USB 호스트 및 액세서리 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android는 두 가지 모드, 즉

developer.android.com

https://blog.devguru.co.kr/2021/06/aoa-usb.html

 

AOA를 통한 안드로이드 USB통신

기기들이 서로간에 통신하는 많은 방법들이 존재하고 있지만 근거리에서 유선을 사용하려면 USB 방식이 가장 대중적이고 편리한 방법이다. 안드로이드(Android) 에서도 USB를 지원하며 다양한 기기

blog.devguru.co.kr

https://machine-woong.tistory.com/603

 

Android - USB Serial 통신 ( AOA - Android Open Accessory)

Android는 두 가지 모드, USB 액세서리 및 USB 호스트 모드를 통해 다양한 USB 주변기기 및 Android USB 액세서리를 지원합니다. (Android 액세서리 프로토콜을 구현하는 하드웨어) USB 액세서리 모드에서 외

machine-woong.tistory.com

https://blog.naver.com/jay_korea/30033163575

 

USB Descriptors

USB Descriptors   모든 USB device들은 device종류, 제조사, 지원하는 USB version, confi...

blog.naver.com

https://m.blog.naver.com/yuyyulee/221691984923

 

[Android Tip] SerialPort(시리얼 통신) 사용하기 (JNI)

안드로이드 OS는 모바일 뿐만 아니라 다양한 기기에 적용될 수 있는데, 셋탑 박스나 디지털 광고 매체 등...

blog.naver.com