TI의 TUSB3200A는 TI의 TAS-1020B와 더불어 8052 MCU를 장착한 USB 칩셋입니다.
TI에서 칩셋 소비자 (개발업체)를 위해 기본적인 개발킷을 제공하지만, 어쨌거나 펌웨어를 만들어 써야 하는 제품입니다.
TAS-1020B, TUSB3200A 는 싱크로너스, 어댑티브, 비동기모드로 모두 작동할 수 있는 칩셋인데 실제로 비동기 모드로 작동하는 칩셋으로는 TAS-1020B를 많이 사용하고 있습니다.
그리고 이런 칩셋을 쓴다고 해서 반드시 비동기 모드로 작동하지 않습니다.(따로 펌웨어를 개발해서 써야 함) 또한 비동기 모드로 작동해도 얼마나 잘 설계하느냐에 따라 성능이 갈릴 수 있습니다. 기술도 중요하지만 그걸 어떻게 적용하는가(implementation)가 더 중요하다는 뜻입니다. 비동기 모드로 작동해도 다른 기술을 적용해서 좋은 측정결과를 보여주는 제품들도 많이 있습니다.
아래의 내용은 TUSB3200A의 기술문서 중 일부를 번역한 것입니다.
간단히 요약하자면, TUSB3200A에서 사용하는 클럭은 칩셋 내부의 PLL 회로를 사용한 클럭 제네레이터에서 만들어진다는 것입니다. 이는 PCM270x 칩셋이나 다른 어댑티브 모드로 작동하는 칩셋과 마찬가지입니다. 또한 어댑티브 모드로 동작하는 다른 USB 와 마찬가지로 여전히 구조적으로 지터에 취약한 부분이 있습니다.
어댑티브 모드의 구조적인 취약점은 제가 예전에 번역한 PCM270x 의 칩셋 개발 스토리를 읽어보시면 도움이 될 겁니다.
http://php.chol.com/~active/bbs/audio/110
워낙 기술적인 내용이지만, 어댑티브 모드에서 시디음원(44.1kHz)을 뽑아낼 때 그냥 간단히 44.1kHz 클럭으로 샘플 데이타를 버퍼메모리에서 끄집어내면 되는게 아니냐고 할 수 있지만 그게 불가능하다는 것입니다. 왜냐하면 버퍼에 데이타를 집어넣는 속도가 가변적인데 반해 버퍼에서 데이타를 끄집어내는 속도가 일정하면 버퍼에 데이타가 부족해지거나(버퍼 언더런) 반대로 버퍼에 데이타가 넘쳐나는 상황(버퍼 오버플로우)이 만들어지기 때문입니다. (이 방식에서는 PC에서 데이타를 전송해주는 속도를 조절하는 것이 불가능함. USB 기기는 그냥 PC가 주는 대로 받아야 합니다)
PC에서 보내줄 때 딱딱 12MHz의 주기로 데이타를 보내지 않고(지터) 그 불규칙한 흐름에 순응해서(어댑티브) PLL 회로를 짜맞춘 것이 현재의 USB 칩셋입니다. 즉 버퍼에 데이타가 들어오는 속도를 확인해서 그 속도에 맞추어 클럭을 합성해 만들어 그 속도로 데이타를 꺼내오는 것입니다.
위의 번역내용을 보시면 아시겠지만 시디음원을 뽑아낼 때에는 100Hz 주기로 뾰족하게 튀어나온 임펄스가 부작용으로 발생합니다. 이걸 최소화하기 위해 피드백 회로가 아닌 새로운 알고리즘을 적용한게 현재의 USB 칩셋입니다. 현재의 USB 칩셋들도 나름의 지터대책이 있지만 그 효과가 이상적이지 않은게 현재의 상황인 것입니다.
종합하면 TUSB3200에 초고정밀의 6MHz를 달아도 결국 마스터클럭은 칩셋 내부에서 새로 합성해서 만들어 사용한다는 뜻입니다.
해외포럼에서는 이미 몇년 전에 자작파들의 실험, 계측을 통해 TUSB3200, TAS1020의 어댑티브 모드의 성능이 별로라는 결과가 나왔다는 것을 참고하십시오.
=============================
2.1.1 발진기와 PLL
외부 6-MHz 크리스탈을 사용해서 TUSB3200A는 온칩 발진기와 PLL을 이용해서 기본적인 48MHz의 내부 클럭을 만들어낸다. PLL 출력을 사용해서 다른 필요한 클럭 시그널이 클럭 제네레이터와 어댑티브 클럭 제네레이터에 의해 생성된다.
2.1.2 클럭 제네레이터와 시퀀서 로직
PLL로부터 48MHz 입력 시그널을 활용하여 클럭 제네레이터 로직은 모든 내부 클럭 시그널을 생성하는데, 코덱 포트 인터페이스의 마스터 클럭(MCLK)과 시리얼 클럭(CSCLK)은 예외이다. TUSB3200A의 내부 클럭은 48MHz, 24MHz, 12MHz 클럭과 USB 클럭을 포함하고 있다. USB클럭은 또한 12MHz 주파수를 가지고 있다. USB클럭은 TUSB3200A가 데이타를 전송할 때 12MHz 클럭과 동일하고, TUSB3200A가 데이타를 수신할 때에는 데이타로부터 추출된다. USB 데이타를 수신할 때 USB 클럭을 추출하기 위해 TUSB3200A는 48MHz 클럭을 사용하는 내부 디지탈 PLL(DPLL)을 활용한다.
2.1.3 어댑티브 클럭 제네레이터 (ACG)
코덱 포트 인터페이스와 코덱 디바이스에 사용하기 위해서, 어댑티브 클럭 제네레이터를 이용해 마스터 클럭 출력 시그널(MCLKO)을 생성한다. 코덱에 의해 데이타의 샘플 레이트 컨버전을 USB 프레임 레이트에 동기화하기 위해 어댑티브 클럭 제네레이터에 의해 생성된 MCLKO 시그널이 반드시 사용되어야 한다. MCLKO 시그널을 USB 프레임 레이트에 동기화하는 것은 어댑티브 클럭 제네레이터의 프리퀀시 값을 프로그래밍하는 것에 의해 MCU로 조절된다. MCLKO 프리퀀시는 MCU에 의해 모니터되고 필요에의해 업데이트된다. 비동기 작동을 위해 외부 소스를 사용해서 마스터 클럭 입력 시그널(MCLKI)을 만들어 낼 수도 있는데 이는 코덱 포트 인터페이스에서 사용된다. 이런 시나리오에서는 코덱 디바이스는 반드시 동일한 마스터 클럭 시그널(MCLKI)를 사용해야 한다.
2.1.13 코덱 포트 인터페이스
TUSB3200A는 설정가능한 풀듀플렉스 양방향 시리얼 인터페이스를 제공하여 코덱이나 USB 등시성(isochronous) 데이타를 스트리밍하기 위한 다른 장치로 연결할 수 있다. 인터페이스는 여러 다른 업계 표준 프로토콜을 지원하도록 설정될 수 있는데, AC 97 1.x, AC97 2.x, I2S 를 포함한다.
2.2.1 클럭 제네레이션
TUSB3200A는 USB와 코덱 작동 모두를 위해 필요한 클럭을 추출하기 위해 그림4-1에서 보여지듯이 외부 6-MHz 크리스탈과 PLL 필터가 필요하다. 6-MHz 크리스탈의 낮은 주파수를 사용해서 IC 내부에서 필요한 고주파수 클럭을 생성하는 것은 EMI 에 있어서 큰 이득이다.
2.2.8 어댑티브 클럭 제네레이터(ACG)
어댑티브 클럭 제네레이터는 프로그램 가능한 마스터 클럭 출력 시그널(MCLKO)을 생성하기 위해 사용되는데, MCLKO는 코덱 포트 인터페이스와 코덱 디바이스에서 사용된다.
ACG는 USB 비동기, 동기, 어댑티브 모드 동작을 위한 마스터 클럭을 생성하는데 사용되어진다. 하지만, USB 비동기 모드 동작을 위해서 TUSB3200A의 MCLKI 시그널을 드라이브하는데 외부 클럭이 사용될 수도 있다. 이 경우 MCLKI 시그널은 ACG의 클럭 출력 대신에 코덱 포트 인터페이스를 위한 클럭 소스로 사용될 수 있다.
어댑티브 클럭 제네레이터의 블럭 다이어그램은 그림2-1에서 볼 수 있다. 주파수 신세사이즈 회로는 12-25MHz 범위의 프로그램 가능한 클럭을 생성한다. 주파수 신세사이저의 출력은 divide-by-M 회로에 물려서 1에서 16까지 나누도록 프로그램된다. 그 결과로 MCLKO 시그널의 주파수 범위는 750kHz에서 25MHz까지 된다. MCLKO 시그널의 듀티 사이클(duty cycle)은 모든 프로그램 가능한 MCLKO 주파수의 50%다.
2.2.8.1 프로그램 가능한 주파수 신세사이저
24비트 ACG 주파수 레지스터 값은 주파수 신세사이저를 프로그램할 때 사용된다. 이는 필요한 코덱 마스터 클럭 주파수를 정확하게 선택하기 위한 고 해상도를 가능하게 한다. 주파수 레지스터 값은 ACG가 작동중에 MCU에 의해 업데이트될 수 있다. 오디오 어플리케이션에서 펌웨어는 +- LSB 혹은 그 이상으로 주파수 값을 조절해서 싱크로너스 모드 동작을 위해 USB의 시작 프레임(Start-of-frame, SOF)에 고정될 수 있다. 24비트 주파수 레지스터 값은 오직 MCU가 ACGFRQ0 레지스터에 쓰기를 할 때에만 주파수 신세사이저에 의해 업데이트 될 수 있다.
어플리케이션에 따라서, 신세사이저 주파수를 조절하기 위해 더 작은 비트값이 선택될 수 있다. 또한 주파수 해상도는 실제 사용되는 주파수에 달려있다. 이는 208 ps의 주파수 해상도가 상대적으로 저주파수보다 고주파수와 비교해서 더 현저하기 때문이다. 분수를 구하기 위해 더 많은 비트가 사용되어 양자화 에러가 줄어드는 만큼 주파수를 구하는데 사용되는 비트의 숫자에 따라서 해상도가 증가한다.