2016년 6월 30일 목요일

[VLSI 솔루션] VS1003

VS1003 - MP3 / WMA 오디오 코덱

특징

  • MPEG 1 & 2 오디오 레이어 3 (CBR + VBR + ABR) 디코드
    • WMA 4.0 / 4.1 / 7 / 8 / 9 모든 프로파일 (5-384kbit/s)
    • WAV (PCM + IMA ADPCM)
    • 일반 MIDI /SP-MIDI 파일들
  • 마이크나 라인입력으로 IMA ADPCM 인코드
  • MP3나 WAV 스트림 지원
  • Bass나 Treble 제어
  • 단일 12..13MHz 클럭으로 운영
  • 내부 PLL 클럭 멀티플라이어
  • 낮은 전원 운영
  • 채널간 에러 없는 높은 퀄리티의 온칩 스테레오 DAC
  • 30옴의 스테레오 이어폰 드라이어 지원가능
  • 아날로그와 디지털 I/O 각각의 운영 전압
  • 사용자 코드와 데이터를 위한 5.5KiB의 온칩 램
  • 직렬 제어와 데이터 인터페이스
  • 특별한 응용프로그램을 위한 SPI 플래쉬 부트
  • 디버깅 목적의 UART
  • 소프트웨어적으로 기능 추가 가능한 GPIO 4핀

설명

VS1003은 MP3/WMA/MIDI 오디오 디코더와 ADPCM 인코더 단일 칩이다.
VS1003은 시스템 slave처럼 든는경우, 직렬 입력버스를 통해 입력 bitstream에 받는다. 입력 stream은 디지털 볼륨 제어를 통해 18bit 이상의 샘플링, 다중비트, sigma-delta DAC로 디코드되고 패스된다. 디코딩은 시리얼 제어 버스로 제어된다. 기본적인 디코딩에 추가적으로, DSP 효과처럼 사용자 램 메모리에 특별한 특징을 프로그래밍 추가 가능하다.


정의

  • B - Byte, 8 bits
  • b - Bit
  • Ki - "Kibi" = 2^10 = 1024 (IEC 60027-2)
  • Mi - "Mebi" = 2^20 = 1048576 (IEC60027-2)
  • VS_DSP - VLSI Solution's DSP core.
  • W - Word. VS_DSP에서 인스트럭션 워드는 32비트, 데이터 워드는 16비트 길이.

연결 다이어그램

공통버퍼 GBUF는 이어폰을 위한 공용 전압(1.24V)로 사용될 수 있다. 이것은 큰 콘덴서를 필요하지 않게 하고 따라서 VS1003의 오디오 출력핀은 이어폰에 직접적으로 연결될 것이다.
GBUF는 어떠한 상황에도 GND에 연결되어서는 안된다. GBUF를 사용하지 않는다면, LEFT와 RIGHT는 커플링 커패시터로 제공될 것이다. GBUF를 안정상태로 유지하기 위해 GBUF가 사용되지 않을 때에도 항상 저항과 콘덴서를 가져야 한다.

GPIO 핀들을 사용하지 않으면 풀다운 저항을 가지도록 한다.
UART를 사용하지 않는다면 RX는 IOVDD에 연결되고 TX는 연결하지 않는다.
XTALO에 어떠한 외부 로드도 연결하지 않는다.


SPI 버스들

  • 일반
    • 일부 모토롤라 장치에 사용되는 SPI 버스는 VS1003의 직렬 데이터 인터페이스 SDI와 직렬 제어 인터페이스 SCI로 사용된다.
  • SPI 버스 핀 설명
    • VS1002 자체 모드 (새로운 모드)
      • 이 모드들은 VS1003의 SM_SDINEW가 1(시작시 기본)로 설정된 때에 활성화된다. DCLK와 SDATA는 데이터 전송을 위해 사용되지 않고 그것들은 일반 목적 I/O 핀(GPIO2와 GPIO3)처럼 사용될 수 있다. BSYNC 기능은 데이터 인터페이스 칩 선택을 변환한다.
SDI 핀 SCI 핀 설명
XDCS XCS low에 활성화되는 칩선택 입력.
high 레벨은 현재 동작을 정지하고,
 시리얼 인터페이스를 대기 모드로 강제진입.
high 레벨은 또한 시리얼 출력(SO)를 high 임피던스 상태로 강제함.
SM_SDISHARE가 1이면 XDCS핀은 사용되지 않으나 신호는 XCS 인버팅에 의해 내부적으로 생성됨.
SCK SCK 시리얼 클럭 입력.
시리얼 클럭은 또한 저항 인터페이스를 위한 주 클럭처럼 내부적으로 사용됨.
SCK는 단속되거나 지속적일 수 있음.
XCS 이후 첫번째 오름 클럭 엣지는 첫번째 비트를 low 마크로 씀
SI SI 시리얼 입력. 칩 선택이 활성상태이면, SI는 오름 CLK 엣지에 샘플됨.
- SO 시리얼 출력.
읽을때, 떨어지는 SCK 엣지에 데이터가 밀려서 나감.
쓸때, SO는 high 임피던스 상태임
    • VS1001 적합성 모드
      • 이 모드는 SM_SDINEW가 0으로 설정되어 있을 때 활성화된다. 이 모드에서 DCLK, SDATA와 BSYNC는 활성화 된다.
SDI 핀
SCI 핀설명
-XCSlow에 활성화되는 칩선택 입력.
high 레벨은 현재 동작을 정지하고,
 시리얼 인터페이스를 대기 모드로 강제진입.
high 레벨은 또한 시리얼 출력(SO)를 high 임피던스 상태로 강제함.
BSYNC-SDI 데이터는 BSYNC의 오름 엣지에 동기화 됨
DCLKSCK시리얼 클럭 입력.
시리얼 클럭은 저항 인터페이스를 위한 주 클럭처럼 내부에서도 사용됨.
SCK는 단속되거나 지속적일 수 있음.
XCS 이후 첫번째 오름 클럭 엣지는 첫번째 비트를 low 마크 함.
SDATASI시리얼 입력. SI는 오름 SCK 엣지이고 XCS라 low이면 샘플됨
-SO시리얼 출력.
읽을때, 떨어지는 SCK 엣지에 데이터가 밀려서 나감.
쓸때, SO는 high 임피던스 상태임

데이터 요청 핀 DREQ

DREQ 핀/신호는 VS1003의 FIFO가 데이터를 받을 수 있는 상태일 경우 신호에 사용된다. DREQ가 high이면 VS1003은 SDI 데이터의 32바이트나 SCI 명령 하나를 취한다. 이 기준이 만족되지 않은 경우, DREQ는 low가 되고 송신자는 새로운 데이터 전송을 멈춘다.
이 때문에, 송신자가 DREQ의 상태를 체크하지 않고 한번에 SDI 데이터의 32바이트 를 전송한 32바이트 안전영역은 느린 속도의 마이크로컨트롤러를 위해 VS1003의 제어를 쉽게 만든다.
참고: DREQ는 한바이트를 전송하는 동안 조차의 어떤 시간이든 low나 high로 바뀐다. 따라서, DREQ는 더 많은 전송을 결정하는 것에만 사용된다. 그것은 이미 시작된 전송을 포기할 수 없다.
참고: VS10XX부터 VS1002에서 DREQ는 오직 SDI를 위해서만 사용된다. VS1003에서 DREQ는 SCI의 상태를 말하는 것에도 사용된다.

DREQ가 low일 때 SCI 명령을 여전히 보내고 있는 때의 경우들이 있다. DREQ는 SDI와 SCI 사이에서 공유되기 때문에, SCI 명령이 실행되었다거나 SDI가 받을 준비가 되지 않았다면 결정할 수 없다. 이 경우 모든 SCI 명령이 그 어떤것도 누락되지 않도록 충분히 긴 지연이 필요하다. SCI 레지스터 표는 각각의 SCI 레지스터 쓰기를 위한 가장 나쁜 운영 시간을 보여준다.


시리얼 데이터 인터페이스(SDI)를 위한 시리얼 프로토콜

일반

시리얼 데이터 인터페이스는 슬레이브 모드에서 운영되고 DCLK 신호는 외부 회로에 의해 생성되어야 한다.
데이터(SDATA 신호)는 DCLK의 오름과 내림 엣지 각각에서 클럭될 수 있다.
VS1003은 그것의 데이터 입력을 바이트 동기화된 것으로 취한다. SDI 바이트들은 SCI_MODE의 내용에 따라 MSb나 LSb 우선으로 전송될 수 있다.
펌웨어는 SDI 지원가능한 최대 비트레이트로 접근할 수 있다.

VS1002 자체 모드에서 SDI (New Mode)

VS1002 자체 모드(SM_NEWMODE가 1)에서 바이트 동기화는 XDCS에 의해 달성된다. XDCS의 상태는 데이터 바이트 전송이 진행중일 동안 변경되지 않을 수 있다. VS1003을 사용하는 보드에 결함이 있을수 있을지라도 항상 데이터 동기화를 유지하기 위해 언제든 XDCS를 제어하는 것을 추천한다. 예를 들어 모든 플래쉬 데이터 블럭이나 몇 킬로바이트 후에 한번이나 VS1003과 호스트의 동기를 유지해야만 하는것.

만약 SM_SDISHARE가 1이면 XDCS 신호는 XCS 입력의 반전에 의해 내부적으로 생성된다.

새로운 디자인에서 VS1002를 사용하는 자체 모드를 추천한다.


VS1001 적합성 모드에서 SDI


BSYNC Signal - one byte transfer.

VS1003이 VS1001 적합성 모드에서 실행중일 때, BSYNC 신호는 입력 비트스트림의 비트 정렬을 정확히 확인하는 것으로 생성되어져야 한다. BSYNC가 high인 동안의 첫번째 DCLK 샘플링 엣지(오름이나 내림, 우선순위에 의해 결정)는 바이트(LSB우선이 사용되면 LSB, MSB 우선이 사용되면 MSB)의 첫번째 비트에 표시한다. 마지막 비트를 받았을 때 BSYNC가 '1'이면 수신자는 활성으로 유지되고 다음 8비트가 또 수신된다.



BSYNC Signal - two byte transfer


정적 SDI 모드

SM_NEWMODE가 0이고 SM_SDISHARE이 1이면, 동작이 VS1001 적합성 모드처럼이 아니거나 비트들은 BSYNC 신호가 1일동안 받아지기만 한다. BSYNC의 오름 엣지는 동기화를 위해 여전히 사용된다.


시리얼 명령 인터페이스(SCI)를 위한 시리얼 프로토콜

일반

시리얼 명령 인터페이스(SCI)를 위한 시리얼 버스 프로토콜은 명령 바이트, 주소 바이트 그리고 하나의 16비트 데이터 워드로 구성된다. 각 읽기나 쓰기 동작은 단일 레지스터를 읽거나 쓸 수 있다. 데이터 비트들은 오름 엣지에 읽고 사용자는 내림 엣지에 데이터를 업데이트 한다. 바이트들은 항상 MSb 우선으로 전송한다. XCS는 동작 전체 기간동안 low여야 하지만, 필요하다면 비트들 사이에 잠시 멈출 수 있다.

동작은 8비트 명령 동작코드에 의해 정의된다. 지원되는 명령은 읽기와 쓰기다.

  • 명령
    • READ
      • Opcode : 0b00000011
      • 동작 : 데이터 읽기
    • WRITE
      • Opcode : 0b00000010
      • 동작 : 데이터 쓰기
참고: VS1003은 각 SCI 동작 후 DREQ를 low로 설정한다. 기간은 동작에 따라 달라진다. DREQ가 다시 high되기 전에 새로운 SCI/SDI 동작의 시작은 허용되지 않는다.


SCI 읽기

 SCI Word Read

VS1003 레지스터들은 위 그림의 시퀀스를 사용하여 읽는다. 첫째, XCS 선은 장치 선택을 위해 low로 된다. 그리고 READ 운영코드(0x3)이 SI선을 통해 전송되고 8비트 워드 주소가 따른다. 주소가 읽혀지고 난 후, SI의 다른 더많은 데이터는 칩에 의해 무시된다. 받은 주소에 상응하는 16비트 데이터는 SO 선으로 밀려서 나갈것이다.

XCS는 데이터가 밀려서 나간 후 high로 움직여야 한다.

DREQ는 칩에 의해 읽기동작 때동안 잠깐 low로 움직인다. 이것은 매우 짧은 시간이고, 사용자의 특별한 주의를 요구하지 않는다.


SCI 쓰기

SCI Word Write

VS1003 레지스터들은 위의 그림의 시퀀스를 사용하여 쓰여진다. 첫째 XCS 선은 장치 선택을 위해 low로 된다. 다음 WRITE 운영코드(0x2)를 SI 선을 통해 전송되고 8비트 워드 주소가 뒤따른다. 워드가 밀리고 마지막 클럭이 보내진 후 XCS는 WRITE 시퀀스 종료를 위해 high로 된다.

마지막 비트가 전송된 후 DREQ는 그림의 "execution"으로 표시된 레지스터 갱신동안을 위해 low로 된다. 시간 변화는 레지스터와 내용에 따른다. 최대 시간이 마이크로 컨트롤러로부터 다음 SCI 명령이나 SDI 바이트를 공급하기 위한 시간보다 길다면 DREQ가 다시 오르기 전에 새로운 SCI/SDI 동작이 끝나는 것을 허용하지 않는다.


SPI 타이밍 다이어그램

1)25나노초는 100피코패럿 정전용량으로 핀이 로드되었을 때이다. 더 낮은 정전용량은 시간이 더 짧다.


SM_SDINEW와 SM_SDISHARED 설정으로 SPI 예제

두 SCI 쓰기

Two SCI Operations

위의 그림은 두 연속적인 SCI 동작을 보여준다. 참고로 XCS는 쓰기 사이에서 활성화 되기 위해 오름 되어야 한다. 또한 DREQ는 그림에서 보이는것처럼 처리되어야 한다.


두 SDI 바이트들

Two SDI Bytes

SDI 데이터는 그림처럼 xCS의 오름 엣지로 동기화된다. 그러나 모든 바이트가 구분되게 동기화를 필요로 하지는 않는다.


두 SDI 바이트들의 중간에서 SCI 동작

Two SDI Bytes Separated By an SCI Operation

위의 그림은 SDI 동작 사이에서 SCI 동작이 어떻게 임베디드 되는지 보여준다. xCS 엣지들은 SDI와 SCI 둘을 동기화 하기위해 사용된다. 그림에서 보이는것처럼 DREQ의 동작을 기억하라.



기능 설명

주 특징

VS1003은 소유되는 디지털 신호 처리기 VS_DSP 기반이다. 그것은 MP3, WMA와 WAV PCM + ADPCM 오디오 디코딩, 미디 신디사이저, 시리얼 인터페이스들, 다중비율 스테레오 오디오 DAC와 아날로그 출력 증폭기와 필터들을 위해 필요로 하는 모든 코드와 데이터 메모리를 포함한다. 또한 ADPCM 오디오 인코딩은 A/D 컨버터와 마이크 증폭기의 사용이 지원된다. UART는 디버깅 목적으로 제공된다.

지원되는 오디오 코덱들


  • MP3(MPEG layer III) 포맷 지원됨 (자세한 내용은 데이터시트 참조)
  • WMA(Windows Media Audio) 포맷 지원됨 (자세한 내용은 데이터시트 참조)
  • RIFF WAV 포맷 지원됨 (자세한 내용은 데이터시트 참조)
  • MIDI 포맷 지원됨 (자세한 내용은 데이터시트 참조)


VS1003의 데이터 흐름

Data Flow of VS1003

우선, 오디오 데이터에 따라, 그리고 제공되는 ADPCM 인코딩 모드는 설정하지 않고, MP3, WMA, PCM WAV, IMA ADPCM WAV, 또는 미디 데이터는 수신되고 SDI 버스로부터 디코드된다.

디코딩 후 SCI_AIADDR이 0이 아니면 응용프로그램 코드는 주소 지점부터 레지스터까지 실행된다.

그뒤 데이터는 SCI_BASS 레지스터에 따라 BASS와 Treble 강화로 보내질수도 있다.

신호가 볼륨 제어 유닛에 공급된 후 그것은 데이터를 오디오 FIFO에 복사도 한다.

오디오 FIFO는 오디오 인터럽트에 의해 읽은 데이터를 잡고 샘플 비율 컨버터와 DAC들에 공급한다. 오디오 FIFO의 크기는 2048 스테레오(2x16비트)샘블이나 8KiB이다.

샘플 비율 컨버터는 모든 다른 샘플 비율을 XTALI/2나 샘플 비율 사용가능한 최대 128배로 변환한다.


시리얼 데이터 인터페이스(SDI)

시리얼 데이터 인터페이스는 압축된 MP3나 WMA데이터, WAV PCM이나 미디데이터같은 ADPCM 데이터전송을 위해 의미된다.

디코더의 입력이 무효이거나 미리 충분히 수신되지 않았다면 아날로그 출력은 자동으로 소음처리 된다.

또한 몇몇의 다른 시험은 SDI를 통해 활성화 될 수 있다.


시리얼 제어 인터페이스(SCI)

시리얼 제어 인터페이스는 SPI 버스 스펙과 호환된다. 데이터 전송은 항상 16비트이다. VS1003은 인터페이스의 레지스터 쓰기와 읽기로 제어된다.

제어 인터페이스의 주 제어들

  • 동작 모드, 클럭과 포함된 효과의 제어
  • 상태 정보와 헤더 데이터의 접근
  • 인코드된 디지털 데이터 접근
  • 사용자 프로그램의 업로딩


SCI 레지스터들

1) 이것은 이 레지스터에 쓰기 후 DREQ가 low로 유지되는 가장 나쁜 경우의 시간이다.
2) 추가적으로, 사용자 응용프로그램 루틴에서 주기 소모는 카운트 되어져야 한다.
3) 펌웨어는 이 레지스터의 값을 0x38로 바로 변경하고 100ms 안에 0x30으로 변경한다.

참고: SCI 쓰기가 완료되었을 때 DREQ가 low이면, DREQ는 SCI 쓰기 처리 후에도 low로 유지한다.

SCI_MODE (RW)

SCI_MODE는 0x0800(SM_SDINEW 설정)으로 VS1003과 기본 운영을 제어하기 위해 사용된다.
SM_DIFF가 설정되어 있을때, 재생기는 좌측 채널 출력을 반전시킨다. 스테레오 입력을 위해 이것은 가상 서라운드를 생성하고 모노 입력을 위해 이것은 다른 좌우 신호를 생성한다.

소프트웨어 리셋은 SM_RESET를 1로 설정하는 것에 의해 초기화된다. 이 비트는 자동으로 클리어된다.

WAV, WMA나 미디 파일을 중간에 디코딩을 멈추고싶다면 SM_OUTOFWAV를 설정하고 SM_OUTOFWAV가 클리어될 때까지 DREQ를 기리는 데이터를 전송한다. SCI_HDAT1도 클리어될 것이다. WMA와 미디를 위해 스트림을 계속 전송하기 위해 가장 안전하다.

SM_PDOWN 비트는 VS1003을 소프트웨어 전원다운 모드로 들어가게 설정한다.

SM_TESTS를 설정하면 SDI tests는 허용된다.

SM_STREAM은 VS1003의 스트림 모드를 활성화 한다. 이 모드에서 데이터는 가능한 간격마다 보내져야 하고 512바이트보다 작은 블럭으로 선택되어져야 하고, VS1003은 플레이백 속도보다 5%정도 더 빠른 변경에 의해 입력 버퍼가 반을 유지할 수 있도록 계속 시도한다. 최상의 소리의 질을 위해 평균속도 오류는 0.5% 미만이어야 하고 비트레이트는 160kbit/s를 넘지 않고, VBR는 사용되지 않아야 한다.

SM_DACT는 SDI를 위한 데이터 클럭의 활성엣지를 정의한다. '0'일 때 데이터는 오름 엣지에서 읽고, 1일 때 데이터는 내림 엣지에서 읽는다.

SM_SDIORD가 클리어일 때, SDI의 바이트들은 기본 MSb 우선처럼 보내진다.

SM_SDISHARE 설정은 SCI와 SDI가 같은 칩 선택을 공유하도록 만든다.

SM_ADPCM과 SM_RESET이 동시에 활성화 됨에 의해 사용자는 IMA ADPCM 녹음 모드를 활성화 할 것이다.

SCI_STATUS (RW)

SCI_STATUS는 VS1003의 현재 상태 정보를 포함하고 오디오 결함 없이도 칩을 사용자 셧다운 한다.
SS_VER은 VS1001은 0, VS1011은 1, VS1002는 2, VS1003는 3이다.

SS_APDOWN2는 아날로그 드라이버 전원다운을 제어한다. 일반적으로 이 비트는 시스템 펌웨어에 의해 제어된다. 그러나 사용자가 VS1003을 최소한의 전원오프로 전원다운을 원한다면 이 비트를 1로 켜고 리셋이 동작하기 전까지 몇 밀리초를 기다린다.

SS_APDOWN1은 내부 아날로그 전원다운을 제어한다. 이 비트는 시스템 펌웨어에서만 사용된다.

SS_AVOL은 아날로그 볼륨제어(0 = -0 dB, 1 = -6 dB, 3 = -12 dB)이다. 이 레지스터는 시스템 펌웨어에 의해서만 자동적으로 사용된다.

SCI_BASS (RW)

Bass 강화 VSBE는 강력한 bass 부스팅 DSP 알고리즘이다. 그것은 원인 규명 없이 사용자 이어폰의 대부분의 출력을 취하는 것을 시도한다.

VSBE는 SB_AMPLITUDE가 0이 아닐 때 활성화된다. SB_AMPLITUDE는 .......


SCI_CLOCKF (RW)

SCI_CLOCKF의 동작은 VS1003과 VS1001, VS1011, VS1002가 다르다.


SCI_DECODE_TIME (RW)

정당한 데이터가 디코딩될 때, 현재 디코드된 시간은 이 레지스터에 총 초로 보여진다.

사용자가 이 레지스터의 값을 변경할 수 있다. 이 경우 새로운 값은 두번 쓰여져야 한다.

SCI_DECODE_TIME은 모든 소프트웨어 리셋이나 WAV(PCM 또는 IMA ADPCM), WMA, 또는 미디 디코딩 시작과 끝으로 리셋한다.


SCI_AUDATA (RW)

정당한 데이터가 디코딩될 때, 현재 샘플레이트와 채널의 개수는 SCI_AUDATA의 0과 15:1 비트에서 찾을 수 있다. 15:1 비트는 2로 나누어진 샘플레이트를 포함하고, 0비트는 모노는 0이고 스테레오는 1이다. SCI_AUDATA에 쓰는 것은 직접적으로 샘플레이트를 변경할 것이다.

  • 예를들어
    • 44100 Hz 스테레오 데이터는 0xAC45 (44101)
    • 11025 Hz 모노 데이터는 0x2B10 (11025)
    • 11025 Hz 스테레오 데이터는 0x2B11 (11026)
  • 0xAC80을 쓰는 것은 샘플레이트를 44160 Hz로 설정하고 스테레오 모드는 변경하지 않는것이다.


SCI_WRAM (RW)

SCI_WRAM은 응용프로그램과 데이터를 명령과 데이터 램에 업로드 하기위해 사용된다. 시작 주소는 SCI_WRAM의 첫 읽기/쓰기 이전에 SCI_WRAMADDR에 쓰기로써 초기화되어져야 한다.


SCI_WRAMADDR (W)

SCI_WRAMADDR은 뒤따르느 SCI_WRAM 읽기/쓰기를 위해 프로그램 주소를 설정하기 위해 사용된다. 0의 주소 옵셋은 X에 사용되고, 0x4000은 Y에, 0x8000은 명령 메모리에 사용된다. 주변 레지스터들도 접근될 수 있다.

SCI_HDAT0 와 SCI_HDAT1 (R)

WAV 파일에서 SCI_HDAT0와 SCI_HDAT1은 각각 0x7761과 0x7665를 읽는다.

WMA 파일에서 SCI_HDAT1은 0x574D이고 SCI_HDAT0는 초당 바이트의 데이터 속도 측정이다. 파일의 비트레이트를 가져오기 위해 SCI_HDAT0의 값에 8을 곱한다.

MIDI 파일에서 SCI_HDAT1은 0x4D54이고 SCI_HDAT0은 다음의 표의 값을 따른다.

MP3 파일에서 SCI_HDAT[0...1]은 다음 표를 참고

읽을 때, SCI_HDAT0와 SCI_HDAT1는 현재 디코딩중인 MP3 스트림에서 추출된 헤더 정보를 포함한다.

SCI_HDAT0의 "샘플레이트"는 다음표를 참고

HDAT0에서 "비트레이트"는 다음 표 참고

SCI_AIADDR (RW)

SCI_AIADDR은 SCI_WRAMADDR과 SCI_WRAM 레지스터로 미리 쓰여진 응용프로그램 코드의 시작 주소를 표시한다. 응용프로그램 코드가 사용되지 않으면 이 레지스터는 초기화되지 않거나 0으로 초기화되어진다.


SCI_VOL (RW)

SCI_VOL은 재생기 하드웨어를 위한 볼륨 제어이다. 각 채널은 최대 볼륨 단계로부터 감쇠되어(0.5 dB 단계) 설정되어진 0에서 254 범위 안의 값으로 정의될 수 있다. 왼쪽 채널 값은 256으로 곱해지고 값에 더해진다. 따라서 최대 볼륨은 0에서 0xFEFE이다.

예를 들어:
  왼쪽 채널에는 -2.0 dB의 볼륨이고 오른쪽 채널에는 -3.5 dB이면 (4*256) + 7 = 0x407

참고: SCI_VOL에 0xFFFF로 설정은 아날로그 파워다운 모드가 활성화 될 것이다.


SCI_AICTRL[x] (RW)

SCI_AICTRL[x] 레지스터들 (x는 0에서 3)은 사용자의 응용프로그램에 접근하기 위해 사용될 수 있다.



운영

클럭

VS1003은 하나의 일반적인 12.288 MHz 기본적인 주파수 마스터 클럭으로 동작한다. 이 클럭은 외부 회로(XTALI 핀에 연결되어진)나 내부 클럭 발진 인터페이스 (XTALI 핀과 XTALO)에 의해 생성되어질 수 있다.

하드웨어 리셋

XRESET 신호가 low로 떨어질 때 VS1003은 초기화되고 모든 제어 레지스터와 내부 상태는 초기값으로 설정된다.

소프트웨어 리셋

디코더 소프트웨어의 몇몇 경우 리셋이 될 수 있다. 자세한건 데이터시트 참조

ADPCM 녹음

이번에는 IMA ADPCM 포맷으로 RIFF/WAV 파일을 어떻게 생성하는지 설명한다. 이것은 넓게 지원되는 ADPCM 포맷과 많은 PC 오디오 재생 프로그램이 그것을 재생할 수 있다. IMA ADPCM 녹음은 4:1의 압축비율과 16비트 오디오이다. 이것은 32.44 kbit/s의 8 kHz 오디오 녹음을 가능하게 만든다.

자세한건 데이터시트 참조.

SPI 부트

GPIO0이 부트 시에 풀업 저항으로 1로 설정되면, VS1003은 외부 SPI 메모리로 부트를 시도한다.

재생 / 디코드

이것은 VS1003의 일반 동작 모드이다. SDI 데이터는 디코드된다. 디코드된 샘플은 내부 DAC에 의해 아날로그로 변환된다. 디코드된 데이터가 없으면 SCI_HDAT0과 SCI_HDAT1은 0으로 설정되고 아날로그 출력은 묵음처리된다.

PCM 데이터 공급하기

VS1003은 WAV 파일 헤더를 전송함에 의해 PCM 디코더처럼 사용될 수 있다. WAV 파일의 길이를 0이나 0xFFFFFFF으로 전송하면 VS1003은 PCM 모드로 무기한 기다릴 것이다. (또는 SM_OUTOFWAV 가 설정될 때까지). 8비트나 16비트 연속된 오디오는 모노나 스테레오로 지원될 것이다.

SDI 시험

VS1003에는 사용자가 메모리 시험을 행하거나 SCI 버스 시험, 그리고 몇몇 다른 사인 파 시험처럼 몇몇 시험 모드가 있다.
모든 시험들은 비슷한 방법으로 시작된다. VS1003은 하드웨어 리셋하고 SM_TESTS 를 설정하고 시험 명령은 SDI 버스로 보낸다. 각 시험은 0이 4개 따라오는 4 바이트 특별 명령 순서 전송에 의해 시작된다.

Sine 시험

Sine 시험은 8바이트 순서 0x53 0xEF 0x6E n 0 0 0 0으로 초기화 되고 n은 다음과 같이 정의 된다.
출력을 위한 sine의 주파수는 F = F_s x S / 128로 계산될 수 있다.
예를들어: Sine 시험이 126 (0b01111110) 값으로 활성화 된다. n을 각각의 콤포넌트로 쪼개면 F_s I dx = 0b011 = 3 이고 따라서 F_s = 22050Hz, S = 0b11110 = 30이고, 그러므로 최종 sine 주파수 F = 22050Hz x 30 / 128 은 약 5168Hz 이다.

sine 시험 종료는 0x45 0x78 0x69 0x74 0 0 0 0 을 순서대로 전송한다.

핀 시험

핀 시험은 8바이트 0x50 0xED 0x6E 0x54 0 0 0 0의 순서로 활성화된다. 이 시험은 칩 제품 시험만을 위한 것이다.

메모리 시험

메모리 시험모드는 8 바이트 0x4D 0xEA 0x6D 0x54 0 0 0 0으로 초기화된다. 이 순서 후 500000 클럭 사이클동안 기다린다. 결과는 SCI 레지스터 SCI_HDAT0으로부터 읽을 수 있고 'one' 비트들은 다음처럼 해석된다.
메모리 시험들은 RAM 메모리의 현재 내용들을 덮어쓴다.

SCI 시험

SCI 시험은 8바이트 0x53 0x70 0xEE n 0 0 0 0으로 초기화된다. n은 시험하기 위한 레지스터 숫자이다. 주어진 레지스터의 내용은 읽거나 SCI_HDAT0으로 복사된다. 테스트 된 레지스터가 HDAT0이면 결과는 SCI_HDAT1에 복사된다.


VS1003 레지스터들

VS1003 메모리 지도

사용자 메모리 지도

SCI 레지스터들


시리얼 데이터 레지스터들


DAC 레지스터들


GPIO 레지스터들


인터럽트 레지스터들


INT_ENABLE은 인터럽트를 제어한다. 제어 비트는 다음과 같다

A/D 모듈레이터 레지스터들


UART

레지스터들


UARTx_STATUS 상태

상태 레지스터로부터의 읽음은 송신자와 수신자 상태를 반환한다.

UART_ST_RXORUN은 수신자 밀어내기 레지스터로부터 데이터 레지스터에 전송되었을 때 읽지않은 데이터를 받은 바이트가 덮어쓰면 설정된다. 다른 경우에 클리어된다.

UART_ST_RXFULL은 데이터 레지스터에 읽지 않는 데이터가 있으면 설정된다.

UART_ST_TXFULL은 데이터 레지스터로 쓰기가 허용되지 않으면 설정된다. (데이터 레지스터라 꽉참)

UART_ST_TXRUNNING는 전송자 밀어내기 레지스터가 동작중이면 설정된다.

데이터 UARTx_DATA

UARTx_DATA로부터 읽기는 7:0 비트들은 수신된 바이트, 15:8 비트들에는 0을 반환한다. 읽은 더 이상의 데이터가 없으면 수신자 데이터 레지스터 꽉참 표시는 클리어될 것이다.

수신 인터럽트는 바이트가 수신자 밀어내기 레지스터로부터 수신자 데이터 레지스터로 이동되었을 때 생성될 것이다.

UARTx_DATA에 쓰기는 전송을 위한 바이트를 설정한다. 데이터는 7:0비트들이 가지게되고 다른 비트들은 무시된다. 송신자가 대기상태이면 바이트는 바로 전송 밀어내기 레지스터에 이동되고 전송 인터럽트 요청은 생성되고 전송은 시작된다. 송신자가 바쁘면 UART_ST_TXFULL이 설정되고 이전에 보내진 바이트가 처리될 때까지 바이트는 송신자 데이터 레지스터에 남는다.

데이터 High UARTx_DATAH


분리자 UARTx_DIV








2016년 6월 8일 수요일

ESP8266 기반의 아두이노용 시리얼 와이파이 쉴드 (ESP8266-Based Serial WiFi Shield for Arduino)

소개

ESP8266 기반의 아두이노용 시리얼 와이파이 쉴드는 Shenzhen Doctors of Intelligence & Technology(SZDOIT)에 의해 개발되고 만들어졌다.

특징


1. 와이파이 모듈은 산업 등급의 칩 ESP8266이고, 그것은 간섭에 강한 메탈로 보호된 ESP-12E이다.

2. 쉴드는 아두이노 우노나 메가 2560이나 다른 보드들에 핀이 적합하다. 전압 변환 칩은 3.3V(ESP8266용)과 5V(아두이노용)을 전환하는데 사용된다.

3. 이중 DIP 스위치는 이 모듈 쉴드가 아두이노 우노 확장보드처럼 단독으로 사용될 수 있거나 ESP8266 확장 보드처럼 사용될 수 있도록 시리얼 포트를 위해 사용된다.

4. 시리얼 데이터는 와이파이 장치에 그대로 전송되거나 그 반대이다. 아두이노 프로그램은 다른 설정을 필요로하지 않는다.

5. 웹서버는 와이파이 파라미터와 시리얼 포트 파라미터를 설정하는 것으로 개발된다.

6. 모듈 쉴드는 독립된 ESP8266 개발 보드로 사용될 수 있다. 예를 들어, official AT 명령 펌웨어 다운로드는 NodeMCU 공개 소스 펌웨어가 사용될 수 있다.

7. 모듈 쉴드는 또한 아두이노 우노를 위한 독립적인 확장 보드처럼 사용될 수 있다.

시리얼 와이파이 모듈 확장 보드나 드라이버 보드 정보에 대한 더 많은 참조는 다음을 참고하라. http://www.doit.am 또는 http://www.smartarduino.com


기술 명세

  • 802.11 b / g / n 무선 표준
  • STA / AP 모드 지원
  • TCP / IP 프로토콜 스택, 하나의 소켓
  • 표준 TCP / UDP 서버와 클라이언트 지원
  • 직렬 포트 보레이트 설정 지원
    • 1200 / 2400 / 4800 / 9600 / 19200 / 38400 / 57600 / 74800 / 115200 bps
  • 직렬 데이타 bit : 5 / 6 / 7 / 8 bit들 지원
  • 직렬 패리티 : none 지원
  • 직렬 스탑 bit는 1 / 2 bit 지원
  • 아두이노 우노나 메가에 핀 호환
  • 아두이노 핀 출력은 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13
  • ESP8266 GPIO 핀 출력
    • 0 / 2 / 4 / 5 / 9 / 10 / 12 / 13 / 14 / 15 / 16
    • ADC / EN / UART TX / UART RX
  • KEY 버튼 : 모드 설정
  • 이중 DIP 스위치 : 아두이노와 ESP8266 스위칭
  • 와이파이 운영 전류
    • 계속적인 전송 운영 : 70mA (최대 200mA)
    • 유휴 모드 : 200uA 미만
  • 직렬 와이파이 전송 비율 : 110 ~ 460800bps
  • 온도 : -40도씨 ~ +125도씨
  • 습도 : 10% ~ 90% 비압축
  • 무게 : 약 20g (0.7oz)

크기




인터페이스 정의

이 시리얼 와이파이 모듈 보드는 PCB view에 보는 것처럼 인터페이스를 제공한다. 그리고 각 핀 기능들은 회로 보드에 다음과 같이 실크 인쇄되어 있다.
부분 기능 표시
Arduino G Ground
D Digital IO
A Analog IO
5V 5V
TX Arduino Uno TX Connection with ESP8266
RX Arduino Uno RX Connection with ESP8266
SCL Arduino SCL
SDA Arduino SDA
ESP8266 G Ground
D Digital IO
3V3 3.3V
RX0 ESP8266 RX0 아두이노와 연결
TX0 ESP8266 TX0 아두이노와 연결
EN ESP8266 EN
AD ESP8266 AD
RST ESP8266 reset
KEY ESP8266 WiFi 설정
SW ESP8266과 아두이노 아두이노를 IDE로 프로그래밍 할 때,
SW1 스위치는 OFF위치로 하라.


LED 정의

ESP8266 기반의 시리얼 와이파이 쉴드는 두개의 LED가 있다. 빨강 LED는 전원 공급에 할당되어있다. 파랑 LED는 여러 기능 LED이고, 그 기능은 다음처럼 설명된다.

연속적으로 4번 깜빡임 데이터 통신
0.5초마다 한번 깜빡임 설정 모드
1초마다 한번 깜빡임  STA모드로 라우터에 연결중
켜져 있음 AP/STA 일하는중 모드



빠른 시작

이 섹션은 시리얼 와이파이 투명 통신을 달성할 수 있도록 ESP8266 기반의 시리얼 와이파이 쉴드를 빠르게 설정하기 위해 두 예제를 사용한다.

준비 작업: 와이파이 작업 모드로 설정

시리얼 와이파이 쉴드의 공장 기본 작업 모드는 설정 모드이다. 투명 통신 설정을 먼저 수행해야 한다.
주의: 만약 쉴드가 다른 작업 모드에서 운영하는 것으로 설정되었다면 모듈쉴드는 다음의 방법을 통해 설정모드에 들어갈 수 있다. 하나는 KEY 버튼을 1초 이상 누른다. 다른 하나는 "!@!"를 시리얼 포트를 통해서 시리얼 와이파이 쉴드에 보낸다.

단계 1: 시리얼 와이파이 쉴드 전원을 넣고 화이파이 신호를 찾는다. SSID는 "DoitWiFi_Config"이고 패스워드는 "12345678" 이다.


단계 2: 브라우저를 열고 와이파이 IP 주소 192.168.4.1에 접속한다. 설정 페이지는 다음처럼 보여진다.

시리얼 와이파이 쉴드에 포함된 웹서버는 시리얼 파라미터 설정과 네트워크 파라미터 설정을 지원한다. 그리고 또 자동과 수동 AP Scan을 지원한다.

단계 3: "submit"을 누른다.


서브미션 후 시리얼 와이파이 쉴드는 자동적으로 AP 모드로 재부팅 할 것이고 다음처럼 설정된다.
시리얼 포트 파라미터는 9600, n, 8, 1
    WiFi 작업 모드 : AP
    SSID : "DoitWiFi_Ser2Net"
    패스워드 : "12345678"
    TCP 서버 포트는 9000

예제 1 : 와이파이 통신에 아두이노

단계 1 : 시리얼 와이파이 쉴드를 아두이노 우노 보드에 꽂는다. 두 DIP 스위치를 "OFF" 위치로 하여 ESP8266과 아두이노의 시리얼 포트 연결을 끊는다.


(주의 : IDE로 아두이노 프로그램을 다운로딩 할 때, 아두이노 시리얼 포트는 사용되지 않도록 한다. 아두이노 우노는 프로그램 다운로딩을 위한 시리얼 포트가 하나만 있다. 이중 포트 스위치를 OFF 위치로 하는 이유는 ESP8266의 시리얼 포트를 연결끊기 위해서이다.)

단계 2 : 아두이노 우노 프로그램 예제 코드


1.    void setup()
2.    {
3.      Serial.begin(9600);
4.    }
5.    void loop()
6.    {
7.       delay(1000);
8.       Serial.println("hello ESP8266 WiFi"); //output the serial data
9.    }


단계 3 : 이중 스위치를 ON 위치로 한다. ESP8266은 아두이노 우노에 연결된다.


단계 4 : 모바일 폰이나 컴퓨터로 와이파이 신호 "DoitWiFi_Ser2Net"를 찾는다. 와이파이 패스워드는 "12345678"이다.


단계 5 : TCP / UDP 디버깅 소프트웨어를 실행한다.

소프트웨어 다운로드 링크 : http://bbs.doit.am/forum.php?mod=viewthread&tid=174&page=1&extra=#pid206)


연결이 성공하면 소프트웨어는 시리얼 와이파이 쉴드로부터 1초마다 데이터가 전송되는 것을 보여진다. 따라서 아두이노는 시리얼 데이터를 네트워크로 보낼 수 있다.


예제 2 : 원격 서버로 통신

여기서, 예제를 완수하기 위해 Doit 무료 공공 와이파이 네트워크 TCP 툴이 사용된다.

단계 1 : TCP 서버로부터 임의의 IP 주소와 포트를 가져온다. 여기 포함된 IP 주소는 "115.29.109.104" 와 포트번호 "6533" 이다.

(참고 : IP 주소와 포트번호는 http://tcp.doit.am 에 포함될 수 있다)

단계 2 : 시리얼 와이파이 쉴드에 전원을 공급하고 설정 모드로 들어간 후 KEY 버튼을 1초 이상 누른다. "DoitWiFi_Config" 이름의 SSID에 "12345678" 패스워드로 연결한다. 그리고 브라우저에서 "192.168.4.1"에 들어간다.


단계 3 : 무선 라우터에 연결하기 위해 시리얼 와이파이 쉴드를 node 모드(STA 모드)로 설정한다.

    "WiFi Mode" : STA;
여기서 무선 라우터 이름은 "MIFI_A6_cd1c"이고 패스워드는 "mifi66666666"이다.

웹서버는 페이지를 로딩할 때 현재 ESP8266에서 검색된 AP 리스트를 자동적으로 갱신할 것이다. "STA"를 선택했을 때, "Refresh" 버튼은 와이파이 검색 결과를 갱신하기 위해 활성화 된다.

단계 4 : 네트워크 파라미터 설정

    소켓 형식 : "Client"
    전송 형식 : "TCP"
    원격 IP : "115.28.109.104"
    원격 포트 : "6533"

단계 5 : "Submit" 누름


단계 6 : TCP/UDP 디버그 소프트웨어를 실행한다. TCP Cliend 연결을 수립. 목적 IP 주소는 115.29.109.104, 포트번호는 6533이다. Local 포트는 "Auto"로 설정했다.


단계 7 : 소프트웨어는 무선 라우터를 통해 시리얼 와이파이 쉴드로부터 전송된 데이터를 보여준다. 그러므로 아두이노는 시리얼 데이터를 STA 모드에서 네트워크로 보낼 수 있다.




설정 소개

작업 모드 변경

시리얼 와이파이 쉴드의 작업 프로세스

직렬 파라미터 설정



와이파이 모드 설정

시리얼 와이파이 쉴드의 작업 모드는 AP와 STA 모드를 포함한다. 웹서버에서 AP 모드가 선택된 경우 "refresh" 와 "AP List" 버튼은 버려질 것이다. 그러나 SSID와 패스워드는 설정된다.
STA 모드가 선택되었으면 "refresh"와 "AP List" 버튼은 활성화 될 것이다. "Refresh"는 다른 와이파이 신호를 검색하기 위해 사용될 것이고, 검색된 결과는 "AP List"에 보여질 것이다.
시리얼 와이파이 쉴드가 STA 모드일 때, 그것은 설정된 무선 라우터에 연결되거나 모드가 설정될 때까지 항상 연결을 시도할 것이다.

네트워크 설정

네트워크 설정은 서버나 클라이언트처럼 설정할 수 있다. 와이파이 확장 모듈은 동시에 하나의 소켓만 지원한다.
서버 모드가 설정된 경우 "Remote IP"는 비활성화 된다. 그리고 수신 포트번호는 "Local Port"로 채워질 것이다.
클라이언트 모드가 설정된 경우 "Remote IP"는 활성화된다. "Remote IP"와 "Remote Port"는 채워져야 한다.
시리얼 와이파이 쉴드는 TCP와 UDP 무선 프로토콜을 지원한다.

공장 기본

웹서버에서 "FactoryDefault"는 기본 설절을 재설정 하기 위해 사용된다. (시리얼 와이파이 쉴드가 STA 모드이면, 설정 모드에 들어가기 위해 KEY 버튼을 눌러라.) 기본 설정은 다음과 같다.