2013년 2월 19일 화요일

안드로이드 스마트폰의 micro USB 포트의 모드 변환

아는 사람의 부탁으로 스마트폰의 micro USB 포트가 USB 뿐만 아니라 오디오, 해드셋, 충전 기타 등등의 많은 기능을 수행한다는 것을 알게되었다. 하지만, 아이폰에서 그 많은 기능을 하기위해서 많은 핀들이 존재하는데 다른 스마트폰에서 5핀 밖에 안되는 micro USB 포트로 수행한다는 것은 뭔가 추가적인 기능을 하는 부분이 존재하리라 짐작된다.
검색을 해보니 삼성 스마트폰에만 해당하는 내용일 수 도 있겠지만 FSA9480라는 Fairchild사의 USB 스위치라는 것이 이러한 기능을 수행하도록 되어 있다고 한다. 기본적인 원리는 USB 포트의 D+와 D- 사이에 걸리는 저항값을 통해서 USB OTG로 동작할 것인지, 해드셋으로 동작할 것이지 등등의 모드 전환을 수행한다고 되어 있다. 


USB ID resistor values


Mode Name
Resisor value
Internal mode value
Description

RID_USB_OTG_MODE
0 (GND)
0 0 0 0 0
USB OTG Mode

RID_AUD_SEND_END_BTN
2 K
0 0 0 0 1
Audio Send_End Button

RID_AUD_REMOTE_S1_BTN
2.604 K
0 0 0 1 0
Audio Remote S1 Button

RID_AUD_REMOTE_S2_BTN
3.208 K
0 0 0 1 1
Audio Remote S2 Button

RID_AUD_REMOTE_S3_BTN
4.014 K
0 0 1 0 0
Audio Remote S3 Button

RID_AUD_REMOTE_S4_BTN
4.82 K
0 0 1 0 1
Audio Remote S4 Button

RID_AUD_REMOTE_S5_BTN
6.03 K
0 0 1 1 0
Audio Remote S5 Button

RID_AUD_REMOTE_S6_BTN
8.03 K
0 0 1 1 1
Audio Remote S6 Button

RID_AUD_REMOTE_S7_BTN
10.03 K
0 1 0 0 0
Audio Remote S7 Button

RID_AUD_REMOTE_S8_BTN
12.03 K
0 1 0 0 1
Audio Remote S8 Button

RID_AUD_REMOTE_S9_BTN
14.46 K
0 1 0 1 0
Audio Remote S9 Button

RID_AUD_REMOTE_S10_BTN
17.26 K
0 1 0 1 1
Audio Remote S10 Button

RID_AUD_REMOTE_S11_BTN
20.5 K
0 1 1 0 0
Audio Remote S11 Button

RID_AUD_REMOTE_S12_BTN
24.07 K
0 1 1 0 1
Audio Remote S12 Button

RID_RESERVED_1
28.7 K
0 1 1 1 0
Reserved Accessory #1

RID_RESERVED_2
34 K
0 1 1 1 1
Reserved Accessory #2

RID_RESERVED_3
40.2 K
1 0 0 0 0
Reserved Accessory #3

RID_RESERVED_4
49.9 K
1 0 0 0 1
Reserved Accessory #4

RID_RESERVED_5
64.9 K
1 0 0 1 0
Reserved Accessory #5

RID_AUD_DEV_TY_2
80.07 K
1 0 0 1 1
Audio Device Type 2

RID_PHONE_PWD_DEV
102 K
1 0 1 0 0
Phone Powered Device

RID_TTY_CONVERTER
121 K
1 0 1 0 1
TTY Converter

RID_UART_CABLE
150 K
1 0 1 1 0
UART Cable

RID_CEA936A_TY_1
200 K
1 0 1 1 1
CEA936A Type-1 Charger 1

RID_FM_BOOT_OFF_USB
255 K
1 1 0 0 0
Factory Mode Boot OFF-USB

RID_FM_BOOT_ON_USB
301 K
1 1 0 0 1
Factory Mode Boot ON-USB

RID_AUD_VDO_CABLE
365 K
1 1 0 1 0
Audio/Video Cable

RID_CEA936A_TY_2
442 K
1 1 0 1 1
CEA936A Type-2 Charger 1

RID_FM_BOOT_OFF_UART
523 K
1 1 1 0 0
Factory Mode Boot OFF-UART

RID_FM_BOOT_ON_UART
619 K
1 1 1 0 1
Factory Mode Boot ON-UART

RID_AUD_DEV_TY_1_REMOTE
1000.07 K
1 1 1 1 0
Audio Device Type 1 with Remote 2

RID_AUD_DEV_TY_1_SEND
1002 K
Audio Device Type 1 / Only Send-End 2

RID_USB_MODE
Open
1 1 1 1 1
USB Mode, Dedicated Charger or Accessory Detach



출처 : http://www.jetdroid.org/moin/SamsungUARTdebugging

이와 같은 기능을 이용해서 삼성 스마트폰 제조 과정에서 스마트폰의 정상동작을 점검하는 디버그 장비로 활용하는 것같다. 이름도 얄딱구리한 Samsung Anyway JIG라는 것이 바로 그것인 것 같다.



출처 : http://forum.xda-developers.com/showthread.php?t=1629359


비슷한 기능의 것들이 다른 스마트폰에도 있을 것이다. 우선은 위의 기능을 이용해서 micro USB 포트를 다른 모드로 동작하도록 해 보아야 겠다. 디버깅 포트로도 해보고 오디오 기능으로도 해보고 말이다. 그런데 삼성 스마트 폰이 없다. ㅋㅋㅋ

2013년 2월 18일 월요일

[작업중] 두 개의 Digital Potentiometer를 이용한 정확한 Dual Potentiometer의 구현

앰프를 제작하다 보니 Dual Pot을 항상 사용하게 된다.

기계적인 장치이다 보니 두 개의 가변 저항이 물리적으로 아무리 잘 조합되어 있다고 하더라도

두 가변 저항간의 저항 차이가 항상 발생한다.

뭐 정확하다는 것들도 존재하지만, 가격대 성능비는 허무할 정도다.

뭐 이것도 가격 따지면 바보 짓이지만 오디오 매니아 들에게

이정도의 가격에는 둔감할 것으로 여겨져서 한번 해볼만 하다고 생각된다.

생각하고 있는 조합은 I2C 포트와 몇개의 GPIO를 가지고 있는 8 Pin 짜리 AVR이나 PIC 컨트롤러와

두 개의 AD5161이라는 디지털 저항, 그리고 Rotary Encoder를 사용하는 방법이다.

크기가 조금 커지긴 하겠지만 두 저항간의 정확도는 의심할 여지 없다.

  • 준비물
    • 소형 LDO, LM1117혹은 그 변종들, 출력은 5V로 설정
    • 8 Pin 짜리 AVR혹은 PIC (내장형 오실레이터, 한개의 I2C 포트, 두개의 외부 인터럽트 포트는 기본적으로 갖추고 있어야 한다.)
      • ATtiny25 : 8Pin, 2Kbytes Flash, 0.12Kbytes SRAM, 128Bytes EEPROM, 20Mhz, TWI(I2C), SPI
      • ATtiny45 : 8Pin, 4Kbytes Flash, 0.25Kbytes SRAM, 256Bytes EEPROM, 20Mhz, TWI(I2C), SPI
      • ATtiny85 : 8Pin, 8Kbytes Flash, 0.5Kbyters SRAM, 512Bytes EEPROM, 20Mhz, TWI(I2C), SPI
    • 10K의 Digital Pontentiometer 두개
      • Analog Device 사의 AD5161
    • Rotary Encoder
    • 입력 전압은 어떻게 해야 좋을지 모르겠다. 우선 크기 위주로 그리고 확장 가능하도록 추후에 여러 개를 블럭처럼 연결해서 모두 동일한 저항값을 갖도록 할 수 있도록 만들어 보자.
  • 하드웨어 설계
  • 소프트웨어 설계
  • 결과물
  • 성능
....... 작업중 ..........