2020년 3월 10일 화요일

USB 공부


인터페이스와 속도 비교
인터페이스
유형
연결개수(최대)
거리(최대)
속도(최대 bps)
일반적인 용도
USB 3.1
이중 단방향 (dual simplex) 직렬
버스당 127
1(5 허브 사용 시 5)m
10G
이동식 대용량 저장장치, 비디오
USB 3.0
이중 단방향 직렬
버스당 127
2(5 허브 사용시 10)m
5G
이동식 대용량 저장장치, 비디오
USB 2.0
반 이중 (half duplex) 직렬
버스당 127
5(5허브 사용시 30)m
1.5M, 12M, 480M
키보드, 마우스, 디스크 드라이브, 스피커, 프린터, 카메라
CAN 버스
직렬
다양한 하드웨어
500 @125kbps
1M @40m
자동차
eSATA
직렬
2(포트 확장 시 16)
2
6G
디스크 드라이브
이더넷
직렬
1024
500, 속도에 따라 다름, 광통신 이용 시 더욱 원거리 통신이 가능
10G
범용 네트워크 통신
IEEE-1394
(파이어와이어(FireWire))
직렬
64
100
3.2G
비디오, 이동식 대용량 저장장치
IEEE-488 (GPIB)
병렬
15
20
8M
산업용 장비
I2C
동기식 직렬
1007
부하와 속도에 따라 다양함
3.4M
임베디드 시스템, 범용
마이크로와이어(Microwire)
동기식 직렬
8
3
2M
임베디드 시스템, 범용
미디(MIDI)
직렬식 커런트 루프(current loop)
2(MIDI 쓰루 포트로 확장 가능)
15
31.25k
음악, 무대 제어
병렬 프린터 포트
병렬
2(데이지 체인 지원시 8)
3 ~ 10
16M
프린터, 스캐너, 디스크 드라이브
RS-232
(EIA/TIA-232)
비동기 직렬
2
15 ~ 30
20k (특수 목적 하드웨어 사용시 고속 통신 가능)
임베디드 시스템, 범용
RS-485
(TIA/EIA-485)
비동기 직렬
32 단위 부하(하드웨어에 따라 256개까지 확장 가능)
1200
10M
데이터 수집 및 제어 시스템
SPI
동기식 직렬
하드웨어에 따라 다양함
부하와 속도에 따라 다양함
2M 또는 하드웨어에 따라 고속 통신 가능
임베디드 시스템, 범용
썬더볼트 (Thunderbolt)
전이중(full duplex) 직렬
7
3m(구리선), 100m(광통신)
10G(v1), 20G(v2)
이동식 대용량 저장장치, 비디오


USB 트랜잭션 관련 정보
패킷 유형
PID
(이진)
사용되는 전송방식
소스
버스 속도
설명
토큰
(트랜잭션 형식 식별)
OUT
0001
전부
호스트
전부
OUT 트랜잭션용 디바이스, 엔드포인트 주소
IN
1001
전부
호스트
전부
IN 트랜잭션용 디바이스, 엔드포인트 주소
SOF
0101
프레임 시작
호스트
전부
프레임 시작 마커와 프레임 번호
SETUP
1101
제어
호스트
전부
SETUP 트랜잭션용 디바이스, 엔드포인트 주소
데이터
(데이터와 상태 코드 전송)
DATA0
0011
전부
호스트,
디바이스
전부
데이터 토글 또는 데이터 PID 시퀀싱
DATA1
1011
전부
호스트,
디바이스
전부
데이터 토글 또는 데이터 PID 시퀀싱
DATA2
0111
등시성
호스트,
디바이스
하이
데이터 PID 시퀀싱
MDATA
1111
등시성,
분할 트랜잭션
호스트,
디바이스
하이
데이터 PID 시퀀싱
핸드셰이크
(상태 코드 전송)
ACK
0010
제어, 벌크,
인터럽트
호스트,
디바이스
전부
수신 측에서 데이터 패킷을 에러 없이 받았음
NAK
1010
제어, 벌크,
인터럽트
디바이스
전부
수신 측에서 데이터를 받지 못했거나 송신 측이 데이터를 보내지 못했거나 전송할 데이터가 없음
STALL
1110
제어, 벌크,
인터럽트
디바이스
전부
지원하지 않는 제어 리퀘스트이거나 엔드포인트가 멈췄음
NYET
0110
제어 쓰기,
벌크 OUT,
분할 트랜잭션
디바이스
하이
디바이스가 데이터 패킷을 에러 없이 수신했으나, 추가 데이터에 대해서는 준비되지 않음. 또는 허브가 분할 데이터를 완전히 처리하지 못함
특수
PRE
1100
제어,
인터럽트
호스트
다음 패킷이 로우스피드라는 것을 식별할 수 있도록 호스트가 선행해서 만들어냄(로우/풀 스피드 구간에서만 사용)
ERR
1100
전부
허브
하이
분할 트랜잭션에서 로우/풀 스피드 에러를 보고하기 위해 허브가 반환(하이스피드 구간에서만 사용)
SPLIT
1000
전부
호스트
하이
분할 트랜잭션을 나타내는 토큰 패킷 앞에 옴
PING
0100
제어 쓰기,
벌크 OUT
호스트
하이
NYET 후에 벌크 OUT, 제어 쓰기 데이터 트랜잭션용 BUSY 체크
EXT
0000
-
호스트
전부
프로토콜 확장 토큰


일반적인 USB 2.0 순서

  1. 시스템이 새 디바이스를 갖는다.
  2. 허브가 디바이스를 감지한다.
  3. 호스트가 새 디바이스 정보를 얻는다.
  4. 허브는 디바이스가 풀스피드인지 로우스피드인지 감지한다.
  5. 허브가 디바이스를 리셋한다.
  6. 호스트는 풀스피드 디바이스가 하이스피드도 지원하는지 확인한다.
  7. 허브는 디바이스와 버스 사이의 신호 경로를 설정한다.
  8. 호스트는 Get Descriptor 리퀘스트를 보내 기본 파이프의 최대 패킷 크기를 알아낸다.
  9. 호스트가 주소를 할당한다.
  10. 호스트는 디바이스 기능에 관한 정보를 읽어온다.
  11. 호스트가 디바이스에게 추가 정보를 요청한다.
  12. 호스트가 디바이스 드라이버를 할당하고 메모리로 가져온다(혼성 디바이스는 예외)
  13. 호스트 디바이스 드라이버가 컨피규레이션을 선정한다.

디바이스 디스크립터
Offset
필드
크기
설명
0
bLength
1
디스크립터 바이트 크기(0x12)
1
bDescriptorType
1
상수 값 DEVICE(0x01)
2
bcdUSB
2
USB 규격 릴리스 번호(BCD)
4
bDeviceClass
1
클래스 코드
5
bDeviceSubClass
1
서브클래스 코드
6
bDeviceProtocol
1
프로토콜 코드
7
bMaxPacketSize0
1
엔드포인트 0의 최대 패킷 크기
8
idVendor
2
Vendor ID
10
idProduct
2
Product ID
12
bcdDevice
2
디바이스 릴리스 번호(BCD)
14
iManufacturer
1
제조사에 대한 문자열 디스크립터 인덱스
15
iProduct
1
제품에 대한 문자열 디스크립터 인덱스
16
iSerialNumber
1
일련번호에 대한 문자열 디스크립터 인덱스
17
bNumConfigurations
1
가능한 컨피규레이션 개수


















참조 : [도서] USB 완전정복 






2019년 3월 2일 토요일

[칩공부] (VLSI Solution) VS1063a

MP3 / OGG VORBIS 엔코더 & 오디오 코덱 회로

주요 특징

  • 엔코더들
    • MP3
    • Ogg Vorbis
    • PCM
    • IMA ADPCM
    • G.711 (u-law, A-law)
    • G.722 ADPCM
  • 디코더들
    • MP3 (MPEG 1 & 2 audio layer III (CBR + VBR + ABR))
      • CBR - 고정 비트레이트
      • VBR - 가변 비트레이트
      • ABR - 평균 비트레이트
    • MP2 (layer II) (옵션)
    • MPEG4 / 2 AAC-LC(+PNS)
    • HE-AAC v2 (Level 3) (SBR + PS)
    • Ogg Vorbis
    • FLAC
    • WMA 4.0/4.1/7/8/9 all profiles (5~384 kbps)
    • WAV (PCM, IMA ADPCM, G.711 u-law/A-law, G.722 ADPCM)
  • 추가적인 AEC(PCM, G.711 (u-law, A-law), G.722 ADPCM, IMA ADPCM)를 포함한 전이중 코덱
  • 스트리밍 지원
  • 사용자 코드와 데이터 용 최대 96 KiB RAM
  • 사용자 코드 보호용 유일 ID
  • 단조로운 Power-On 과 Power-Off
  • 외부 DAC 용 I2S 출력 인터페이스
  • 직렬 제어 및 데이터 인터페이스
  • 단일 처리기나 동시 처리기의 slave로 사용될 수 있음
  • 디버깅 지원용 UART
  • 소프트웨어와 최대 12개의 GPIO 핀으로 새로운 기능이 추가될 수 있음

설명
VS1063a는 사용하기 쉽고, 다목적의 엔코더와 디코더 그리고 다수의 오디오 포맷을 지원하는 코덱이다.
VS1063a는 다음을 포함한다.
  • 고성능
  • 저전력 DSP 코어 VS_DSP
  • 롬 메모리들
  • 내장된 디코더와 동시에 실행되는 사용자 응용프로그램을 위한 16KiB 명령램과 최대 80 KiB의 데이터 램
  • 직렬 제어와 입력 데이터 인터페이스
  • 최대 12개의 다목적 I/O 핀들
  • 하나의 UART
  • 고 퀄리티 스테레오 ADC
  • 가변 샘플레이트 스테레오 DAC
  • 이어폰 증폭기와 공통 전압 버퍼

응용프로그램들
  • MP3-녹음 오디오 재생기
  • 스트리밍 서버와 클라이언트
  • 무선 오디오 전송기
  • 단일 재생기와 녹음기
  • 인터넷 전화기

추가적 특징
  • 이어스피커 특별 처리
  • Bass와 Treble 제어
  • 대안적인 하나의 5-채널 이퀄라이저
  • 스트림을 듣는 동안 A/D 변환기 입력 모니터링이 허용된 AD 믹서
  • 주 스트림을 듣는동안 사이드-스트림 입력이 허용된 PCM 믹서
  • 조정 가능한 속도 쉬프터
  • 단일 12....13MHz 또는 24...26MHz 클럭으로 동작
  • 내부 PLL 클럭 멀리플라이어
  • 저전력 동작
  • 채널간 단계 에러가 없는 고퀄리티 내장된 스테레오 DAC
  • 부드러운 음량 조절을 위한 제로-크로스 검출
  • 30옴 로드 운영의 유능한 스테레오 이어폰 드라이버
  • 아날로그, 디지털, I/O 전원 분리
  • Lead-free RoHS-준수하는 패키지

운영 모드
VS1063a는 동시처리기의 slave나 단일처리기, 두 host 모드 중 하나로 운영한다.
동시처리기의 slave로 사용될 때, VS1063a는 디코더, 엔코더, 코덱 모드의 세가지 다른 운영 모드로 운영할 수 있다.
디코더 모드일 때, VS1063a는 직렬 입력 버스를 통해 입력 비트스트림을 받는다. 입력 스트림은 18비트 디지털 볼륨 제어를 통해 오버샘플링 시그마-델타 DAC로 디코딩되고 전송된다. 디코딩은 직렬 제어 버스를 통해 제어된다. 기본 디코딩에 추가적으로, DSP 효과 같은 특별한 특징 응용프로그램을 사용자 램 메모리에 추가하거나 사용자 응용프로그램을 로드할는 특징을 추가할 수 있다.
인코더 모드에서 VS1063a는 아날로그 입력에서 오디오를 읽습니다. 선택적으로 데이터를 압축하여 호스트 프로세서에서 읽을 수 있다.
코덱 모드에서 VS1063a는 전이중 오디오 인터페이스를 제공합니다.
독립형 프로세서로 사용할 경우 VS1063a는 SPI EEPROM 또는 플래시 메모리에서 부팅 할 수 있다. 대안 적으로, 코드 및 데이터는 호스트 제어기에 의해 제공 될 수있다.


정의
  • ABR - Average BitRate.
    • 스트림의 비트 전송률은 국부적으로 다를 수 있지만, 더 긴 시간 동안 평균을 내면 주어진 숫자에 가깝게 유지된다.
  • B - Byte, 8 bits
  • b - Bit
  • CBR - Constant BitRate.
    • 스트림의 비트 전송률은 각 압축 블록에 대해 동일하다.
  • Ki - Kibi = 2^10 = 1024 (IEC 60027-2)
  • Mi - Mebi = 2^20 = 1048576 (IEC 60027-2)
  • SCI - Serial Control Interface
    • VS1063a 제어를 위한 SPI 버스
  • SDI - Serial Data Interface
    • VS1063a 비트스트림 데이터를 위한 SPI 버스
  • VBR - Variable BitRate.
    • 전송률은 소스 자료의 복잡성에 따라 달라진다.
  • VS_DSP - VLSI Solution의 DSP 코어
  • VSIDE - VLSI 솔루션의 통합된 개발 환경
  • W - Word.
    • VS_DSP에서 명령 워드는 32비트이고 데이터 워드는 16비트 이다.



SPI 버스들
SPI 버스는 VS1063a의 직렬 데이터 인터페이스 SDI와 직렬 제어 인터페이스 SCI 둘 다를 위해 사용된다.

SPI 버스 핀 설명
  • VS10xx Native 모드 (새로운 모드, 추천함)
    • 이 모드는 VS1063a의 SM_SDINEW가 1로 (시작할 때 기본임) 설정되었을 때 동작한다.
    • DCLK와 SDATA는 데이터 전송에 사용되지 않고 GPIO 핀 (GPIO2, GPIO3)으로 사용될 수 있다.
    • BSYNC 기능은 데이터 인터페이스 칩 선택(XDCS)으로 변경
SDI핀 SCI핀 설명
XDCS XCS low일 때 칩 선택 입력으로 동작.
high 레벨은 직렬 인터페이스를 스탠바이 모드로 들어가게 하여, 현재 운영을 종료함.
high 레벨은 직렬 출력(SO)를 하이 임피던스 상태로 만듦
만약 SM_SDISHARE가 1이면 XDCS 핀은 사용하지 않음, 그러나 신호는 XCS 반전에 의해 내부적으로 생성됨.
SCK 직렬 클럭 입력 (Serial Clock Input).
직렬 클럭은 내부적으로 레지스터 인터페이스를 위한 마스터 클럭으로 사용되기도 한다.
SCK는 게이트 되거나 연속적일 수 있다. 두 경우 모두 XCS가 low가 된 후 첫 번째 클럭 에지가 첫 번째 비트를 기록합니다.
SI 직렬 입력 (Serial Input).
칩 선택이 동작하면 SI는 상승 CLK 에지에 샘플된다.
- SO 직렬 출력 (Serial Output).
읽기에서는 데이터가 하강 SCK 에지에서 시프트 아웃된다.
쓰기에서 SO는 하이 임피던스 상태에 있다.
  • VS1001 호환 모드 (새로운 디자인에서는 사용되지 않음) - 설명 생략

데이터 요청 핀 DREQ

  • DREQ 핀 / 신호는 VS1063a의 2048 바이트 FIFO가 데이터를 수신 할 수 있는지 여부를 나타내는 데 사용된다.
  • DREQ가 하이 인 경우 VS1063a는 최소 32 바이트의 SDI 데이터 또는 하나의 SCI 명령을 취할 수 있다.
  • DREQ는 스트림 버퍼가 너무 꽉 차거나 SCI 명령의 지속기간 동안 low로 바뀐다

  • 32 바이트 안전 영역으로 인해 송신기는 DREQ의 상태를 확인하지 않고 한 번에 최대 32 바이트의 SDI 데이터를 전송할 수 있으므로 저속 마이크로 컨트롤러에서 VS1063a를 쉽게 제어 할 수 있다.

  • 참고 : DREQ는 바이트 전송 중에도 언제든지 로우 또는 하이로 바뀔 수 있습니다. 따라서 DREQ는 더 많은 바이트를 보낼 것인지 결정하는 데에만 사용해야합니다. 이미 시작된 전송은 중단 할 필요가 없습니다.
  • 참고 : VS1063a에서는 SCI 작동이 진행되는 동안 DREQ도 저하됩니다.


DREQ가 low일 때 SCI 명령을 보내려는 경우가 있다.
DREQ는 SDI와 SCI간에 공유되므로 SDI가 데이터를 수신 할 준비가되지 않은 경우 SCI 명령이 실행되었는지 확인할 수 없습니다.
이 경우 모든 SCI 명령을 놓친 후에도 지연되지 않도록 확실히 기다려야합니다.
제 10.8 절의 SCI 레지스터 표는 각 SCI 레지스터 쓰기에 대한 최악의 처리 시간을 보여준다.







































2019년 2월 26일 화요일

[STM32 Study] 용어 정리


PWR (Power Controller) - 전력관리 제어기
  • 전원감시기 (power supply supervisor)
    • POR - Power-On Reset : Vpor 이상이면 리셋 해제 (1.72V)
    • PDR - Power-Down Reset : Vpdr 이하이면 리셋 (1.68V)
    • BOR(Brownout Reset) : threshold voltage 감시
    • PVD(Programmable Voltage Detector) : 전원 전압이 지정값 이하로 떨어지면 인터럽트를 발생하는 기능
  • HSE 클록 (High Speed External clock)
    • 외부단자 OSC_IN, OSC_OUT에 4~26 MHz
  • HSI 클록 (High Speed Internal clock)
    • 내부의 RC 오실레이터에 의하여 발생되는 16 MHz의 클록 신호
  • PLL (Phase-Locked Loop) 회로 - 주파수 체배 회로
  • LSE 클록 (Low Speed External clock)
    • 외부단자 OSC32_IN, OSC32_OUT에 32.768 kHz의 낮은 주파수
    • 적은 소비전력으로 정확한 클록 주파수를 발생하여 RTC에 공급하기 위함
    • 외부 클록 신호는 1 MHz까지 사용할 수 있음
  • LSI 클록 (Low Speed Internal clock)
    • 내부의 RC 오실레이터에 의하여 발생되는 32 KHz의 저주파 클록 신호
    • 정지모드나 대기모드에서도 동작
    • IWDG와 RTC에 클록 공급
  • CSS (Clock Security System) - 클록 안전 시스템
    • HSE 오실레이터의 정상 동작 여부를 감시하기 위한 장치



SYSCFG (System Configuration Controller) - 시스템 설정 제어기
  • 몇가지 메모리 영역의 시작번지를 할당하는 메모리 리매핑을 ㅅ러정
  • 특정 핀에 대하여 I2C 통신의 FM+ 모드를 사용할 것인지 여부를 설정
  • GPIO의 단자를 인터럽트 신호선으로 할당하는 내용을 설정
  • 시스템의 안정성을 높이는 기능의 설정

SCB (System Control Block) - 시스템 제어 블록

SysTick (시스틱 타이머)
  • Cortex-M 시리즈 마이크로컨트롤러의 코어에 기본적으로 동일하게 내장된 24비트 타이머
  • 주로 운영체제나 시스템 프로그램이 사용하도록 만들어 놓은 것

NVIC (Nested Vectored Interrupt Controller) - 중첩 및 벡터형 인터럽트 제어기
  • Cortex-M 시리즈 제품의 CPU의 코어에 기본적으로 내장된 인터럽트 제어기
  • 이론적으로 240개의 이터럽트를 지원
  • STM32F767VGT6는 실제로 총 110개의 차단가능 인터럽트를 가짐

EXTI (Externded Interrupt and Event Controller) - 확장 인터럽트 및 이벤트 제어기
  • Cortex-M7의 CPU 코어가 아니라 STM32F767VGT6 마이크로컨트롤러의 주변장치에 해당하는 인터럽트 제어기
  • 내부 또는 외부에서 입력되는 비동기 인터럽트/이벤트 신호를 인식하여 CPU의 인터럽트 제어기 NVIC에게 전달하거나 이벤트를 발생하고 전력 제어기에 wake-up 신호를 전달하기도 함

DBG (디버그 지원 장치)
  • JTAG (Joint Test Action Group)
  • SWD (Serial Wire Debug)
  • SWJ-DP (Serial Wire/JTAG Debug Port)
  • AHP-AP (AHB Access Port)
  • DWT (Data Watchpoint Trigger)
  • FPB (Flash Patch Breakpoint)
  • ITM (Instrumentation Trace Macrocell)
  • ETM (Embedded Trace Macrocell)
  • TPIU (Trace Port Interface Unit)