ENGLISH 简体中文 日本語 한국어  


애플리케이션 노트  3661

MAX3420E 인터럽트 시스템

개요: MAX3420E는 마이크로컨트롤러 등의 SPI 마스터에 USB 주변장치 기능을 추가한다. MAX3420E 동작은 대부분이 인터럽트 요청(IRQ) 비트로 정의되는데 이로써 SPI 마스터에 USB 이벤트가 서비스를 요청한다는 것을 알려준다. 이 애플리케이션 노트에서는 MAX3420E의 인터럽트 시스템 및 인터럽트 요청 비트에 대해 설명한다.

개요

MAX3420E를 SPI 마스터에 연결하여 풀 스피드 USB 주변장치를 구현한다. MAX3420이 낮은 레벨의 USB 시그널링을 관리하는 한편, USB 이벤트가 때때로 주의를 필요로 할 때 SPI 마스터가 여기에 관여해야 한다. MAX3420의 INT 핀은 이러한 주의가 필요한지를 나타내며, SPI 마스터가 14개 인터럽트 요청 비트를 읽어서 어느 인터럽트가 서비스를 요청하는지 판단한다. 이러한 인터럽트 요청(IRQ: Interrupt ReQuest) 비트가 MAX3420E 동작의 대부분을 정의한다.


참고: SPI 마스터는 마이크로컨트롤러, DSP, ASIC 또는 SPI 포트를 구현하고 SCLK 신호를 제공하는 어느 장치나 될 수 있다. 이 애플리케이션 노트에서는 "SPI 마스터"와 "마이크로컨트롤러"를 같은 의미로 사용하고 있다.

MAX3420E 인터럽트 로직

그림 1. MAX3420E 인터럽트 로직. 음영으로 표시된 것은 레지스터 비트이다.
그림 1. MAX3420E 인터럽트 로직. 음영으로 표시된 것은 레지스터 비트이다.

그림 1은 MAX3420E 인터럽트 로직이다. SPI 액세스가능 레지스터 비트는 음영으로 표시되었다.

IRQ 비트
모든 인터럽트 소스는 플립플롭

  • IRQ 비트를 읽으면 IRQ 플립플롭 상태를 리턴한다.
  • IRQ 비트에 '1'을 쓰면 IRQ 플립플롭이 소거되고, IRQ 비트에 '0'을 쓰면 플립플롭이 변경되지 않는다. IRQ bits, which may be read at any time, reflect the state of the IRQ flip-flop. Following #2 above, the writing of a 1 or 0 clears selected IRQ 비트는 어느 때나 읽을 수 있으며 IRQ 플립플롭의 상태를 나타낸다. 위 2번에 따르면 읽기-수정-쓰기 사이클을 필요로 하지 않고 1이나 0을 써서 선택한 IRQ 비트를 소거할 수 있다. 여기서는 설명을 위해 MAX3420E가 IRQ 비트를 1을 쓰면 비트를 설정하고 0을 쓰면 비트를 소거할 수 있는 단순 레지스터 비트로 구현했다고 가정한다. 그리고 예를 들어 USBIRQ 레지스터의 URESIRQ 비트를 소거하고자 한다고 하자. 그림 2는 이를 수행하기 위한 코드이다.

    그림 2. 종전의 레지스터 비트 소거를 위해서는 RMW 연산이 필요하다.
    그림 2. 종전의 레지스터 비트 소거를 위해서는 RMW 연산이 필요하다.

    SPI 마스터가 1을 쓰면 MAX3420E IRQ 비트를 소거할 수 있고, 0을 쓰면 다른 레지스터 비트가 변경되지 않으므로, SPI 마스터가 곧바로 비트 마스크 값을 써서 URESIRQ 비트를 소거할 수 있다. 그러므로 그림 2의 마지막 3개 문을 그림 3의 단일 문으로 대체할 수 있다.

    그림 3. 단일 레지스터 쓰기를 이용한 MAX3420E IRQ 비트 소거
    그림 3. 단일 레지스터 쓰기를 이용한 MAX3420E IRQ 비트 소거

    IEN 비트
    14개 MAX3420E 인터럽트 각각이 관련 인터럽트 인에이블(IEN) 비트를 이용한다. IEN 비트와 IRQ 플립플롭 출력을 AND 연산해서 요청이 INT 핀으로 전달되도록 하거나 전달되지 못하도록 한다(그림 1). 14개 IRQ 플립플롭을 게이팅하고 OR 연산해서 단일 내부 인터럽트 요청 신호를 형성하고 이를 인터럽트 핀 로직 블록으로 전달한다.

    IRQ 비트가 IEN 비트의 상태에 관계 없이 인터럽트의 대기중 상태를 나타낸다. 이로써 펌웨어가 INT 핀을 트리거링하지 않고 대기중인 인터럽트를 확인할 수 있다. 만약 코드가 IRQ 레지스터가 "대기중 없음" 상태임을 확인해야 하는 경우, 간단한 방법으로 IRQ 및 IEN 레지스터를 읽고 이들을 AND 연산하여 "대기중이고 인에이블된 IRQ"에 해당되는 비트를 확인할 수 있다. 값이 0이면 인에이블된 인터럽트 중 어느 것도 대기중이지 않다는 뜻이다.

    IE 비트
    SPI 마스터가 IE 비트를 이용해 INT 핀을 인에이블 또는 디스에이블시킬 수 있다. 이것이 모든 인터럽트에 영향을 미치므로 이를 전역 인터럽트 인에이블(global Interrupt Enable)이라고 한다. IRQ 또는 IEN 비트의 상태에 관계 없이 IE = 0이면 INT 핀이 비활성화된다.

    인터럽트 핀 로직
    INTLEVEL(아래 설명 참조) 및 POSINT의 두 레지스터 비트가 INT 핀의 동작을 제어한다. IE = 1로 설정하기 전에 이들 구성 비트를 설정해야 한다.

    레벨 모드, INTLEVEL = 1
    일부 마이크로컨트롤러 시스템은 레벨 민감성 액티브 로우 인터럽트를 이용한다. 이 구성에서는 MAX3420E가 오픈 드레인 트랜지스터를 이용한 INT 핀을 접지로 구동한다. 이 핀은 로우로만 구동할 수 있으므로 INT 핀과 로직 전원 사이에 풀업 저항을 연결한다. 각각 오픈 드레인 출력을 갖는 다중 칩으로부터의 INT 핀 출력이 결합되어 단일 저항으로 풀업할 수 있다. 어느 칩 출력이든 이 핀을 로우로 풀링하므로 이 로직을 'wired-OR'이라고도 한다. 이러한 유형의 시스템은 INTLEVEL = 1로 설정한다.

    에지 모드, INTLEVEL = 0 (디폴트 값)
    MAX3420E INT 핀은 에지 액티브 인터럽트 시스템도 구동할 수 있다. 이는 마이크로컨트롤러가 인터럽트 입력 핀 상에서 0-1 또는 1-0 천이가 발생하는지 감시하는 것이다. 이는 MAX3420E의 디폴트 모드로서 INTLEVEL = 0이다. SPI 마스터가 이차 비트인 POSINT를 이용해 에지 극성을 설정한다. POSINT = 1이면 MAX3420E가 대기중 인터럽트에 대해 0-1 천이를 제공한다. POSINT = 0(디폴트 값)이면 MAX3420E가 대기중 인터럽트에 대해 1-0 천이를 제공한다.

    그림 1에서 다음 내용을 알 수 있다.

    1. IRQ 비트를 설정하고 관련 IEN 비트를 소거해도 IRQ가 INT 출력 핀에 영향을 미치지 않지만 인터럽트는 여전히 대기중이다. 이 상태는 IRQ 비트로 읽을 수 있고 관련 레지스터 비트에 1을 써서 소거할 수 있다.
    2. 대기중 인터럽트(IRQ 비트가 1)가 IEN 비트가 0-1 천이를 발생시키는 것이면 인터럽트를 발생시킨다.
    3. INT 핀을 마이크로컨트롤러의 인터럽트 시스템에 연결할 수 있다. 아니면 마이크로컨트롤러가 INT 핀을 폴링해서 어떤 MAX3420E 인터럽트가 대기중인지 확인한다. 폴링에 적합한 모드는 레벨 모드(INTLEVEL = 1)이다. 에지 모드이면 INT 핀이 펄스를 너무 좁게 출력함으로써 마이크로컨트롤러가 보지 못할 수 있다. 레벨 모드에서는 INT 핀에서 VL까지 풀업 저항이 필요하다.

    INT 핀 파형

    레벨 모드

    그림 4. 레벨 모드(INTLEVEL = 1)일 때 MAX3420E INT 핀의 동작
    그림 4. 레벨 모드(INTLEVEL = 1)일 때 MAX3420E INT 핀의 동작

    그림 4는 레벨 모드일 때 MAX3420E의 INT 핀 파형이다. INT 핀의 정지 상태는 하이이다(VL로 풀업). 위 그림에서 2개 인터럽트가 IEN 비트가 1로 설정되고 전역 IE 비트가 1로 설정되었다고 할 때 다음과 같은 이벤트가 발생한다(아래 매겨진 문자는 그림 4의 이벤트에 매겨진 문자와 동일하다).

    1. 인터럽트 요청이 도착하면 MAX3420E INT 핀이 로우로 구동된다.


      주의: MAX3420E 인터럽트 출력 핀을 INT 핀이라고 하지만(레벨 모드의 경우처럼) 때로는 마이너스 극성일 수 있다.
    2. SPI 마스터가 인터럽트 서비스를 종료하고 1을 써서 IRQ 비트를 소거한다.(a) 와 (b) 사이의 간격은 인터럽트가 IRQ 비트를 어서트(assert)하고 SPI 마스터가 IRQ 비트를 소거한 사이의 시간이다.
    3. 또 다른 인터럽트 요청이 도착하여 INT 핀을 로우로 구동한다.
    4. 첫 번째 인터럽트 요청이 대기중인 상태에서 두 번째 인터럽트 요청이 도착한다. 최소한 하나의 인터럽트가 대기중이므로 INT 레벨이 변경되지 않는다(이 경우에는 2개 인터럽트가 대기중이다).
    5. SPI 마스터가 대기중인 한 인터럽트의 서비스를 종료하고 IRQ 비트에 1을 써서 소거한다. 한 인터럽트가 여전히 대기중이므로 INT 핀은 로우를 유지한다.
    6. SPI 마스터가 나머지 인터럽트 요청 서비스를 종료하고 IRQ 비트에 1을 써서 소거한다. 어떤 인터럽트도 대기중이지 않으므로 INT 핀이 하이 상태로 돌아간다.

    참고: IRQ 플립플롭(그림 1)을 설정하면 인터럽트가 대기중인 것으로 간주된다.

    이 로직은 INT 핀 폴링에 적합하다. MAX3420E의 어느 요소가 서비스를 필요로 하고 인터럽트가 인에이블 상태이면 INT 핀이 로우가 된다. INT 핀은 마이크로컨트롤러가 마지막 대기중인 IRQ 비트를 소거할 때까지 로우를 유지한다.

    에지 모드

    그림 5. 에지 모드(INTLEVEL = 0)일 때 MAX3420E INT 핀의 동작. 간격(1)은 SPI 마스터가 IRQ를 소거하는 데 걸리는 시간이고, 간격(2)는 10.67µs이다.
    그림 5. 에지 모드(INTLEVEL = 0)일 때 MAX3420E INT 핀의 동작. 간격(1)은 SPI 마스터가 IRQ를 소거하는 데 걸리는 시간이고, 간격(2)는 10.67µs이다.

    그림 5는 두 극성으로 동작하는 에지 모드일 때의 MAX3420E INT 핀 파형으로서 POSINT 비트에 의해 제어된다. 이 파형이 레벨 모드의 파형과 유사해 보이지만 두 가지 점이 다르다. INT 핀이 다음 두 가지 조건일 때 에지를 제공한다.

    1. IRQ 비트가 활성화된다(IRQ 플립플롭이 0-1 천이를 발생시킨다).
    2. 프로세서가(1을 써서) IRQ 비트를 소거하고 다른 IRQ가 대기중이다.
    두 번째 조건이면 서비스가 필요할 때마다 프로세서가 에지를 제공받는다.

    INT 핀이 에지를 제공할 뿐만 아니라 레벨 모드에서처럼 활성 및 비활성 상태가 된다. INT 핀의 비활성 상태는 POSINT 비트가 설정한 에지 극성에 따라 결정된다. 그러므로 INT 핀의 상태를 확인해서 인터럽트가 대기중인지 알 수 있으므로 에지 모드가 레벨 모드와 유사하다.

    • 네거티브 에지 모드이면, 대기중인 인터럽트가 없으면 INT 핀이 하이이고 인터럽트가 대기중이면 로우이다.
    • 포지티브 에지 모드이면, 대기중인 인터럽트가 없으면 INT 핀이 로우이고 인터럽트가 대기중이면 하이이다.
    다음은 INT 핀의 활성 또는 비활성 상태에 관한 설명이다. 활성이면 최소한 한 인터럽트가 대기중이고, 비활성이면 대기중인 인터럽트가 없는 것이다. 인터럽트가 인에이블되었다고 가정하면 다음과 같은 이벤트가 발생한다(아래 매겨진 문자는 그림 5의 이벤트에 있는 문자와 동일하다).
    1. 인터럽트 요청을 수신하고 MAX3420E INT 핀이 에지를 제공한다. 에지의 극성은 POSINT 비트의 설정에 따라 결정된다. 인터럽트가 대기중이므로 INT 핀이 활성 상태를 유지한다.
    2. SPI 마스터가 인터럽트 서비스를 종료하고 IRQ 비트에 1을 써서 이 비트를 소거한다. MAX3420E INT 핀이 비활성 상태로 돌아간다. (a)에서 (b)까지의 간격은 인터럽트가 어서트하고 SPI 마스터가 IRQ 비트를 소거한 사이의 시간이다.
    3. 또 다른 인터럽트 요청이 도착하고 MAX3420E INT 핀이 에지를 제공하고 활성 상태를 유지한다.
    4. 첫 번째 인터럽트 요청이 대기중이면서 두 번째 인터럽트가 도착한다. MAX3420E INT 핀이 또 다른 에지를 제공해야 하므로 비활성 및 활성 상태 사이에 펄싱을 해서 해당 극성의 에지를 제공한다. 이 펄스의 폭이 MAX3420E의 경우에는 10.67µs로 고정적이다. 인터럽트가 대기중이므로 INT 핀이 활성 상태를 유지한다.
    5. SPI 마스터가 대기중인 인터럽트 하나의 서비스를 종료하고 IRQ 비트에 1을 써서 이 비트를 소거한다. INT 핀이 (d) 단계에서처럼 또 다른 에지를 제공한다.
    6. SPI 마스터가 나머지 인터럽트 요청 서비스를 종료하고 IRQ 비트에 1을 써서 이 비트를 소거한다. 대기중인 인터럽트가 없으므로 INT 핀이 비활성 상태로 돌아간다.

    인터럽트 레지스터

    표 1. 음영으로 표시된 MAX3420E 레지스터 비트가 인터럽트 시스템을 제어한다.

    MAX3420E가 2개의 USB 인터럽트 셋을 이용하며 표 1에서 음영으로 표시된 레지스터에 의해 제어된다. 인터럽트 비트는 EndPoint 제어를 위한 EPIRQ(R11) 및 EPIEN(R12), USB 제어를 위한 USBIRQ(R13) 및 USBIEN(R14)으로 그룹화된다. 전역 IE 비트는 CPUCTL 레지스터에 포함된다.

    표 2. 14개의 MAX3420E 인터럽트 소스
    비트 명칭 디폴트 위치 설정 소거
    IN0BAVIRQ 1 EPIRQ.0 EP0 FIFO가 마이크로프로세서를 로딩할 준비가 되어있다 EP0BC 레지스터 로드
    OUT0DAVIRQ 0 EPIRQ.1 EP0-OUT FIFO가 호스트 데이터를 포함한다 EPIRQ = 0x02 쓰기
    OUT1DAVIRQ 0 EPIRQ.2 EP1-OUT FIFO가 호스트 데이터를 포함한다 EPIRQ = 0x04 쓰기
    IN2BAVIRQ 1 EPIRQ.3 EP2-IN FIFO가 마이크로프로세서를 로딩할 준비가 되어있다 EP2INBC 레지스터 로드
    IN3BAVIRQ 1 EPIRQ.4 EP3-IN FIFO가 마이크로프로세서를 로딩할 준비가 되어있다 EP3INBC 레지스터 로드
    SUDAVIRQ 0 EPIRQ.5 에서 셋업 데이터를 이용할 수 있다 EPIRQ = 0x20 쓰기
    OSCOKIRQ 0 USBIRQ.0 MAX3420E 발진기/PLL이 안정적이다 USBIRQ = 0x01 쓰기
    RWUDNIRQ 0 USBIRQ.1 SIE가 RWU 시그널링을 종료했다 USBIRQ = 0x02 쓰기
    BUSACTIRQ 0 USBIRQ.2 버스가 활성 상태이다 USBIRQ = 0x04 쓰기
    URESIRQ 0 USBIRQ.3 호스트가 버스 리셋 시그널링을 시작했다 USBIRQ = 0x08 쓰기
    SUSPIRQ 0 USBIRQ.4 호스트가 버스를 중지시켰다 USBIRQ = 0x10 쓰기
    NOVBUSIRQ 0 USBIRQ.5 VBUS 비교기가 1-0 천이를 발생시켰다 USBIRQ = 0x20 쓰기
    VBUSIRQ 0 USBIRQ.6 VBUS 비교기가 0-1 천이를 발생시켰다 USBIRQ = 0x40 쓰기
    URESDNIRQ 0 USBIRQ.7 호스트가 버스 리셋 시그널링을 종료했다 USBIRQ = 0x80 쓰기

    표 2는 14개 인터럽트 제어 비트로서 MAXQ3420E 내부 로직이 언제 이들을 설정하고 SPI 마스터가 어떻게 소거하는지를 보여준다.

    인터럽트 요청 비트

    BAV 비트
    3개 BAV(Buffer AVailable) IRQ 비트가 SPI 마스터가 로딩을 위해 IN 엔드포인트 FIFO를 이용할 수 있는지를 나타낸다. 칩이 리셋되거나 엔드포인트 버퍼에서 호스트로 IN 데이터가 성공적으로 전송되었을 때 MAX3420E가 이들 IRQ 비트를 어서트한다. 이 IRQ가 SPI 마스터에 버퍼가 새로운 데이터를 받을 수 있도록 준비되었다고 알려준다.

    그림 6. 3번 엔드포인트로 IN 요청을 전송하는 호스트의 버스 트레이스
    그림 6. 3번 엔드포인트로 IN 요청을 전송하는 호스트의 버스 트레이스

    그림 6은 호스트가 MAX3420E로부터 데이터를 요청하는 IN 전송의 버스 트레이스이다. 패킷 7145가 도착하기 전에 SPI 마스터가 Endpoint 3-IN FIFO(EP3INFIFO)로 바이트 00 00 08을 로드했다. 그리고 SPI 마스터가 EP3INBC(Endpoint 3 IN Byte Count) 레지스터에 3을 썼다. 바이트 카운트 레지스터에 값을 씀으로써 다음 3가지가 이루어진다.

    1. IN 요청이 도착했을 때 MAX3420E에 얼마나 많은 바이트를 전송할지를 알려준다.
    2. NAK하지 않고 데이터를 전송하도록 엔드포인트를 준비시킨다.
    3. EP3INBAV IRQ 비트를 소거한다.
    MAX3420E가 엔드포인트 3으로 어드레스 지정된 다음 IN 패킷에 데이터 패킷 7146으로 응답한다. 호스트가 ACK(확인응답) 패킷 7147을 전송해서 데이터를 오류없이 수신했음을 알려준다. MAX3420E가 호스트 ACK 패킷을 탐지하면 EP3INBAV 인터럽트 요청 비트를 설정해서 SPI 마스터에 엔드포인트 FIFO를 새로운 데이터로 로드할 수 있다고 알려준다.

    SPI 마스터가 엔드포인트를 준비시키기 전에 IN 패킷이 도착하면 MAX3420E가 NAK 핸드셰이크로 응답한다(그림 7). NAK 핸드셰이크는 호스트에 IN 요청을 나중에 다시 시도하라고 한다.

    그림 7. MAX3420E가 데이터를 전송할 준비가 되지 않았으면 NAK를 전송한다.
    그림 7. MAX3420E가 데이터를 전송할 준비가 되지 않았으면 NAK를 전송한다.

    호스트로 IN 데이터를 전송하는 중에 오류가 발생하면 호스트가 IN 요청을 재시도할 때 MAX3420E가 자동으로 데이터를 재전송한다(그리고 동일 데이터가 DATA0/DATA1을 토글한다). 호스트로부터 ACK 핸드셰이크를 수신한 다음에 MAX3420E가 엔드포인트의 BAV IRQ 비트를 어서트해서 버퍼가 새로운 데이터를 받을 준비가 되었다고 알려준다.


    중요 주의사항: 다른 모든 MAX3420E IRQ 비트와 마찬가지로 3개 BAV IRQ 비트 역시 1을 써서 소거할 수 있다. 하지만 절대 그렇게 하지 않아야 한다. 대신에 위에서 설명한 방법대로 IN 엔드포인트의 바이트 카운트 레지스터를 써서 BAV IRQ 비트를 소거하도록 한다. 이는 MAX3420E가 IN 엔드포인트의 BAV 인터럽트 요청 비트를 록아웃 메커니즘으로 이용하기 때문이다. 이 메커니즘이 이루어지면 SPI 마스터와 MAX3420E의 직렬 인터페이스 엔진(SIE)이 엔드포인트 버퍼를 동시에 이용하려고 하지 않는다. 예를 들어 BAV 비트를 소거하고 2개의 별개의 명령으로 바이트 카운트를 로드하면 바이트 카운트 레지스터를 업데이트할 때 패킷 전송이 진행중임으로써 데이터가 손상될 수 있다.

    BAV IRQ 디폴트 값
    개 BAV IRQ 비트(표 2의 디폴트 칸에 1로 표시된 것들)의 디폴트 값은 1이다. 이는 파워온 또는 리셋 후에 SPI 마스터가 EPIRQ = 0x19로 읽는다는 뜻이다. 해당 IEN 비트가 설정되면 INT 핀이 인터럽트가 대기중인 것으로 나타낸다.

    이중 버퍼링 엔드포인트 EP2-IN
    MAX3420E EP2-IN 엔드포인트가 이중 버퍼링된다. 다시 말해서 2개의 64바이트 FIFO 및 바이트 카운트 레지스터 셋을 이용한다. 이중 버퍼링이 전송 대역폭을 향상시킨다. SPI 마스터가 호스트로 패킷을 전송하는 동안 기다릴 필요 없이 다른 패킷을 로드할 수 있기 때문이다. 이중 버퍼링을 이용함으로써 SPI 마스터가 한 IN FIFO를 로드하는 동시에 IN 데이터를 호스트로 전송할 수 있다. EP2INBC 레지스터를 로드할 때 2개 버퍼가 번갈아 이용된다. 이로써 SPI 마스터가 다른 FIFO 및 바이트 카운트 레지스터 셋을 이용할 수 있다. 이러한 이중 버퍼링 동작이 펌웨어에 투명하게 이루어진다.

    이중 버퍼링으로 인해 관찰되는 유일한 영향이 초기화 때이다. 파워 온 또는 칩 리셋이 이루어지면 IN2BAVIRQ 비트가 어서트된다. 정상적으로는 초기화 코드가 EP2IN FIFO로 데이터를 로드하고 EP2INBC 레지스터를 로드해서 IN2BAVIRQ 비트를 전송하고 소거할 수 있도록 준비시킨다. 이것이 이루어지면 MAX3420E가 신속하게 IN2BAVIRQ 비트를 다시 어서트한다. 이는 SPI 마스터가 로드를 위해 이차 버퍼를 이용할 수 있다는 표시이다.

    DAV 인터럽트 요청 비트
    OUT 엔드포인트는 DAV(Data AVailable) IRQ 비트를 이용해서 호스트로부터 새로운 데이터가 수신되었다는 것을 표시한다. MAX3420E가 자동으로 버스 재시도를 실시하고 오류없이 데이터가 수신되었을 때만 인터럽트 요청을 어서트한다. SPI 마스터가 DAV 입터럽트 요청을 수신하면 엔드포인트의 바이트 카운트 레지스터를 읽어서 데이터 페이로드 크기를 결정한다. 그리고 SPI 마스터가 엔드포인트의 OUTFIFO로부터 바이트 수를 읽는다. 정상적으로는 SPI 마스터가 1을 써서 OUTDAV IRQ 비트를 소거한다. 그러면 엔드포인트가 다음 OUT 패킷을 수신할 준비가 된다.

    그림 8에서는 호스트가 OUT PID 및 4개 데이터 바이트를 전송하면 MAX3420E가 이를 EP1OUT FIFO로 전송한다. MAX3420E가 오류없이 전송된 것을 확인하면 EP1OUTBC 레지스터를 업데이트해서 4개 바이트를 지시하고, 호스트로 ACK 패킷을 전송하고, EP1OUTDAV IRQ를 어서트함으로써 SPI 마스터에 엔드포인트 1 FIFO에서 검색을 위해 데이터를 이용할 수 있다고 알려준다.

    그림 8. 엔드포인트 1로 OUT 패킷을 전송하는 호스트의 버스 트레이스
    그림 8. 엔드포인트 1로 OUT 패킷을 전송하는 호스트의 버스 트레이스

    이중 버퍼링 엔드포인트 EP1-OUT
    MAX3420E EP1-OUT 엔드포인트가 이중 버퍼링이 된다. 다시 말해서 2개의 64바이트 FIFO 및 바이트 카운트 레지스터 셋을 이용한다. 이중 버퍼링이므로 다른 호스트 패킷이 대기중이면 SPI 마스터가 소거한 후에 OUT1DAVIRQ가 신속하게 다시 어서트할 수 있다.

    SUDAV 인터럽트 요청 비트
    호스트가 MAX3420E로 제어 전송을 보내면 MAX3420E가 8바이트 FIFO에 8개 셋업 바이트를 저장하고 SPI 마스터가 SUDFIFO 레지스터로부터 이를 읽는다. 주변장치가 언제나 이 버퍼로 호스트 데이터를 받으므로 SUDAVIRQ가 OUT 엔드포인트 FIFO처럼 동작함으로써 호스트로부터 새로운 데이터를 이용할 수 있게 되었을 때 SUDAV IRQ를 어서트한다. 셋업 패킷은 언제나 8바이트를 포함하므로 셋업 데이터를 위해서는 바이트 카운트 레지스터가 필요하지 않다.

    OSCOK 인터럽트 요청 비트
    MAX3420E가 파워 업하고, 칩 리셋에서 빠져나오고, 파워 다운 상태에서 벗어나면 내부 발진기 및 PLL이 스타트업하고 안정화하기 위해 시간을 필요로 한다. OSCOK(OSCillator OK) IRQ는 MAX3420E가 동작할 준비가 되었다는 표시이다.

    그림 9. MAX3420E를 리셋하고 OSCOK를 기다렸다가 나가기 위한 코드 예
    그림 9. MAX3420E를 리셋하고 OSCOK를 기다렸다가 나가기 위한 코드 예

    그림 9는 CHIPRES 레지스터 비트를 이용해 MAX3420E를 리셋하는 코드 예이다. 칩 리셋이 이루어지면 내부 발진기가 정지되므로 CHIPRES = 0으로 설정해서 코드에서 리셋 신호를 제거한 후에는 MAX3420E를 이용하기 전에 발진기가 안정화할 수 있도록 기다려야 한다.

    RWUDN 인터럽트 요청 비트
    중지 상태일 때는 USB 주변장치가 Remote WakeUp(RWU)을 시그널링해서 호스트에 버스 활동을 재개하도록 해야 한다. USB 표준은 RWU 신호를 1ms~15ms K-상태로 정의하고 있다. SPI 마스터가 SIGnal Remote WakeUp(SIGRWU) 비트를 1로 설정해서 RWU 시그널링이 이루어지도록 한다.

    SPI 마스터가 SIGRWU 비트를 설정하면 MAX3420E가 5ms를 대기하고, 10ms 동안 K-상태를 구동하고, RWUDNIRQ(Remote WakeUp DoNe Interrupt Request) 비트를 어서트한다. 5ms 지연은 또 다른 USB 요구를 충족하기 위한 것이다. 그 요구는 주변장치가 재개 시그널링을 시작하기 전에 최소한 5ms 동안 버스가 아이들(J-상태)이어야 한다는 것이다.

    그림 10. RWU 시그널링을 위한 코드 예
    그림 10. RWU 시그널링을 위한 코드 예

    그림 10은 RWU 시그널링을 위한 코드 예이다. MAX3420E가 신호를 타이밍하고 시간이 완료되었을 때 IRQ를 어서트한다. MAX3420E가 모든 일정한 시간 간격의 USB 이벤트에 대해 이렇게 해서 인터럽트를 제공하므로 SPI 마스터가 시그널링 간격을 타이밍할 필요가 없다.

    그림 10의 코드는 SIGRWU 비트를 설정하고 RWUDNIRQ 비트를 루핑해서 10ms 신호가 경과했는지 확인한다. 그런 다음 SIGRWU = 0으로 설정하고 IRQ 비트를 소거한다. 물론 멀티태스킹 SPI 마스터에서는 IRQ 비트를 곧바로 확인해서 시간을 낭비하지 않고 RWUDNIRQ 인터럽트 요청에 응답하고자 할 것이다.

    RWUDNIRQ 인터럽트를 수신하고 5ms 이내에 SPI 마스터가 SIGRWU 비트를 턴오프해야 한다. 그렇지 않으면 MAX3420E가 또 다른 10ms K-상태를 시작하고 SIGRWU = 0이 될 때까지 이 시퀀스(5ms 대기, 10ms K-상태)를 반복할 수 있다. RWU 시그널링이 진행중일 때 SIGRWU = 0으로 설정하는 것은 RWU 시그널링을 종료하지 못한다.

    SPI 마스터가 SIGRWU = 1로 설정했을 때 MAX3420E가 파워 다운 상태(PWRDOWN = 1)이면 MAX3420E가 자동으로 발진기를 재시작하고 안정화할 수 있도록 기다렸다가 RWU 시그널링을 시작한다. 이 경우에는 SPI 마스터가 OSCOK IRQ를 확인하지 않아도 된다.

    BUSACT 인터럽트 요청 비트
    MAX3420E가 USB 패킷 시작 부분에서 SYNC 패턴을 탐지하면 BUSACT IRQ 비트를 설정한다. USB 버스 리셋은 버스 동작으로 여겨지지 않으므로 BUSACK 인터럽트 요청을 활성화하지 않는다.

    URES 및 URESDN 인터럽트 요청 비트
    USB 호스트가 최소한 50ms 동안 SE0(Single-Ended-zerO) 상태를 구동해서 주변장치를 리셋한다(D+와 D- 모두를 로우로 구동). MAX3420E가 2.5µs 동안 SE0을 탐지함으로써 USB RESet IRQ(URESIRQ)를 어서트한다. 그리고 호스트가 리셋 시그널링을 완료하면 USB RESet DoNe IRQ(URESDNIRQ)를 어서트한다.

    SPI 마스터가 USB 버스 리셋 이벤트를 모니터해야 하므로 버스 리셋이 이루어지는 동안에는 MAX3420E가 URESIE, URESDNIE 또는 IE 인터럽트 인에이블 비트를 소거하지 않는다. 버스 리셋 동안 EPIEN 및 USBIEN 레지스터의 다른 모든 인터럽트 인에이블 비트는 소거한다.

    SUSP 인터럽트 요청 비트
    MAX3420E가 3ms 동안 버스 비활성 상태(일정한 J-상태)를 탐지하면 SUSPend 인터럽트 요청(SUSPIRQ)을 어서트한다. MAX3420E를 이용하는 주변장치가 버스 전원을 이용하는 것이면 저전력 상태로 전환해서 VBUS로부터 소비하는 전류를 최소화해야 한다. 이 경우에는 SPI 마스터가 전력 소모 주변장치를 셧다운하고 PWRDOWN = 1로 설정해서 MAX3420E를 저전력 모드로 전환한다. 그러면 MAX3420E 발진기가 정지하고 MAX3420E가 가장 낮은 전력 상태가 된다.

    프로그래밍과 관련하여 다음 두 가지 점에 유의해야 한다.

    • SUSPIRQ 비트를 소거하면 3ms 후에 다시 어서트해서 인터럽트를 정지시킬 수 없다. 버스가 정지되었을 때 반복적인 SUSPEND 인터럽트를 방지하기 위해서는 버스가 시그널링을 재개할 때까지 SUSPEND IEN 비트를 소거하도록 한다.
    • MAX3420E의 내부 발진기에 의해 내부 중지 타이머 로직이 클로킹된다. 그러므로 칩을 파워 다운(PWRDOWN = 1로 설정)하고 SUSPIRQ 비트에 1을 써서 소거하면 MAX3420E가 이 비트를 소거하지 않는다. MAX3420E는 현재 정지된 내부 클록을 필요로 한다.
    VBUS 및 NOVBUS 인터럽트 요청 비트
    자체 전원 주변장치가 이들 인터럽트를 이용해서 USB에 연결되고 전력이 공급되는지를 탐지한다. 내부 VBUS 비교기에 의해 이들 인터럽트가 활성화되며 이 비교기가 VBCOMP 핀 전압을 내부 기준 전압과 비교한다. 이들 인터럽트는 에지 민감성이며 VBUS 전압이 인가되거나(VBUSIRQ) 제거될 때(NOVBUSIRQ) 어서트한다.

    버스 전원 주변장치는 VBUS로부터 전력이 제공되므로 VBUS를 탐지하지 않아도 된다. 그러므로 VBCOMP 핀을 범용 입력으로 이용할 수 있다. 이 애플리케이션에서는 VBCOMP 핀이 내부 풀업 저항을 이용하지 않으므로 VBCOMP 핀과 VL 사이에 풀업을 연결해야 한다.

    프로그래밍 도움말

    IEN 비트 소거
    칩 리셋
    칩 리셋이 이루어지면 모든 IE 비트가 소거된다. 칩 리셋은 다음과 같은 경우에 이루어진다.
    1. MAX3420E에 VL 전력이 인가된다(파워 온 리셋).
    2. MAX3420E RES# 핀을 로우로 구동한다.
    3. SPI 마스터가 비트를 CHIPRES = 1로 설정한다.
    버스 리셋
    MAX3420E가 USB 버스 리셋(3ms 동안 버스 비활성)을 탐지하면 3개 비트를 제외한 모든 IE 비트가 소거된다. SPI 마스터가 버스 리셋 시그널링 상태를 모니터하기 위해 버스 리셋 관련 인터럽트를 수신해야 할 수 있다. 다음 IE 비트는 버스 리셋에 의해 영향을 받지 않는다.
    1. URESIE
    2. URESDNIE
    3. IE (전역 인터럽트 인에이블)
    USB 버스 리셋이 대부분의 IE 비트를 소거하므로 버스 리셋이 완료되면 원하는 인터럽트가 다시 인에이블되도록 제어 펌웨어를 구성해야 한다.

    BAV 및 DAV IRQ 비트 소거
    DAV IRQ 비트는 정상적으로 비트에 1을 써서 소거할 수 있다. BAV 비트(IN 엔드포인트를 위한)는 이와 달리 바이트 카운트 레지스터를 써서 소거할 수 있다.


    의견을 보내주세요!
    위 내용이 도움이 되셨나요?
    여러분의 의견을 기다립니다 — Maxim은 보내주신 정정이나 제안사항을 반영하고 있습니다. 이 페이지를 평가하고 의견을 보내주십시오.


    자동 업데이트
    관심있는 분야의 애플리케이션 노트가 나올 때 자동으로 업데이트 받고 싶으세요? 그렇다면 EE-Mail™을 신청하십시오.



    추가 정보  APP 3661: Aug 22, 2006
    MAX3420E SPI 인터페이스가 내장된 USB 주변장치 컨트롤러 전체 데이터 시트
    (PDF, 372kB)
    무료 샘플
     

    다운로드, PDF 형식다운로드, PDF 형식 (141kB)
     AN3661, AN 3661, APP3661, Appnote3661, Appnote 3661


  •       개인정보보호 정책    법적 고지

          Copyright © 2008 by Maxim Integrated Products, Dallas Semiconductor