KR20000006576A - 디지탈데이터처리시스템내의다수의호스트컴퓨터사이에서자원의공유를용이하게하기위한시스템 - Google Patents

디지탈데이터처리시스템내의다수의호스트컴퓨터사이에서자원의공유를용이하게하기위한시스템 Download PDF

Info

Publication number
KR20000006576A
KR20000006576A KR1019990025904A KR19990025904A KR20000006576A KR 20000006576 A KR20000006576 A KR 20000006576A KR 1019990025904 A KR1019990025904 A KR 1019990025904A KR 19990025904 A KR19990025904 A KR 19990025904A KR 20000006576 A KR20000006576 A KR 20000006576A
Authority
KR
South Korea
Prior art keywords
task
microcontroller
command
loop
path
Prior art date
Application number
KR1019990025904A
Other languages
English (en)
Inventor
데이윌리엄에프.
코프랜드수잔엘.
힐데이비드에이.
호나섹마크제이.
호스롬마이클케이.
커튼개빈제이.
카이저폴라씨.
Original Assignee
케네쓰 올센
선 마이크로시스템즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 케네쓰 올센, 선 마이크로시스템즈, 인코포레이티드 filed Critical 케네쓰 올센
Publication of KR20000006576A publication Critical patent/KR20000006576A/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/42Loop networks
    • H04L12/437Ring fault isolation or reconfiguration
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/66Arrangements for connecting between networks having differing types of switching systems, e.g. gateways

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)

Abstract

본 발명의 디지탈 데이터 처리 시스템은 다수의 드라이브 모듈을 포함하는 기억 서브시스템과 같은 다수의 자원과 호스트 프로세서를 포함한다. 호스트 프로세서는 루프 형태로된 토폴로지를 가진 상호접속(interconnection)을 통해 드라이브 모듈에 접속된다. 상호접속은 토폴로지가 전체 루프를 포함하고 있는 횡단 모드(pass-through mode)나 또는 토폴로지가 호스트 프로세서 및 가능하면, 기억 서브시스템 내의 적어도 하나의 드라이브 모듈을 포함하는 루프의 일부분을 포함하고 있는 바이패스 모드(bypass mode)로 선택적으로 구성될 수 있는 적어도 하나의 구성(configuration) 스위치를 포함한다. 호스트 프로세서는 다소간의 드라이브 모듈을 루프로 접속하기 위해 구성 스위치의 상태를 횡단 모드 또는 바이패스 모드로 선택적으로 조절할 수 있다. 각각의 디스크 모듈은 또한, 하나의 디스크 모듈과 하나의 포트 바이패스 스위치를 포함하며, 이 포트 바이패스 스위치도 역시, 상호접속의 토폴로지가 디스크 모듈을 포함하는 횡단 모드나 또는 상호접속의 토폴로지가 디스크 모듈을 바이패스하는 바이패스 모드로 선택적으로 구성될 수 있다. 호스트 프로세서는 또한, 다소간의 디스크 모듈을 루프로 접속하기 위해 디스크 모듈의 포트 바이패스 스위치의 상태를 선택적으로 조절할 수 있다. 구성 스위치 및 포트 바이패스 스위치는 서브시스템 제어기에 의해 직접 제어되며, 이 제어기는 별도의 명령 상호접속을 통해 호스트 프로세서로부터 스위치를 제어하기 위한 명령을 수신한다.

Description

디지탈 데이터 처리 시스템 내의 다수의 호스트 컴퓨터 사이에서 자원의 공유를 용이하게 하기 위한 시스템{SYSTEM AND METHOD FOR FACILITATING THE SHARING OF RESOURCES SUCH AS STORAGE SUBSYSTEMS AMONG A PLURALITY OF HOST COMPUTERS IN A DIGITAL DATA PROCESSING SYSTEM}
본 발명은 일반적으로 디지탈 컴퓨터 시스템에 관한 것으로서, 특히, 디스크 기억장치와 같은 하나 또는 그 이상의 자원이 다수의 호스트 컴퓨터 사이에서 선택적으로 공유될 수 있도록 하기 위한 시스템에 관한 것이다.
디지탈 데이터 처리 시스템은 통상적으로, 프로세싱, 저장, 디스플레이, 프린팅 등을 위해 그들 사이에서 정보가 전송될 수 있도록 상호접속된 다수의 장치를 포함한다. 디지탈 데이터 처리 시스템에는 다수의 상호접속된 장치들이 사용되어 왔다. 잘 알려진 파이버 채널 프로토콜을 이용하여 정보가 전송되는 한 특정 구성에 있어서는, 장치 DEV(1)이 장치 DEV(2)로 정보를 전송하는 등의 형태로 이루어진 링 토폴로지(ring topology) 형태로 장치들이 접속된다. 링내의 최종 장치 DEV(L)은 정보를 첫 번째 장치 DEV(1)로 전송하며, 이렇게함으로써 링을 완성하게 된다. 파이버 채널 프로토콜을 이용한 링 상호접속은 많은 장점을 갖고 있는데, 정보가 매우 빠르게, 특히, 1초당 기가비트의 범위까지 전송될 수 있다는 사실이 가장 현저한 장점이다.
그러나, 링 상호접속 토폴로지의 이용에 있어 몇가지 단점이 있다. 그중 한가지 단점은 링 상호접속에 장치를 추가하는 것은 어렵고 고장을 유발할 수 있다는 것이다. 또한, 하나의 장치가 고장나는 경우에, 고장의 원인에 따라, 그 상호접속을 통해 전송되는 정보가 중단되거나 변조될 수 있으며, 특정의 고장난 장치의 위치를 찾고 그 장치를 격리시키는 것이 곤란할 수 있다.
본 발명은 디지탈 데이터 처리 시스템 내의 다수의 호스트 컴퓨터 사이에서 기억 서브시스템과 같은 자원의 공유를 용이하게 하기 위한 새롭고 개선된 시스템 및 방법을 제공한다.
요약하면, 디지탈 데이터 처리 시스템은 다수의 드라이브 모듈을 포함하는 기억 서브시스템과 같은 다수의 자원과 호스트 프로세서를 포함한다. 호스트 프로세서는 루프 형태로된 토폴로지를 가진 상호접속(interconnection)을 통해 드라이브 모듈에 접속된다. 상호접속은 토폴로지가 전체 루프를 포함하고 있는 횡단 모드(pass-through mode)나 또는 토폴로지가 호스트 프로세서 및 가능하면, 기억 서브시스템 내의 적어도 하나의 드라이브 모듈을 포함하는 루프의 일부분을 포함하고 있는 바이패스 모드(bypass mode)로 선택적으로 구성될 수 있는 적어도 하나의 구성(configuration) 스위치를 포함한다. 호스트 프로세서는 다소간의 드라이브 모듈을 루프로 접속하기 위해 구성 스위치의 상태를 횡단 모드 또는 바이패스 모드로선택적으로 조절할 수 있다.
다른 양태에 있어서, 각각의 디스크 모듈은 또한, 하나의 디스크 모듈과 하나의 포트 바이패스 스위치를 포함하며, 이 포트 바이패스 스위치도 역시, 상호접속의 토폴로지가 디스크 모듈을 포함하는 횡단 모드나 또는 상호접속의 토폴로지가 디스크 모듈을 바이패스하는 바이패스 모드로 선택적으로 구성될 수 있다. 호스트 프로세서는 또한, 다소간의 디스크 모듈을 루프로 접속하기 위해 디스크 모듈의 포트 바이패스 스위치의 상태를 선택적으로 조절할 수 있다. 구성 스위치 및 포트 바이패스 스위치는 서브시스템 제어기에 의해 직접 제어되며, 이 제어기는 별도의 명령 상호접속을 통해 호스트 프로세서로부터 스위치를 제어하기 위한 명령을 수신한다.
도1은 본 발명에 따라 구성된 디지탈 컴퓨터 시스템의 기능 블록도.
도2는 도1에 도시된 시스템에 사용되는 디스크 기억 서브시스템의 내부 세부사항을 도시하는 블록도.
도3은 도1에 도시된 디스크 기억 서브시스템 내의 디스크 기억 모듈을 구성(configure)하고 모니터링하는데 사용되는 장치 제어기(STD)의 내부 세부사항을 도시하는 블록도.
도4는 장치 제어기(STD)를 구성하고 모니터링하기 위해 디스크 기억 서브시스템으로 명령을 전송하고 그로부터 상태 정보를 수신하는 데이터 기억 프로세서(DSP) 내의 제어기(STC)의 내부 세부사항을 도시하는 블록도.
도5는 DSP 제어기(STC)로부터 장치 제어기(STD)로 명령을 전송하고 장치 제어기(STD)로부터 DSP 제어기(STC)로 상태 정보를 전송하기 위해 사용되는, 데이터 기억 프로세서(DSP) 내의 제어기(STC)와 디스크 기억 서브시스템 내의 장치제어기(STD) 사이에서 전송되는 패킷의 포맷도.
도6 내지 도8은 STC(도4)를 제어하는 마이크로콘트롤러에 의해 수행되는 연산을 도시하는 흐름도(도6 및 도7은 실행 루프와 관련하여 수행되는 연산을 도시하고, 도8은 STC들과 STD들을 상호접속하는 버스를 통한 패킷의 송신 및 수신을 제어하는 상태 머신에 대한 흐름도임).
도9 내지 도13은 장치 제어기(STD)를 제어하는 마이크로컨트롤러에 의해 수행되는 연산을 도시하는 흐름도(도9는 파워-업 리셋 및 실행 루프의 흐름도이고, 도10은 STC로의 전송을 위한 응답 패킷의 STC 생성 태스크로부터 수신되는 명령 패킷의 처리를 제어하기 위한 서브루틴 태스크에 대한 흐름도이고, 도11은 마이크로컨트롤러가 드라이브 전원 스위치에서의 상태 변화를 처리하는 태스크에 대한 흐름도이고, 도12는 마이크로컨트롤러에 의해 실행되는 타이머 인터럽트 서브루틴에 대한 흐름도이고, 도13(도13a 및 도13b)은 정보가 STD에 의해 수신되거나 또는 STC로 송신될 때 마이크로컨트롤러에 의해 처리되는 인터럽트 서브루틴의 흐름도임).
도14는 디스크 기억 프로세서(DSP)를 디스크 기억 서브시스템에 접속하는 호스트 어댑터를 제어하는 핸들러 1400과 관련하여 수행되는 연산을 도시하는 흐름도.
* 도면의 주요 부분에 대한 부호의 설명
101,102:DSP 103:CPU
104:메모리 105:파이버 채널 호스트 어댑터
106,107:FC 제어기 108:I/O 제어기
110:VME_PCI 브릿지 111:로컬 CPU
112:DRAM 160,170:FC 루프
200:디스크 기억 서브시스템 1400:ST 핸들러
본 발명은 첨부된 특허청구범위에 특정하여 기재되어 있다. 본 발명의 상기 및 다른 장점은 첨부도면과 함께하는 다음의 상세한 설명을 참조함으로써 잘 이해될 것이다.
도1은 본 발명에 따라 구성된 디지탈 컴퓨터 시스템을 도시하고 있다. 도1에 도시된 바와 같이, 일실시예에 따른 시스템은 파이버 채널(FC) 루프 FC Loop-A 및 FC Loop-B와 버스(150)를 포함하여 수개의 상호접속을 통해 2개의 디스크 기억 서브시스템(도1의 "6-pack"(200))을 포함하는 디스크 기억장치 어레이에 호스트 컴퓨터로서 접속된 2개의 데이터 기억 프로세서(101,102)를 포함한다. 파이버 채널 루프 FC Loop-A(160) 및 파이버 채널 루프 FC Loop-B(170)는 일반적으로 종래의 파이버채널 중재 루프 접속(Fibre Channel Arbitrated Loop(FC-AL) connections)을 포함한다. 비록 도1에서 디스크 기억장치 어레이가 2개의 디스크 기억 서브시스템("6-pack")을 포함하는 것으로 도시되었지만, 본 발명에 따라 구성된 시스템은 하나의 디스크 기억 서브시스템을 포함하거나 또는 2개 이상의 디스크 기억 서브시스템을 포함할 수도 있다는 것을 이해할 것이다. 또한, FC Loop-A 와 FC Loop-B중 하나 또는 둘다가 디스크 기억 서브시스템이 아닌 다른 장치를 포함할 수도 있다는 것을 이해할 것이다.
데이터 기억 프로세서(DSP)(101,102)는 데이터 기억 및 처리와, FC Loop-A(160), FC Loop-B(170) 및 버스(150)로의 접속을 위한 소프트웨어 및 하드웨어 모듈을 구비한 범용 컴퓨터 시스템이다. 각각의 DSP(101,102)는 호스트 중앙 처리 장치(CPU)(103), 메모리(104), 입출력(I/O) 제어기(108) 및 파이버 채널 호스트 어댑터(105)를 포함하고 있으며, 이들 구성요소는 모두 버스(151)에 의해 상호접속된다. 파이버 채널 호스트 어댑터(105)는 로컬 CPU(111), 제어기(STC)(400) 및 2개의 파이버 채널 제어기(106,107)를 포함한다. STC(400)는 파이버 채널 호스트 어댑터(105)를 버스(150)에 접속하는 작용을 하고, 각각의 파이버 채널 제어기(106,107)는 파이버 채널 호스트 어댑터(105)를 파이버 채널 루프 FC Loop-A(160) 및 FC Loop-B(170) 각각에 접속하는 작용을 한다. 일실시예에서 종래의 ISA("Industry Standard Architecture") 인터페이스를 구비하고 있는 STC(400)는 ISA 버스(153)를 통해 브릿지(109)를 경유하여 버스(151)에 접속된다.
버스(150)는 DSP(101,102)에 위치된 STC(400)를 멀티드롭(multidrop) 방식으로 디스크 기억 서브시스템(6-pack)(200)에 접속한다. 버스(150)는 각각의 디스크 기억 서브시스템(200) 내의 전자식 스위치를 제어함으로써, 도2와 관련하여 후술되는 바와 같이, FC Loop-A(160) 및 FC Loop-B(170)를 구성하고(confiure) 디스크 드라이브 포트를 각각의 루프 상으로 스위칭하기 위해 DSP(101,102)에 의해 제어될 수 있는 제어 경로를 제공한다. 전자식 스위치는, 각각의 루프가 DSP(101,102) 사이에서 연장되어 있는, 횡단 모드를 포함하는 수개의 모드로 동작하거나 또는 DSP(101,102) 중 하나가 후술되는 바와 같이 각각의 디스크 기억 서브시스템(200) 내의 여러 디스크 기억 장치에 접속될 수 있는 다양한 세그먼트로 동작하도록 각각의 FC Loop-A(160) 및 FC Loop-B(170)를 개별적으로 구성하도록 제어될 수 있다.
다음의 논의에서, (도1에 도시된 바와 같이) 좌측에 위치된 디스크 기억 서브시스템(6-pack)(200)은 "좌측" 디스크 기억 서브시스템(6-pack)으로 언급되고, (도1에 도시된 바와 같이) 우측에 위치된 디스크 기억 서브시스템(6-pack)(200)은 "우측" 디스크 기억 서브시스템(6-pack)으로 언급된다. 전술한 바와 같이, 각각의 FC Loop-A(160) 및 FC Loop-B(170)는 각각의 파이버 채널 중재 루프를 포함한다. FC Loop-A(160)와 관련된 루프 토폴로지는 그것이 FC Loop-A(160)에 대해 "횡단" 모드에 있는 것으로 가정하여 도1과 함께 설명되며, FC Loop-B(170)에 대한 루프 토폴로지는 FC Loop-A(160)에 대한 토폴로지와 유사하며, 따라서 별도로 설명되지 않는다.
도1에서 다수의 루프 세그먼트(161-166)를 포함하고 있는 FC Loop-A(160)를 참조하면, 횡단 모드에서, 데이터는 다음과 같이 루프 세그먼트(161-166)를 통해 전송된다. 루프 세그먼트(161)는 DSP(101)로부터 시작되며, FC 제어기(106) 내의 송신기를 좌측 디스크 기억 서브시스템(200)의 수신기에 접속한다. 데이터는 좌측 디스크 기억 서브시스템(200)을 통해 전송되어, 루프 세그먼트(182)로 전달되며, 이 루프 세그먼트(162)는 우측 디스크 기억 서브시스템(200)의 수신기에 접속된다. 다음에, 데이터는 우측 디스크 기억 서브시스템(200)을 통해 루프 세그먼트(163)로 전달되며, 이 루프 세그먼트(163)는 DSP(102)에 위치된 FC 제어기(106)의 수신기에 접속되며, 이렇게함으로써, DSP(101)로부터 DSP(102)로 연장된 FC Loop-A(160)의 절반의 루프를 완성한다. DSP(102)로부터 DSP(101)로 연장된 FC Loop-A(160)의 복귀 경로는 다음과 같다. 루프 세그먼트(164)는 DSP(102) 내의 FC 제어기(106)의 송신기를 우측 디스크 기억 서브시스템(200)의 수신기에 접속한다. 그러면, 데이터는 우측 디스크 기억 서브시스템(200)을 통해 루프 세그먼트(165)로 전달되며, 이 루프 세그먼트(165)는 좌측 디스크 기억 서브시스템(200)의 수신기에 접속된다. 다음에, 데이터는 좌측 디스크 기억 서브시스템(200)을 통해 루프 세그먼트(166)로 전달되고, 이 루프 세그먼트(166)는 DSP(101)에 위치된 FC 제어기(106)의 수신기에 접속되며, 이렇게함으로써, FC Loop-A(160)에 대한 루프를 완성한다.
일련의 루프 세그먼트(171-176)를 포함하고 있는 도1에 도시된 시스템 내의 FC Loop-B(170)를 참조하면, 이들 루프 세그먼트(171-176)는 루프 세그먼트(161-166)와 유사한 방식으로 각각의 장치들 사이에서 접속되며, FC Loop-A(160)에 대해 전술한 바와 유사한 방식으로 데이터를 전송하기 위한 루프를 형성한다.
도2는 도1에 도시된 디스크 기억장치 어레이 내의 디스크 기억서브시스템(6-pack)(200)의 기능블록도이다. 이 디스크 기억 서브시스템(200)은 "3-pack"으로 언급되는 2개의 섹션을 포함하고 있으며, 이들 각각의 섹션은 3개의 디스크 드라이브 모듈(202-204)과 각각의 디스크 섹션 제어기 장치(STD)(300)를 포함한다. 디스크 기억 서브시스템(6-pack)(200)은 후술되는 바와 같이 FC 루프(160,170)를 구성하기 위한 작용을 하는 6개의 파이버 채널 구성 스위치(FCS)(201,205,206,210,211,212)를 포함한다. 특히, 구성(congiguration) 스위치(201,205,206)는 FC Loop-A(160)를 구성하기 위해 이용되며, 구성 스위치(210,211,212)는 FC Loop-B(170)를 구성하기 위해 이용된다.
드라이브 모듈(202-204)은 모두 대체로 유사하며, 그중에서 참조번호 202로 표시된 모듈만이 상세하게 도시되어 있다. 드라이브 모듈(202)은 하나의 디스크 드라이브 유닛(217)과 2개의 드라이브-포트 바이패스 스위치(DS)(213,215)를 포함하고 있으며, 각각의 드라이브 스위치(213,215)는 디스크 드라이브(217)를 각각의 FC 루프(160,170)에 접속하거나 또는 그로부터 디스크 드라이브를 분리시키는 작용을 한다. 각각의 STD(300)는 FC 루프(160,170)에 대한 3개의 디스크 드라이브 모듈의 접속을 제어하도록 드라이브-포트 바이패스 스위치(213,215)를 제어하는 작용을 한다. 특히, (도2에 도시된 바와 같이) "좌측" STD(300)는 제어 접속(CTL)(250)을 통해, FC 루프(160,170)에 대한 디스크 드라이브 모듈의 접속을 제어하기 위해, 디스크 드라이브 모듈(202)의 드라이브 포트 스위치(213,215), 및 좌측 3-pack의 다른 디스크 드라이브 모듈(203,204)의 대응하는 드라이브 포트 스위치들을 제어한다. 이와 유사하게, "우측" STD(300)는 제어 접속(CTL)(251)을 통해, FC 루프(160,170)에대한 디스크 드라이브 모듈의 접속을 제어하기 위해, 우측 3-pack의 디스크 드라이브 모듈(207-209)의 드라이브 포트 스위치들을 제어한다. 또한, 좌측 STD(300)는 제어 접속(250)을 통해, 디스크 기억 서브시스템(200)을 관통하는 FC Loop-A(160)를 구성하기 위한 작용을 하는 구성 스위치(201,205,206)를 제어하고, 우측 STD(300)는 제어 접속(251)을 통해, FC Loop-B(170)를 구성하기 위한 작용을 하는 구성 스위치(210,211,212)를 제어한다. STD(300)는 DSP(101,102)에 의해 제공되는 구성 명령에 응답하여 동작하며, 이들 명령은 후술하는 바와 같이 DSP가 버스(150)를 통해 수신한다.
이제, 도2를 참조하여 디스크 기억 서브시스템(6-pack)(200)을 관통하는 FC Loop-A(160)에 대한 경로를 설명한다. 디스크 기억 서브시스템(200)의 좌측에 도시된 루프 세그먼트(161,166)와 디스크 기억 서브시스템(200)의 우측에 도시된 루프 세그먼트(161,165)는 디스크 기억 서브시스템(200)을 FC Loop-A(160)에 직렬로 접속하기 위한 외부 접속을 제공한다. 디스크 기억 서브시스템(200)은 루프 세그먼트(161,165)를 통해 데이터를 수신하고, 루프 세그먼트(162,166)를 통해 데이터를 송신한다. FC Loop-A(160)가 횡단 모드로 구성되면, 각각의 구성 스위치(201,205,206)도 횡단 모드가 되도록 좌측 STD(300)에 의해 프로그램된다. 여기서,
(i) DSP(101)로부터 DSP(102)로의 경로에 대해,
(a) 구성 스위치(201)는 세그먼트(161)를 세그먼트(252)에 접속하고, 이 세그먼트(252)는 데이터를 디스크 드라이브 모듈(202)로 전달하도록 접속되며, 각각의디스크 드라이브 모듈(202,203)은 각각의 세그먼트(255,256)를 통해 그 다음 디스크 드라이브 모듈(203,204)로 데이터를 전달하고, 디스크 드라이브 모듈(204)은 세그먼트(257)를 통해 구성 스위치(205)로 데이터를 전달한다.
(b) 구성 스위치(205)는 세그먼트(257)를 세그먼트(258)에 접속하고, 이 세그먼트(258)는 데이터를 구성 스위치(206)로 전달하도록 접속된다.
(c) 구성 스위치(206)는 세그먼트(258)를 세그먼트(162)에 접속한다.
(ii) DSP(102)로부터 DSP(101)로의 경로에 대해,
(a) 구성 스위치(206)는 세그먼트(165)를 세그먼트(259)에 접속하고, 이 세그먼트(259)는 데이터를 디스크 드라이브 모듈(207)로 전달하도록 접속되며, 각각의 디스크 드라이브 모듈(207,208)은 각각의 세그먼트(260,261)를 통해 그 다음 디스크 드라이브 모듈(208,209)로 데이터를 전달하고, 디스크 드라이브 모듈(209)은 세그먼트(262)를 통해 구성 스위치(205)로 데이터를 전달한다.
(b) 구성 스위치(205)는 세그먼트(262)를 세그먼트(263)에 접속하고, 이 세그먼트(263)는 데이터를 구성 스위치(201)로 전달하도록 접속된다.
(c) 구성 스위치(201)는 세그먼트(263)를 세그먼트(166)에 접속한다.
FC Loop-A(160)에 있어서, 좌측 STD(300)는 각각의 구성 스위치(201,205,206)를 바이패스 모드("루프백(loopback)" 모드로서도 언급됨)가 되도록 개별적으로 프로그램할 수 있다. 구성 스위치(201)가 바이패스 모드에 있으면, 그것은 세그먼트(263)를 세그먼트(252)에 접속하고, 세그먼트(252,263)으로부터 세그먼트(161,166)를 각각 분리시킨다. 이러한 상태에서, DSP(101)는 디스크 기억서브시스템(200) 및, 그 디스크 기억 서브시스템(200)과 DSP(102) 사이의 FC Loop-A(160)나 DSP(102) 자체에 접속될 수도 있는 다른 장치들을 포함하는 FC Loop-A(160)의 일부분으로부터 분리되게 된다. 그러나, 구성 스위치(205,206)가 횡단 모드에 있는 경우 및 디스크 기억 서브시스템(200)과 DSP(102) 사이에 있는 장치내의 구성 스위치들이 횡단 모드에 있는 경우에, FC Loop-A(160)의 일부분은 DSP(102) 및 데이터 기억 서브시스템(200) 내의 모든 디스크 드라이브 모듈(202-204,207-209)을 포함하게 된다.
한편, 구성 스위치(206)가 바이패스 모드에 있으면, 그것은 세그먼트(258)를 세그먼트(259)에 접속한다. 이러한 상태에서, DSP(102)는 디스크 기억 서브시스템(200) 및, 그 디스크 기억 서브시스템(200)과 DSP(101) 사이의 FC Loop-A(160)나 DSP(101) 자체에 접속될 수도 있는 다른 장치들을 포함하는 FC Loop-A(160)의 일부분으로부터 분리되게 된다. 그러나, 구성 스위치(201,205)가 횡단 모드에 있는 경우 및 디스크 기억 서브시스템(200)과 DSP(101) 사이에 있는 장치내의 구성 스위치들이 횡단 모드에 있는 경우에, FC Loop-A(160)의 일부분은 DSP(101) 및 데이터 기억 서브시스템(200) 내의 모든 디스크 드라이브 모듈(202-204,207-209)을 포함하게 된다.
마지막으로, 구성 스위치(205)가 바이패스 모드에 있으면, 그것은 세그먼트(257)를 세그먼트(263)에 접속하고 세그먼트(262)를 세그먼트(258)에 접속한다. 이러한 상태에서, DSP(101)는 우측 3-pack을 구성하는 디스크 드라이브 모듈(207-209)를 포함하는 FC Loop-A(160)의 일부분으로부터 분리되게 되고,DSP(102)는 좌측 3-pack을 구성하는 디스크 드라이브 모듈(202-204)을 포함하는 FC Loop-A(160)의 일부분으로부터 분리되게 된다. 그러나, 구성 스위치(201)가 횡단 모드에 있는 경우 및 디스크 기억 서브시스템(200)과 DSP(101) 사이에 있는 장치내의 구성 스위치들이 횡단 모드에 있는 경우에, FC Loop-A(160)의 제1 부분은 DSP(101) 및 디스크 드라이브 모듈(202-204)을 포함하게 된다. 이와 유사하게, 구성 스위치(206)가 횡단 모드에 있는 경우 및 디스크 기억 서브시스템(200)과 DSP(102) 사이에 있는 장치내의 구성 스위치들이 횡단 모드에 있는 경우에, FC Loop-A(160)의 제2 부분은 DSP(102) 및 디스크 드라이브 모듈(207-209)을 포함하게 된다. 따라서, 구성 스위치(205)가 바이패스 모드에 있을 때, FC Loop-A(160)는 2개의 별도의 파이버 채널 루프로 구성될 수 있다.
우측 STD(300)는 스위치(201,205,206) 각각과 관련하여 전술한 바와 유사한 방식으로 FC Loop-B(170)를 구성하도록 스위치(210,211,212)를 프로그램할 수 있다.
디스크 드라이브 모듈(202) 내의 각각의 드라이브-포트 바이패스 스위치(213,215)도 역시 횡단 모드 또는 바이패스 모드에 있게 되도록 좌측 STD(300)에 의해 개별적으로 프로그램될 수 있다. 각각의 드라이브-포트 바이패스 스위치(213,215)가 횡단 모드에 있으면, 디스크 드라이브(217)는 각각의 FC Loop-A(160) 및 FC Loop-B(170)로 접속되지만, 각각의 드라이브-포트 바이패스 스위치(213,215)가 바이패스 모드에 있으면, 디스크 드라이브(217)는 각각의 FC Loop-A(160) 및 FC Loop-B(170)로 접속되지 않는다. 특히, 드라이브-포트 바이패스스위치(213)가 횡단 모드에 있으면, 그것은 세그먼트(252)를 세그먼트(253)에 접속하고, 이 세그먼트(253)는 디스크 드라이브(217)의 포트A(214)에 접속되며, 따라서, 세그먼트(252)로부터 디스크 드라이브(217)로 데이터를 전달하게 된다. 포트A(214)는 또한 세그먼트(254)에도 접속되며, 드라이브-포트 바이패스 스위치(213)는 횡단 모드에 있을 때, 세그먼트(254)를 세그먼트(255)에 접속하며, 따라서, 포트A(214)로부터 세그먼트(255) 및 데이터 기억 서브시스템(200) 내의 다음 디스크 드라이브 모듈(203)로의 데이터의 전달을 용이하게 한다. 한편, 드라이브-포트 바이패스 스위치(213)가 바이패스 모드에 있으면, 그것은 세그먼트(252)를 직접 세그먼트(255)에 접속하고, 세그먼트(255)로부터 적어도 세그먼트(254)를 분리시키며, 따라서, 세그먼트(252)로부터의 데이터는 세그먼트(255) 및 데이터 기억 서브시스템(200) 내의 다음 디스크 드라이브 모듈(203)로 전달된다. 이와 유사하게, 드라이브-포트 바이패스 스위치(215)는 횡단 모드에 있을 때, 포트B(216)를 FC Loop-B(170)에 접속하여, 디스크 드라이브(217)로의 데이터 전송을 용이하게 하고, 바이패스 모드에 있을 때에는 포트B(216)를 바이패스한다. 또한, 다른 디스크 드라이브 모듈(203,204,207-209) 내의 대응하는 드라이브-포트 바이패스 스위치(별도로 도시되지 않음)도 역시 그들의 디스크 드라이브(별도로 도시되지 않음)를 각각의 FC 루프(160,170)에 선택적으로 접속하거나 그것을 바이패스하도록 유사하게 동작한다.
STD(300)들의 구조도 대체로 유사하며, 그중 하나, 특히 (도2에 도시된 바와 같이) 좌측 STD(300)에 대해서만 상세하게 설명한다. 도3은 좌측 STD(300)의 기능블록도이다. 전술한 바와 같이, 좌측 STD(300)는 CTL 경로(250)을 통해, 디스크 드라이브 모듈(202-204)을 포함하는 좌측 3-pack과 FC Loop-A(160)에 대한 구성 스위치(201,205,206)를 제어한다. STD(300)는 일실시예에서 3개의 범용 I/O 포트를 구비한 범용 마이크로컨트롤러인 STD 마이크로컨트롤러(301)에 의해 제어되며, 여기서, 3개의 포트중 하나는 DSP(101,102)로부터 정보를 수신하고 DSP(101,102)로 정보를 전송하는 것을 용이하게 하기 위해 인터페이스/버스 확장기(extender)(307)를 통해 버스(150)에 접속되며, 이에 대해서는 도5와 관련하여 상세하게 후술하게 된다.
마이크로컨트롤러(301)는 내부 메모리에 유지되는 펌웨어 프로그램을 실행하며, 이에 대해서는 도9 내지 도13과 관련하여 상세하게 후술한다. 마이크로컨트롤러(301)는 접속(351,352,353)을 통해 드라이브 전원 스위치(302)의 스위치0,1,2의 스위치 셋팅을 각각 모니터한다. 이것은 또한, 접속(354)을 통해 온도 센서(303)에 의해 판단되는 바와 같은, 디스크 기억 서브시스템(6-pack)(200)의 하우징(별도로 도시되지 않음) 내부의 엔클로져 온도를 모니터한다. STD 마이크로컨트롤러(301)는 일련의 출력 레지스터(308)로 데이터를 로딩함으로써, 구성 스위치(201,205,206) 및 드라이브-포트 바이패스 스위치(213,215)의 상태를 포함하여 여러 구성요소를 제어한다. 마이크로컨트롤러(301)는 접속(360)을 통해 출력 레지스터(308)로 로딩될 데이터를 OUT_DATA 신호의 형태로 제공한다. 다음에, 출력 레지스터(308)는 접속(361)을 통해 제공되는 OUT_CTL 출력 제어 신호에 의해 제어된다. STD(300)는 또한 일련의 발광 다이오드(309)를 포함하고 있으며, 이들 다이오드의 상태는 STD(300)에 의해 제어되는 디스크 드라이브 모듈(202-204)의 전원 상태의시각적 디스플레이를 제공하기 위해 각각 접속(362,363,364)을 통해 출력 레지스터(308)로부터 제어된다. 또한, STD는 온도를 디스플레이하는 디스플레이(310)를 포함하고 있으며, 스위치 뱅크(bank)(304)의 셋팅은 경로(359)를 통해 출력 레지스터(308)로부터 제어된다. 스위치 뱅크(304)는 버스(150) 상의 드라이브 모듈(202-204) 및 STD(300)에 대한 어드레스를 제공한다.
각각의 파이버 채널 구성 스위치(201,205,206)의 모드는 CTL(250)의 접속(365) 부분을 통해 출력 레지스터(308) 내의 정보에 의해 제어된다. 디스크 드라이브 모듈(202)의 드라이브-포트 바이패스 스위치(213,215)와 디스크 드라이브 모듈(203,204)의 대응하는 드라이브-포트 바이패스 스위치의 모드는 CTL(250)의 접속(366) 부분을 통해 제공되는 DS_CTL 디스크 제어 신호에 의해 출력 레지스터(308)로부터 제어된다. 이와 유사하게, 드라이브 모듈(202-204)의 드라이브 전원은 CTL(250)의 전원 제어 접속(367) 부분을 통해 PWR_CTL 전원 제어 신호를 제공하는 출력 레지스터(308)에 의해 제어된다. STD(300)는 또한, 각각의 디스크 드라이브 모듈(202-204)의 드라이브-포트 바이패스 스위치 각각에 대한 모드 및 각각의 드라이브 모듈(202-204)의 연산 상태를 디스플레이하는 일련의 드라이브 상태 LED(306)를 포함하고 있다. 각각의 드라이브-포트 바이패스 스위치에 대한 모드를 식별하는 LED(306)는 접속(368)을 통해 출력 레지스터(308)에 의해 제어되며, 디스크 드라이브 모듈(202-204)의 연산 상태를 식별하는 LED(306)는 접속(356)을 통해 수신되는 DRV_STATUS 드라이브 상태 신호에 의해 제어된다.
마이크로컨트롤러(301)는 또한, 일련의 입력 레지스터(305)를 통해 디스크 드라이브(202-204)의 연산 상태를 수신하고 그것을 모니터한다. 다음에, 입력 레지스터(305)는 각각의 드라이브 모듈(202-204)로부터의 연산 상태 정보를 나타내는 DRV_STATUS 드라이브 상태 신호를 수신한다. 입력 레지스터(305)는 이 정보를 라인(358)을 통한 IN_CTL 입력 제어 신호의 제어하에, 라인(357)을 통해 IN_DATA 입력 데이터 신호로서 마이크로컨트롤러(301)로 제공한다. 입력 레지스터(305)는 또한 라인(355)을 통해 스위치(304)의 스위치 셋팅을 수신한다.
도4는 DSP(101,102)에 사용되는 STC(400)(도1)의 기능블록도이다. 전술한 바와 같이, STC는 데이터 기억 서브시스템(6-pack)(200)의 STD(300)로 명령을 전송하고, 그로부터 버스(150)를 통해 상태 정보 및 다른 정보를 수신한다. 또한, DSP(101,102)의 STC(400)들은 FC 루프(160,170)의 구성의 DSP(101,102) 사이에서와 같은 조정(coordination)을 용이하게 하기 위해 그 사이에서 정보를 전달한다. STC(400)는 마이크로컨트롤러(401), 멀티플렉서/디멀티플렉서(402), 메모리(403) 및 버스 인터페이스(404)를 포함한다. 마이크로컨트롤러(401)는 메모리에 내재하고 있는 펌웨어 프로그램을 실행한다. 이러한 펌웨어 프로그램과 관련하여 수행되는 연산에 대한 세부사항은 도6, 도7 및 도8과 관련하여 상세하게 후술된다. 핸들러(1400)(도1)는 ISA 버스(153)의 제어라인(452)을 통해 제공되는 STC_CTL 제어 신호를 이용하여 마이크로컨트롤러(401)를 제어한다. 마이크로컨트롤러(401)는 또한, 핸들러(1400)의 제어하에 처리를 위해 로컬 CPU(111)로 인터럽트를 전송하기 위해 라인(451)을 통한 전송을 위해 ST_STAT_INT 상태 인터럽트 신호를 발생할 수 있다.
멀티플렉서/디멀티플렉서(402)는 ST_RAM_ACC 메모리 억세스 제어 신호의 제어하에, 마이크로컨트롤러(401) 및 STC(400) 외부의 구성요소, 특히, 파이버 채널 호스트 어댑터(105)의 로컬 CPU(111)에 의한 메모리(403)로의 억세스를 선택적으로 제어한다. 마이크로컨트롤러(401)는 어드레스/데이터 버스(454)를 통해 멀티플렉서/디멀티플렉서(402)의 제1 입출력 단자에 접속되며, 브릿지(109)를 STC(400)에 접속하는 ISA 버스(153)의 일부분(453)을 형성하는 어드레스/데이터 버스(453)는 멀티플렉서/디멀티플렉서(402)의 제2 입출력 단자에 접속된다. 멀티플렉서/디멀티플렉서(402)의 입출력 단자는 어드레스/데이터 버스(456)를 통해 메모리(403)에 접속된다. 마이크로컨트롤러(401)가 예를 들어, ST_RAM_ACC 메모리 억세스 제어 신호를 표명하는(assert) 경우에, 멀티플렉서/디멀티플렉서(402)는 버스(454,456) 사이의 신호를 결합시킨다. 이 경우에, 마이크로컨트롤러(401)는 멀티플렉서/디멀티플렉서(402)가 기억을 위해 마이크로컨트롤러(401)로부터 메모리(403)로 전달하는 어드레스인 메모리(403) 내의 어드레스를 제공할 수 있다. 만일 이 어드레스가 마이크로컨트롤러(401)로부터의 데이터가 기억될 메모리(403) 내의 위치를 식별하는 경우에, 마이크로컨트롤러(401)는 또한 버스(454)를 통해 데이터를 전달하게 되며, 이 데이터는 멀티플렉서/디멀티플렉서(402)가 버스(456)를 통해 메모리(403)로 전달하게 된다. 한편, 만일 이 어드레스가 그곳으로부터 마이크로컨트롤러(401)로 데이터가 전송될 메모리(403) 내의 위치를 식별하는 경우에, 메모리(403)는 그 위치로부터의 데이터를 버스(456)를 통해 전송하게 되며, 이 데이터는 멀티플렉서/디멀티플렉서(402)가 버스(454)를 통해 마이크로컨트롤러(401)로 전송하게 된다. 마이크로컨트롤러(401)가 ST_RAM_ACC 메모리 억세스 제어 신호를 취소하는(negate) 경우에도, 버스(453,456)를 통한 ISA 버스(153)와 메모리(403) 사이의 어드레스 및 데이터의 전송과 관련하여 이와 유사한 연산이 이루어지게 된다.
버스 인터페이스(404)는 STC(400)를 버스(150)에 인터페이스하는 작용을 한다. 마이크로컨트롤러(401)는 라인(450)을 통해 버스 인터페이스(404)에 접속된다. 마이크로컨트롤러(401)는 라인(450)을 통해 버스 인터페이스(404)로 정보를 전송함으로써, 각각의 디스크 기억 서브시스템(6-pack)(200)의 STD(300)에 의한 실행을 위한 명령을 포함하여 정보가 버스(150)를 통해 전송될 수 있도록 할 수 있다. 이와 유사하게, 버스 인터페이스(404)는 버스(150)로부터, 각각의 디스크 기억 서브시스템(200)의 STD(300)로부터 수신되는 상태 정보를 포함하는 정보를 수신하고, 그것(즉, 정보)을 라인(450)을 통해 마이크로컨트롤러(401)로 제공할 수 있다.
STC(400) 및 STD(300)는 버스(150)를 통해 패킷의 형태로 정보를 전송한다. 일실시예에서, 버스(150)는 Philips Semiconductor Corporation에 의해 규정된 I2C 직렬 데이터 버스의 형태로 구현되며, 이 실시예에서 버스(150)를 통해 전송되는 패킷은 일반적으로 I2C 표준에 따른다. 도5는 버스(150)를 통해 전송되는 패킷(500)의 포맷을 도시하고 있다. 패킷(500)은 스타트 비트(501), 수신지(destination) 어드레스 상태 필드(510), 발신지(source) 어드레스 상태 필드(520), "opcode(operation code)(연산 코드)" 상태 필드(530), 길이 상태 필드(540), 데이터 상태 필드(550), 첵크섬(checksum) 상태 필드(560) 및 스톱 비트(503)를 포함하여, "프레이밍 상태(framing states)"로 언급되는 일련의 필드를 포함한다. 스타트 비트(501)는 패킷(500)의 개시점을 식별하고, 스톱 비트는 패킷의 종료점을 식별한다. 각각의 다른 상태 필드(510,520,530,540,550,560)는 파라미터 서브-필드{(511,512)(상태 필드 510의 경우), (521,522)(상태 필드 520의 경우), (531,532)(상태 필드 530의 경우), (541)(상태 필드 540의 경우), (551,561)}를 각각 포함하며, 그 다음에는 확인응답(acknowlegement) 비트(A-bit)(502)가 뒤따른다. 도5에서 사선으로 도시된, 상태 필드(501,503)와 서브-필드{(511,512), (521,522), (531,532), (542), (551,561)}의 내용은 발신지 장치에 의해 제공된다. 한편, 도5에서 사선이 없이 도시된 서브-필드(502)의 내용은 수신지 장치에 의해 제공된다.
패킷(500)에서, 수신지 어드레스 상태 필드(510)("슬레이브(slave) 어드레스" 상태 필드로도 언급됨)는 수신지 어드레스(Dadr) 서브-필드(511), 판독-기록 비트(R/W)(512) 및 확인응답 서브-필드(502)를 포함한다. 발신지 어드레스 상태 필드(520)는 발신지 어드레스(Sadr) 서브-필드(521), 장치/호스트 비트(D/H)(522) 및 확인응답 비트(502)를 포함한다. D/H 비트(522)가 셋트되면( 값 "1"에 대응함), 그 패킷은 STD(300)에 의해 전송된 것이며, 반면에, D/H 비트(522)가 클리어(clear)되면(값 "0"에 대응함), 그 패킷은 STC(400)에 의해 전송된 것이다. 수신지 장치는 전술한 A-비트(502)의 상태를 제어한다. "opcode" 상태 필드(530)는 상태/명령 비트(S/C)(531), 연산 코드 서브-필드(532) 및 확인응답 비트(502)를 포함한다. 길이 상태 필드(540)는 길이 서브-필드(541)와 확인응답 비트(502)를 포함한다. 만일 길이 서브-필드가 비-제로(non-zero) 값을 포함하면, 데이터 상태 필드(550)가 길이 상태 필드(540)를 뒤따르게 되고, 이 데이터 상태 필드는 데이터서브-필드(551)와 확인응답 비트(502)를 포함하게 된다. 첵크섬 상태 필드(560)는 길이 필드가 패킷(500)이 데이터 상태 필드(550)를 포함하고 있다는 것을 나타내는지 여부에 따라 데이터 상태 필드(550) 또는 길이 상태 필드(540)를 뒤따르게 된다. 어느 경우에도, 첵크섬 상태 필드(560)는 첵크섬 서브-필드와 확인응답 비트(502)를 포함한다. 첵크섬 상태 필드(560)를 뒤따르는 스톱 비트(P)(503)는 STbus 패킷(500)을 종료시킨다.
전술한 바와 같이, 패킷(500)은 명령 또는 상태 응답을 포함할 수 있다. DSP(101 또는 102)의 파이버 채널 호스트 어댑터(105)의 STC(400)(명령의 경우)나 또는 디스크 기억 서브시스템(200)의 STD(300)(상태 응답의 경우)를 포함할 수 있는 발신지 장치는 버스(150)에 대해 중재하고, 패킷을 수신지 장치로 전송한다. 수신지 장치는 Dadr 필드(511)가 장치의 어드레스 또는 일반 호출(General Call) 어드레스(00H)를 포함하는 경우에 수신지 장치로부터 패킷을 수신할 수 있다. 명령 전송을 개시하는 장치는 코맨더(Commander)로 불리고, 상태응답 전송을 개시하는 장치는 리스펀더(Responder)로 불린다. 발신지 장치는 코맨더로서 명령을 포함하는 패킷을 하나 또는 그 이상의 수신지 장치로 전송한 이후에, 수신지 장치로부터 상태응답 패킷을 수신할 것을 예상한다. 명령 패킷을 수신한 수신지 장치는 리스펀더가 되며, 정상 상태 응답 또는 비정상 상태 응답을 코맨더에게 반송한다. STC(400)는 예를 들어, 코맨더와 리스펀더 모두로서 작용할 수 있지만, STD(300)는 단지 리스펀더로서 작용한다. 코맨더가 상태 응답을 수신하면, 그것(특히, 마이크로컨트롤러 401)은 각각의 핸들러(1400)에 의한 검색 및 처리를 위해 메모리(403) 내의 상태 표시를 로딩한다. 명령 패킷에 대해, 만일 버스(150)에 접속된 장치가 다음과 같이 판단하면, 즉,
* 수신지 어드레스 서브-필드(511)가 버스(150) 상의 수신지 고유의 어드레스나 또는 일반 호출 어드레스(00H)를 포함하고,
* 패킷이 전술한 바와 같은 패킷 포맷에 합치되고,
* 서브-필드 내의 첵크섬이 그 장치에 의해 발생된 바와 같은 책크섬 값에 대응하고,
* 패킷이 후술되는 바와 같은 소정의 프레이밍 에러 또는 전송 타임-아웃 에러를 포함하고 있지 않다는 것으로 판단하면,
그 장치는 수신지 장치로서 패킷을 수신하고, 그렇지 않은 경우에 장치는 그 패킷을 폐기하게 된다.
패킷의 전송과 관련하여 몇가지 형태의 에러, 특히, 프레이밍(framing) 에러 및 전송 타임-아웃 에러가 발생할 수 있다. 패킷 전송이 S-비트 프레이밍 상태(501)와 함께 시작되지만, 패킷의 잔여부분이 도5와 관련하여 전술한 바와 같은 패킷 프레이밍 시퀀스에 합치되지 않는 경우에 프레이밍 에러가 발생한다. 전송 타임-아웃 에러는 패킷 프레이밍 상태 중 하나가 소정의 타임-아웃 주기 내에서 완료되지 않는 경우에 발생한다. 패킷 전송 예외(exceptions)는 다음과 같이 처리된다.
* 코맨더로서 동작하는 발신지 장치는 스톱 비트(P) 프레이밍 상태(503)를 이용하여 전송을 종료하게 되고, 소정의 시간 지연 이후에, 명령 패킷의 전송을 재시도하게 된다. 만일 재시도와 관련하여 에러가 발생하면, 발신지 장치는 명령 기능을중지하고, 핸들러(1400)에 의해 처리될 수 있는, 에러를 나타내는 상태 표시를 메모리(403)에 로딩하게 된다.
* 리스펀더로서 동작하는 발신지 장치는 스톱 비트(P) 프레이밍 상태(503)를 이용하여 전송을 종료하게 되고, 응답 패킷을 전송하기 위해 다시 시도하지 않게 된다. 코맨더는 그것이 응답 패킷을 대기하는 타임-아웃 에러를 검출할 때, 이러한 예외를 처리한다.
* 코맨더 또는 리스펀더로서 동작하는 수신지 장치는 스톱 비트(P) 프레이밍 상태(503)를 이용하여 전송을 종료하게 되고, 미완성(incomplete) 패킷을 폐기하게 된다.
전술한 바와 같이, DSP(101,102)의 파이버 채널 호스트 어댑터(105)의 STC(400)는 핸들러(1400)로부터의 명령에 응답하여 동작한다. 이제, 일실시예에서 핸들러(1400)에 의해 제공될 수 있는 다양한 형태의 명령에 대해 설명한다. 일반적으로, 핸들러(1400)는 STC(400), 특히 마이크로컨트롤러(401)에 의한 검색 및 실행을 위해 명령이 메모리(403)로 로딩될 수 있도록 한다. 마이크로컨트롤러(401)는 명령을 실행한 이후에, 메모리(403)에 상태 표시를 저장하고, 핸들러(1400)의 제어하에 처리를 가능하게 하기 위해 ST_STAT_INT 인터럽트 신호를 표명하게(assert) 된다. 핸들러(1400)는 상태 표시가 메모리(403)로부터 검색될 수 있도록 하고, 그 명령이 완료되었는지 판단하기 위해 처리될 수 있도록 한다. 다양한 형태의 명령은 다음을 포함한다.
(i) STC INIT(initialization) 명령, 이것은 STC(400)가 버스(150)로의 인터페이스를 할 수 있도록 하고 그것이 그 자체로 할당한 비할당 장치 어드레스에 대한 버스(150)의 스캐닝을 개시할 수 있도록 하고, 버스(150)에 접속된 다른 장치에 의해 어떤 장치 어드레스가 사용되는지 판단하기 위해 스캐닝을 계속할 수 있도록 한다. 마이크로컨트롤러(401)는 명령의 실행을 완료하면, 상태 표시로서, 어떤 장치가 존재하는 것으로 발견되었든지 간에 모든 유효 장치 어드레스의 리스트와 그 고유의 자체-할당 어드레스를 로딩하게 된다. 이후에, 마이크로컨트롤러는 다른 명령을 실행하고 버스(150)로부터 패킷을 수신할 수 있다.
(ii) STC ATTN_POLL_START(attention poll start) 명령, 이것은 STC(400)가 그 어드레스가 메모리(403)에서 핸들러에 의해 의해 제공되는 장치 어드레스의 리스트 중에 있는, 버스(150)에 접속된 장치의 어텐션 폴링(attention polling)을 시작할 수 있도록 한다. 마이크로컨트롤러(401)는 이 어드레스 리스트를 내부 메모리에 저장하고, 그 리스트가 소정의 조건을 충족시키는지 판단하게 된다. 만일 마이크로컨트롤러(401)에 의해 그 어드레스 리스트가 충족시키는 것으로 판단하면, 그것은 폴링을 시작하고, 이후에, 상태 표시로서 그 폴링이 성공적이었는지 여부에 관한 표시를 로딩하게 된다. 만일 마이크로컨트롤러(401)에 의해 그 폴링이 성공적인 것으로 판단하면, 그것은 STC(400)가 어텐션 명령을 포함하는 패킷(즉, opcode(532) 필드가 어텐션 명령을 나타내는 패킷)을 버스(150)를 통해 리스트된 각각의 장치로 전송할 수 있도록 하고, 예를 들어, 다수의 폴링 조건 중 하나가 검출될 때까지 폴링을 계속한다.
* 일반 헬쓰 체킹(General Health Checking) --- STC(400)는 특정 수신지 어드레스를 이용하여 어텐션 명령을 가진 패킷을 전송하고, 그 어드레스를 가진 장치가 버스(150)에 접속되어 있지 않다는 것을 판단하거나, 또는 만일 그 어드레스를 가진 장치가 버스(150)에 접속되어 있다면, 그 장치는 실행불가능한 것이 아니라는 것을 판단한다.
* 장치가 어텐션을 요구함 --- STC(400)는 특정 수신지 어드레스를 이용하여 어텐션 명령을 가진 패킷을 전송하고, 그 응답 패킷으로부터, 그 장치가 어텐션을 요구한다는 것을 판단한다. 리스펀더로서의 이 장치는 그 상태-응답 패킷에 어텐션 상태 인디케이터를 셋팅함으로써 그것이 어텐션을 요구한다는 것을 나타내게 된다. STD(300)는 예를 들어, 그것이 그 드라이브 전원 스위치(302)(도3) 중 하나로의 전이를 검출할 때 이것을 수행할 수 있으며, 이 경우에 그것은 이 스위치에 대한 어텐션 상태 인디케이터를 셋팅하게 된다.
* 장치 존재 모니터링(Device Presence Monitoring) --- STC(400)는 특정 수신지 어드레스를 이용하여 어텐션 명령을 가진 패킷을 전송하고, 그 응답 패킷으로부터, 그 어드레스를 가진 장치가 존재한다는 것을 판단한다. 이것은 예를 들어, 폴링이 시작된 이후에 그 수신지 어드레스를 가진 장치가 존재하게 되는지 판단하기 위해 이용될 수 있으며, 이것은 예를 들어, 폴링이 시작된 이후에 버스(150)에 접속된 장치가 파워-업(power-up)되는 경우에 발생할 수 있다.
마이크로컨트롤러(401)는 이러한 조건들 중 하나를 검출한 이후에, 상태 표시를 메모리(403)에 로딩하게 된다. 만일 마이크로컨트롤러(401)가 이들 폴링 서비스 중 하나에 대한 상태 표시를 로딩하면, 그 어드레스에 대해서만 폴링이 중단되고,따라서, 각각의 상태 포스팅(status postings)을 방지하게 된다. 핸들러(1400)는 이 명령을 다시 발생함으로써 특정 장치에 대한 폴링을 다시 가능하게 할 수도 있는데, 이 핸들러는 일반적으로 어텐션 상태의 형태에 대해 필요하다고 여겨지는 적절한 동작을 취한 이후에 그렇게 한다.
(iii) STC ATTN_POLL_STOP(attention poll stop) 명령, 이것은 마이크로컨트롤러(401)가 ATTN_POLL_START 명령에 응답하여 개시되었던 어텐션 폴링의 순서적인 중단(orderly stop)을 개시할 수 있도록 한다. STC(400)는 일단 그것이 현재의 장치 어드레스의 폴링을 완료하면 중단되며, 다음에 완료 상태 표시를 메모리에(403)에 로딩한다.
(iv) SEND USER PACKET 명령, 이것은 마이크로컨트롤러(401)가 버스(150)를 통해, 그 버스(150)에 접속된 수신지 장치와 같은 다른 장치로 이용자 지정 패킷(즉, S/C 서브-필드(531)와 opcode 서브-필드(532)가 이용자-지정 조건을 나타내는 패킷)의 전송을 개시할 수 있도록 한다. 이 명령은 예를 들어, 진단(diagnostic) 목적을 위해 상이한 DSP(101,102)의 STC(400)들 사이에서의 전송을 위해, 또는 그렇지 않으면 디스크 기억 서브시스템(6-pack)(200)의 STD(300)에 제공되지 않는 형태의 명령을 전송하기 위해 이용될 수 있다. 마이크로컨트롤러(401)는 수신지 장치가 리스펀더로서 적절한 상태 응답 패킷을 반송한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(v) STD INQUIRY 명령, 이것은 마이크로컨트롤러(401)가 버스(150)를 통해 지정된 STD(300)로 질의(Inquiry) 명령을 포함하는 패킷의 전송을 개시할 수 있도록한다. STD(300)는 다음에, 질의 상태 응답 패킷을 반송하게 되며, 이것에 의해 파이버 채널 구성 스위치 및 드라이브-포트 바이패스 스위치의 현재 모드 셋팅이 제어된다. STD(300)는 또한, 디스크 기억 서브시스템(200) 내의 온도 및 연산 상태, 각각의 드라이브의 현재 파워-온 상태 및 STD(300)의 일반 에러 상태에 관련된 상태 정보를 질의 상태 응답 패킷에 포함시킨다. 마이크로컨트롤러(401)는 그것이 리스펀더로부터 예상되는 상태 응답 패킷을 수신한 이후에, 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(vi) 모드 선택(Mode Select) 명령 그룹으로부터의 다수의 다른 명령, 이 그룹내의 명령은, 제1 데이터 서브-필드(551)에 위치되며, 명령 형태를 정의하는, 모드 선택 기능 바이트로 불리는 서브-명령 필드를 포함한다. 이 그룹내의 예시적인 일부 명령은 다음을 포함한다.
(a) STD FCS(Fibre Channel configuration switch control) 명령, 이것은 마이크로컨트롤러(401)가 지정된 STD(300)로 모드 선택 기능 바이트를 가진 모드 선택 명령을 포함하는 패킷의 전송을 개시할 수 있도록 한다. 이 명령은 STD(300)로 하여금 각각 FC Loop-A(160) 또는 FC Loop-B(170)를 구성하도록 지정된 STD(300)에 의해 제어되는 파이버 채널 구성 스위치(201,205,206 또는 210,211,212)(도2)를 프로그램할 수 있도록 한다. 마이크로컨트롤러(401)는 그것이 리스펀더인 STD(300)로부터 모드 선택 상태 응답 패킷을 수신한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(b) STD DS(drive-port bypass switch configuration) 명령, 이것은 마이크로컨트롤러(401)가 지정된 STD(300) 장치로 DS 모드 선택 기능 바이트를 가진 모드 선택 명령을 포함하는 패킷의 전송을 개시할 수 있도록 한다. 이 명령은 STD(300)로 하여금 각각의 드라이브 모듈의 드라이브-포트 바이패스 스위치를 각각의 바이패스 모드 또는 횡단 모드로 구성하도록 지정된 STD(300)에 의해 제어되는 각각의 DS 스위치(213,215)(도2)를 프로그램할 수 있도록 한다. 마이크로컨트롤러(401)는 그것이 리스펀더인 STD(300)로부터 모드 선택 상태 응답 패킷을 수신한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(c) STD DRIVE POWER ON/OFF 명령, 이것은 마이크로컨트롤러(401)가 지정된 STD(300) 장치로 DRIVE POWER ON/OFF 모드 선택 기능 바이트를 가진 모드 선택 명령을 포함하는 패킷의 전송을 개시할 수 있도록 한다. 이 명령은 STD(300)로 하여금 도2와 관련하여 전술한 바와 같이, 지정된 드라이브의 전원을 온/오프할 수 있도록 한다. 마이크로컨트롤러(401)는 그것이 리스펀더인 STD(300)로부터 모드 선택 상태 응답 패킷을 수신한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(d) STD FLASH LED 명령, 이것은 마이크로컨트롤러(401)가 지정된 STD(300) 장치로 Flash LED 모드 선택 기능 바이트를 가진 모드 선택 명령을 포함하는 패킷의 전송을 개시할 수 있도록 한다. 이 명령은 그 패킷에 제공된 장치 어드레스와 관련된 드라이브 모듈(202-204) 중 하나와 관련된 LED(306,309)(도3)의 플래싱(flashing)을 인에이블 또는 디스에이블시킨다. 마이크로컨트롤러(401)는 그것이 리스펀더인 STD(300)로부터 모드 선택 상태 응답 패킷을 수신한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
(e) STD SENSE 명령, 이것은 마이크로컨트롤러(401)가 지정된 STD(300) 장치로 SENSE 모드 선택 기능 바이트를 가진 모드 선택 명령을 포함하는 패킷의 전송을 개시할 수 있도록 한다. 이 명령은 지정된 STD(300)로 하여금 그것이 그 연산 상태를 반송하는 응답 패킷을 생성할 수 있도록 한다. 마이크로컨트롤러(401)는 그것이 리스펀더인 STD(300)로부터 모드 선택 상태 응답 패킷을 수신한 이후에 메모리(403)에 정상 완료 상태 표시를 로딩한다.
도6 내지 도8은 STC의 마이크로컨트롤러(401)(도4)에 의해 수행되는 연산을 도시하는 흐름도이다. 도6 및 도7은 실행(executive) 루프(600)와 관련하여 수행되는 연산을 도시하고, 도8은 버스(150)를 통한 패킷의 송신 및 수신을 제어하는 상태 머신에 대한 흐름도이다.
도6을 참조하면, 처음에는 리셋 신호(698)에 의해 마이크로컨트롤러(401)는 펌웨어 리셋 상태(649)로 들어가며, 여기서, 일련의 마이크로다이아그노스틱(microdiagnostic) 테스트가 수행된다. 만일 테스트를 통과하면, 마이크로컨트롤러(401)는 소프트웨어로부터 명령을 수용하기 위한 콘텍스트(context)를 준비하고, 다음에 단계(699)를 통해 실행 루프(600) 자체로 이동한다. 마이크로컨트롤러(401)는 실행 루프(600)에서 동작할 때, 소정의 액티비티 플래그(activity flags) 셋트의 상태를 모니터한다. 마이크로컨트롤러(401)에 의해 후술하는 바와 같은 다른 한정하는(qualifying) 상태와 함께, 액티비티 플래그가 참(true)이라는 판단이 이루어지면, 마이크로컨트롤러(401)는 각각 경로(650,656,658,659,660,753,661 또는 662)를 통해 이동하여, 후술하는 바와 같이, 액티비티 플래그와 관련된 각각의 태스크를 처리하게 된다.
마이크로컨트롤러(401)가 cmd_in_csa 플래그를 판단하여, 그것이 핸들러(1400)가 메모리(403)에 명령을 로딩했다는 것을 나타내면, 마이크로컨트롤러(401) 펌웨어는 경로(650)을 따라 "Get CMD from CSA(CSA로부터 CMD 입수)" 태스크(601)로 계속된다. 이 태스크(601)에서, 마이크로컨트롤러(401)는 메모리(403)로부터 명령을 검색하고, 다음에 경로(651)를 통해 "Decode CMD and decision(CMD 디코딩 및 판단)" 태스크(602)로 이동하여, 그 명령을 디코딩하고 그 실행을 위한 콘텍스트를 준비한다. 만일 마이크로컨트롤러(401)가 태스크(602)에서 그 명령을 STC INIT(initialization) 명령으로서 디코딩하면, 다음에 마이크로컨트롤러(401)는 경로(654)를 통해 Init_cmd 태스크(606)로 이동한다. 이 태스크(606)를 처리하는데 있어, 마이크로컨트롤러(401)는 전술한 바와 같은 STC INIT 명령을 실행하고, 다음에 경로(655)를 통해 이동하여 실행 루프(600)로 복귀한다.
만일 마이크로컨트롤러(401)가 태스크(602)를 처리하는데 있어, STC INIT 명령 이외의 명령을 디코딩하면, 마이크로컨트롤러(401)는 경로(652)를 통해 tx_buf_actv 판단 태스크(603)로 이동한다. 마이크로컨트롤러(401)는 STC INIT 명령을 제외한 모든 명령에 대해 태스크(603)를 시퀀스한다. 태스크(603)에서, 마이크로컨트롤러(401)는 tx_buf_actv(transmit buffer active) 플래그의 상태에 따라 명령을 실행할 것인지 또는 큐잉(queue)할 것인지 판단한다. 만일 마이크로컨트롤러(401)가 태스크(603)에서 tx_buf_actv 플래그가 거짓(false)인 것으로 판단하면, 마이크로컨트롤러(401)는 경로(653)를 통해 Build PKT(buildpacket) 태스크(604)로 이동하여 전송을 위해 패킷을 준비한다. 태스크(604) 다음에, 마이크로컨트롤러(401)는 경로(750)를 통해 xmt_pkt(transmit packet) 태스크(701) 내의 태스크(702)(도7에 도시됨)로 진행한다.
xmt_pkt(패킷 전송) 태스크(701)는 태스크(702,704,705)를 포함하며, 버스(150)를 통해 패킷(500)의 전송을 개시하도록 마이크로컨트롤러(401)에 의해 제어된다. 태스크(702)에서, 마이크로컨트롤러(401)는 tx_buf_actv(transmit buffer active) 플래그를 셋팅하고, 버스 전송 상태 머신(848)(도8과 관련하여 후술됨)에 의해 이용되는 전송 타임-아웃 타이머0를 인에이블시킨다. 태스크(702) 다음에, 마이크로컨트롤러(401)는 경로(751)를 통해 태스크(704)로 이동한다. 태스크(704)에서, 마이크로컨트롤러(401)는 rx_buf_bsy(receive buffer busy) 플래그의 상태를 판단한다. 만일 마이크로컨트롤러(401)가 태스크(704)에서, rx_buf_bsy 플래그가 거짓인 것으로 판단하면, 이것은 버스 상태 머신(도8과 관련하여 후술됨)이 유휴(idle) 상태에 있는 경우가 되며, 마이크로컨트롤러(401)는 경로(752)를 통해 태스크(705)로 이동한다. 태스크(705)에서, 마이크로컨트롤러(401)는 "i2c_st" 변수를 tx_start_st(transmit start state)와 동일하게 셋팅하며, 이것은 버스 상태 머신(도8)이 유휴 상태(802)로부터 경로(853)를 통해 tx_start_st 상태(803)로 이동할 수 있도록 한다. 마이크로컨트롤러(401)가 태스크(705)를 완료하면, 그것은 경로(655)를 통해 실행 루프(600)로 이동한다.
다시 태스크(704)를 참조하면, 만일 마이크로컨트롤러(401)가 이 태스크에서 rx_buf_bsy(receive buffer busy) 플래그가 참(true)인 것으로 판단하면, 그것은 경로(655)를 통해 이동하여 실행 루프(600)로 복귀하게 된다. 이러한 상황은 도8에 도시된 버스 상태 머신의 일부분을 구성하는 수신기 상태 머신(849)이 현재 버스(150)로부터의 패킷의 수신을 제어하는 비지(busy) 상태인 경우에 발생하게 된다. 수신기 상태 머신(849)이 완료되면, 그것은 태스크(832)를 통해 빠져나와, "i2c_st" 변수를 tx_start_st와 동일하게 셋팅하고, 다음에 경로(884)를 통해 tx_start_st 상태(803)로 통과된다.
다시 판단 태스크(603)를 참조하면, 만일 마이크로컨트롤러(401)가 태스크(603)에서, tx_buf_actv(transmit buffer active) 플래그가 참인 것으로 판단하면, 마이크로컨트롤러(401)는 경로(657)를 통해 CMD Queue (Command Queue) 태스크(607)로 이동하며, 이 태스크는 마이크로컨트롤러(401)로 하여금 송신기 버퍼가 비지상태이기 때문에 명령 실행을 유예할 수 있도록 한다. 다음에, 마이크로컨트롤러(401)는 경로(655)를 통해 이동하여 실행 루프(600)로 복귀한다.
마이크로컨트롤러(401)가 실행 루프(600)를 처리하는데 있어, cmd_q_rq(command queue request) 플래그가 참인 것으로 판단하고(이것은 태스크(607)에서 명령 큐에 명령이 로딩되었다는 것을 나타냄), tx_buf_bsy(transmit buffer busy) 플래그가 거짓인 것으로 판단하며, 마이크로컨트롤러(401)는 다음에 경로(656)를 통해 "Get CMD from Queue" 태스크(605)로 이동한다. 태스크(605)에서, 마이크로컨트롤러(401)는 명령 큐로부터 명령을 검색하고, 다음에는 전술한 바와 같이, 경로(651)를 통해 Decode CMD 태스크(602)로 이동한다.
마이크로컨트롤러(401)가 실행 루프(600)를 처리하는데 있어, attn_resp_rq(attention response request) 플래그, usr_pkt_resp_rq (user packet response request) 플래그 또는 attn_cmd_rq(attention command request) 플래그가 참이고, tx_buf_actv 플래그가 거짓인 것으로 판단하면, 그것은 각각의 경로(658,659,660)를 통해 PKT Pre-build(패킷 사전-구축) 태스크(608)로 이동한다. PKT Pre-build 태스크(608)에서, 마이크로컨트롤러(401)는 각각의 액티비티 플래그에 대한 콘텍스트를 준비하고, 다음에 경로(653)를 통해 전술한 Build PKT(패킷 구축) 태스크(604)로 이동한다. 만일 attn_resp_rq 플래그가 셋트되면, 마이크로컨트롤러(401)는 STC(400)로 하여금 리스펀더로서 동작할 수 있도록하여, 코맨더로서 버스(150)에 접속된 다른 장치로부터 어텐션 명령 패킷을 수신하는 것에 응답하여 상태 응답 패킷을 반송할 수 있도록 한다. 만일 usr_pkt_resp_rq 플래그가 셋트되면, 마이크로컨트롤러(401)는 STC(400)로 하여금 리스펀더로서 동작할 수 있도록 하여, 코맨더로서 버스(150)에 접속된 다른 장치로부터 SEND USER PACKET 명령 패킷을 수신하는 것에 응답하여 상태 응답 패킷을 반송할 수 있도록 한다. 만일 attn_cmd_rq 플래그가 셋트되면, 마이크로컨트롤러(401)는 STC(400)로 하여금 코맨더로서 동작하여 어텐션 명령을 폴링 리스트 내의 그 다음 장치 어드레스로 전송할 수 있도록 한다.
패킷 전송이 완료되었다는 것을 나타내도록 송신기 상태 머신(848)(도8)에 의해 조절되는 xmt_done(transmit done) 플래그가 셋트되면, 실행 루프(600)를 처리하는 마이크로컨트롤러(401)는 경로(753)를 통해 도7에 도시된 "xmt_done_xmt_st" (transmit done transmit state) 태스크(710) 내의 태스크(712)로 이동한다.태스크(712)에서, 마이크로컨트롤러(401)는 xmt_done 플래그를 리셋하고, 다음에 경로(754)를 통해 Commander decision(코맨더 판단) 태스크(713)로 이동하여, STD가 코맨더로서 동작하는지 또는 리스펀더로서 동작하는지 판단한다. 만일 마이크로컨트롤러(401)가 태스크(713)에서, STC(400)가 코맨더로서 동작하는 것으로 판단하면, 그것은 경로(755)를 통해 tx_buf_stat (transmit buffer status) 판단 태스크(714)로 이동하여, tx_buf_stat (transmit buffer status) 플래그의 상태를 판단한다. 만일 마이크로컨트롤러(401)가 태스크(714)에서, tx_buf_stat (transmit buffer status) 플래그가 거짓인 것으로 판단하면, 이것은 패킷이 에러 없이 전송되었다는 것을 나타내며, 마이크로컨트롤러(401)는 경로(756)를 통해 "Wait for Response(응답 대기)" 태스크(715)로 이동한다. 태스크(715)에서, 마이크로컨트롤러(401)는 방금 전송된 패킷에 응답하여 예상되는 상태 응답 패킷을 대기하기 위한 콘텍스트를 준비하고, 다음에 경로(655)를 통해 실행 루프(600)로 복귀한다.
다시 태스크(714)를 참조하면, 만일 마이크로컨트롤러(401)가 이 태스크에서 tx_buf_stat (transmit buffer status) 플래그가 참인 것으로 판단하면, 이것은 전송 에러가 발생했다는 것을 나타내며, 마이크로컨트롤러(401)는 경로(757)를 통해 retry_err (retry error) 판단 태스크(716)로 이동한다. 만일 마이크로컨트롤러(401)가 태스크(716)에서 retry_err (retry error) 플래그가 참인 것으로 판단하면, 이것은 패킷을 전송하기 위한 재시도와 관련된 에러를 나타내며, 마이크로컨트롤러(401)는 경로(759)를 따라 "Abort xmt_pkt" 태스크(719)로 이동하여, 그 패킷의 전송과 관련된 명령 함수(function)의 실행을 중지하고,핸들러(1400)에 의한 이용을 위해 메모리(403)로 로딩될 에러 상태 표시를 큐잉하게 된다. 태스크(719) 다음에, 마이크로컨트롤러(401)는 경로(655)를 통해 다시 실행 루프(600)로 이동한다.
다시 태스크(716)로 되돌아가면, 만일 마이크로컨트롤러(401)가 이 태스크에서 retry_err (retry error) 플래그가 거짓인 것으로 판단하면, 그것은 경로(758)를 통해 "Retry Error(재시도 에러)" 태스크(717)로 이동한다. 이 태스크(717)에서, 마이크로컨트롤러(401)는 timer0 타이머에 의해 결정되는 바와 같은 소정의 지연 기간 이후에 전송 재시도를 수행하기 위해 콘텍스트를 준비한다. 이 태스크(717) 다음에, 마이크로컨트롤러(401)는 경로(655)를 통해 다시 실행 루프(600)로 이동한다.
다시 판단 태스크(713)로 되돌아가서, 만일 마이크로컨트롤러(401)가 그 STC(400)가 리스펀더인 것으로 판단하면, 그것은 경로(760)를 따라 "expect no response(응답을 기대하지 않음)" 태스크(720)로 이동하여, 응답 패킷을 기다리지 않고 자체적으로 준비한다. 다음에, 마이크로컨트롤러(401)는 경로(655)를 따라 다시 실행 루프(600)로 이동한다.
마이크로컨트롤러(401)가 실행 루프(600)를 처리할 때, timer0가 만료된 것으로 판단하면, 그것은 경로(661)를 통해 "Timer0 time-out" 판단 태스크(609)로 이동한다. 이 태스크(609)에서, 마이크로컨트롤러(401)는 타임-아웃의 "형태(type)"를 판단한다. 만일 마이크로컨트롤러(401)가 태스크(609)에서 타임-아웃이 xmt_st Retry (transmit state retry) 지연 형태로 이루어진 것으로 판단하면, 그것은 경로(750)를 따라 전술한 바와 같은 xmt_pkt 태스크(701)로 이동하여, 이전에 전송에러가 발생했던 패킷을 재전송하기 위해 시도한다. 만일 마이크로컨트롤러(401)가 태스크(609)에서 타임-아웃이 Expect_resp(expect response) 형태로 이루어진 것으로 판단하면, 이것은 코맨더로서 동작하는 그 STC(400)가 소정의 타임-아웃 주기 내에서 리스펀더로서 동작하는 다른 장치로부터 예상되는 상태 응답 패킷을 수신하지 못한 경우가 되며, 따라서, 마이크로컨트롤러(401)는 경로(664)를 따라 태스크(610)로 이동하여, 에러 상태 형태 표시를 셋트한다. 태스크(610) 다음에, 마이크로컨트롤러(401)는 경로(753)를 따라 전술한 바와 같은 "xmt_done_ xmt_st" 태스크(710)로 이동한다.
마이크로컨트롤러(401)가 실행 루프(600)를 처리할 때, stat_to_csa 플래그가 참인 것으로 판단하면, 그것은 경로(662)를 따라 "Dequeue Status" 태스크(611)로 이동한다. 이 태스크(611)를 처리하는데 있어, 마이크로컨트롤러(401)는 메모리(403)에 저장하기 위해 상태 표시를 디큐잉(dequeue)한다. 이 태스크(611) 다음에, 마이크로컨트롤러(401)는 경로(663)를 따라 "Fire st_stat_int" 태스크(612)로 이동하여, 메모리(403)에 상태 표시가 로딩되었다는 것을 나타내기 위해 라인(451)(도4) 상에 ST_STAT_INT 인터럽트 신호를 표명(assert)한다.
도8은 버스(150)를 통한 패킷의 송신 및 수신을 제어하는 버스 상태 머신에 대한 흐름도로서, 이것은 리셋 상태(801), 유휴 상태(802), 송신기 상태 머신(848) 및 수신기 상태 머신(849)을 포함한다. 도8에는, 2가지 형태의 연산, 즉, "상태(state)"와 "태스크(task)"가 있다. "상태"는 특정 조건이 검출될 때까지 상태(801,802)와 각각의 송신기 및 수신기 상태 머신(848,849)의 연산에서의정지(suspension)을 나타내며, 그 이후에 상태는 다음 상태 또는 태스크 후속 연산으로 시퀀스한다. 한편, "태스크"는 무조건적으로 후속 연산으로 계속되는 연산을 나타낸다. 마이크로컨트롤러(401) 내의 s1sta 레지스터는 각각의 형태의 STbus 패킷(500) 프레이밍 상태 및 에러 조건에 대한 전술한 83C562 스펙에 따른 특정 인터럽트 상태를 제공한다. 펌웨어 상태 머신은 상태(states)(802,803,804,805,822)에서 s1sta 인터럽트를 처리하고, 상호접속에 의해 도시된 바와 같이 후속 상태 또는 태스크로 이동한다. 참조 목적을 위해, 인터럽트 상태(s1sta) 레지스터의 내용은 상호접속을 따라 도시되어 있다, 다음의 논의는 태스크 또는 상태의 관점에서 펌웨어 상태 머신을 설명한 것이다.
초기에, 리셋 신호(698)(도6)는 버스 상태 머신이 리셋 상태(801)로 들어갈 수 있도록 한다. 도8이 버스(150)를 통한 패킷의 송신 및 수신을 제어하고 STC INIT 명령(도6)에 응답하여 Init_cmd (initialization command) 태스크(606)를 싱행하는 상태 머신에 대한 흐름도인 경우에, 리셋 상태(801) 다음에, 상태 머신은 경로(850)를 따라 idle-st 상태(802)로 이동한다.
idle-st 상태(802)로부터, 마이크로컨트롤러(401)는 버스(150)에 대한 직렬 통신포트를 인에이블시키고 STC INIT 명령 함수를 수행한다. 만일 마이크로컨트롤러(401)가 이 명령을 성공적으로 완료하면, 버스 상태 머신은 이 상태(802)에서 유지되고, 그 자체를 초기화 모드(initialized mode)에 둔다. 한편, 만일 마이크로컨트롤러(401)가 STC INIT 명령을 성공적으로 완료하지 못하면, 버스 상태 머신은 경로(851)를 따라 다시 펌웨어 리셋 상태(801)로 되돌아간다. 초기화 모드에서, 버스상태 머신은 경로(853)를 따라, 패킷을 전송하기 위한 송신기 상태 머신(848)이나 패킷을 수신하기 위한 수신기 상태 머신(849)으로 이동하거나, 또는 무효 상태 폴트를 처리하기 위해 경로(852)를 따라 상태(802)로 이동할 수 있다.
유휴 상태(802)로부터, 버스 상태 머신은 tx_start_st (transmit start state) 플래그가 태스크(705)(도7)의 실행중에 셋트된 경우에 송신기 상태 머신(848)으로 시퀀스한다. tx_start_st 플래그의 셋팅에 응답하여, 송신기 상태 머신(848)은 tx_start_st 상태(803)로 들어간다. tx_start_st 상태(803)로 들어간 이후에, 송신기 상태 머신은 "i2c_st" 변수를 "tx_start_st"와 동일하게 셋트한다. tx_start_st 상태(803)에서, 송신기 상태 머신(848)은 버스(150)가 출력 전송에 이용될 수 있는지 확인하고 몇가지 조건을 처리한다. 만일 무효 상태 폴트가 검출되면, 송신기 상태 머신(848)은 경로(854)를 따라 다시 tx_start_st 상태(803)로 시퀀스한다. 한편, 만일 버스(150)에 대한 버스 수신기가 서브-필드(511) 내에 STC(400)에 대한 수신지 어드레스를 포함하는 패킷을 검출하면, 송신기 상태 머신(848)은 경로(871)를 따라 수신기 상태 머신(849)으로 시퀀스되어, 패킷의 수신을 가능하게 한다.
만일 송신기 상태 머신(848)이 tx_start_st 상태(803)에서, 어떠한 조건도 존재하지 않는 것으로 판단하면, 그것은 버스(150)가 이용가능한 것으로 판단하고, 프레이밍 상태(501)(도5)에 대한 스타트 비트의 전송을 가능하게 하고, 경로(855)를 따라 tx_dadr_st (transmit destination address) 상태(804)로 시퀀스한다. 한편, 만일 송신기 상태 머신(848)이 상태(803)에서, xmit_pkt (transmit packet)태스크(701)의 처리중에 설정된 Timer0가 타임-아웃된 것으로 판단하면, 그것은 경로(857)를 따라 tx-error (transmit error) 태스크(808)로 시퀀스한다. 태스크(808)에서, 송신기 상태 머신(848)은 전송 에러가 발생했다는 것을 나타내는 상태 표시를 제공하기 위해 tx_buf_stat 전송 버퍼 상태 플래그를 조절한다. tx_dadr_st 상태(804)에서, 송신기 상태 머신(848)은 S1DAT 레지스터(별도로 도시되지 않음)에 수신지 어드레스를 로딩하고, 그것이 버스(150)를 통해 전송되기를 대기한다. 상태(804)에서, 송신기 상태 머신(848)은 수개의 조건을 처리한다. 만일 송신기가 버스(150)에 대한 중재를 상실하면, 송신기 상태 머신(848)은 경로(856)를 통해 다시 상태(803)로 시퀀스되고, 그 단계(803)에서 버스(150)에 대해 재중재(re-arbitrate)하게 된다. 만일 버스(150)에 대한 버스 수신기가 서브-필드(511)내에 STC(400)에 대한 수신지 어드레스를 포함하는 패킷(500)을 검출하면, 송신기 상태 머신(848)은 경로(859)를 통해 수신기 상태 머신(849)으로 시퀀스되어, 패킷(500)의 수신을 가능하게 한다. 또한, 만일 tx_timeout (transmit time-out) 또는 tx_error (transmit error)가 발생하면, 송신기 상태 머신(848)은 경로(860)를 따라 tx-error 태스크(808)로 시퀀스되어, 에러를 처리하게 된다. 전술한 바와 같이 일반적으로 프레이밍 에러를 나타내는 무효 상태를 검출하면, tx-error가 발생한다.
한편, 만일 버스 송신기가 버스(150)를 통해 수신지 어드레스를 성공적으로 전송하면, 송신기 상태 머신은 경로(858)를 따라 tx_data_st (transmit data) 상태(805)로 시퀀스한다. tx_data_st 상태(805)에서, 송신기 상태 머신(848)은 S1DAT 레지스터에 발신지 어드레스 프레이밍 상태(520)에 대한 발신지 어드레스를로딩하고, 이후에는 이 발신지 어드레스가 전송되기를 대기하게 된다. tx_data_st 상태(805)는 또한, 후속 프레이밍 상태(530-560)에 대한 데이터의 전송을 처리하기 위해 이용된다. 이 상태로부터, 송신기 상태 머신(848)은 버스 송신기가 버스(150)에 대한 중재를 상실하는 경우에 경로(856)를 통해 상태(803)로 되돌아갈 수도 있으며, 이 상태(803)에서, 송신기 상태 머신(848)은 버스에 대해 재중재하게 된다. 송신기 상태 머신(848)은 버스 송신기가 데이터 바이트를 성공적으로 전송하고 더 많은 데이터가 전송될 것이라는 것을 판단하는 경우에, 경로(861)를 통해 "Load next data (다음 데이터 로딩)" 태스크(806)로 시퀀스될 수도 있으며, "Load next data" 태스크(806)에서, 송신기 상태 머신(848)은 프레이밍 상태(530-560)를 충족시키는 다음 데이터 바이트를 S1DAT 레지스터에 로딩하고, 다음에 경로(862)를 통해 상태(805)로 복귀한다. 이 상태(805)로부터, 송신기 상태 머신은 또한, 송신기가 첵크섬 데이터 바이트를 성공적으로 전송하고, 패킷 전송을 종료하기 위해 준비하는 경우에(프레이밍 상태 560), tx_buf_stat (transmit buffer status) 플래그를 조절하기 위해 경로(863)를 통해 상태(807)로 시퀀스될 수 있다. 이 태스크(807)를 처리하는데 있어, 송신기 상태 머신(848)은 패킷(500)이 에러없이 전송되었다는 것을 나타내기 위해 내부 상태 표시를 셋트한다. 이 태스크(807) 다음에, 송신기 상태 머신은 경로(864)를 통해 tx_stop 태스크(809)로 이동한다.
송신기 상태 머신(848)은, P-비트 프레이밍 상태(503)를 가진 패킷(500)의 전송을 종료하고, 실행 루프(600)(도6, 경로753 참조)의 처리중에 마이크로컨트롤러(401)에 의해 이용될 xmt_done_flag (transmit done flag)를 셋트하고, "i2c_st" 변수를 idle_st와 동일하게 셋트하기 위해 tx_stop 태스크(809)를 이용한다. 이 태스크(809)를 처리한 다음에, 송신기 상태 머신(848)은 경로(853)를 따라 버스 상태 머신의 idle_st 상태(802)로 복귀한다.
유휴 상태(802)로부터, 버스 상태 머신(802)(도8)은 버스 수신기가 서브-필드(511)에서 STC(400)에 대한 수신지 어드레스를 포함하는 수신지 어드레스 프레이밍 상태(510)를 검출하는 경우에, 경로(870)를 따라 수신기 상태 머신(849)으로 들어갈 수 있다. 전술한 바와 같이, 수신기 상태 머신(849)도 역시 동일한 조건하에서 경로(871,859)를 따라 송신기 상태 머신(848)의 상태(803,804)로 들어갈 수 있다. 경로(870,871,859)는 모두 rx_rcv_myadr (receive my address) 태스크(820)로 연결된다. 이 태스크(820)에서, 수신기 상태 머신(849)은 rx_time-outs(receive time-outs)에 대한 Timer1을 인에이블시키고, rx_buf_bsy(receive buffer busy) 플래그를 셋트하는데, 이것은 xmt_pkt 태스크(701)(도7)의 처리중에 모니터된다. 이후에, 수신기 상태 머신(849)은 경로(872)를 따라 rx_data_st(receive data) 상태(822)로 시퀀스한다.
rx_data_st(receive data) 상태(822)에서, 수신기 상태 머신(849)은 데이터 또는 프레임 중단 비트(P-bit 프레이밍 상태 503)가 수신되었는지 확인한다. 이 상태(822)로부터, 수신기 상태 머신(849)은 버스 수신기가 프레이밍 상태(520-560)로부터 기원하는 데이터 바이트를 성공적으로 수신하는 경우에, 경로(873)를 통해 태스크(823)로 이동한다. 이 태스크(823)에서, 수신기 상태 머신(849)은 S1DAT 레지스터로부터의 데이터 바이트를 STC 마이크로컨트롤러(401) 내의 rx_buf 수신 버퍼(별도로 도시되지 않음)로 전송하고, 다음에, 경로(874)를 통해 다시 rx_data_st 상태(822)로 시퀀스한다.
rx_data_st 상태(822)로부터, 수신기 상태 머신(849)은 또한, 경로(876)를 통해 rx_error 태스크(829)로 시퀀스될 수 있다. 이것은 수신기 상태 머신(849)이 프레이밍 에러나 또는 rx_timeout 에러를 검출하는 경우에 일어나게 되며, rx_timeout 에러는 태스크(820)의 처리중에 설정된 Timer1이 타임아웃되는 경우에 발생한다. rx_error는 프레이밍 에러의 결과이며, 이것은 패킷 전송이 S-비트 프레이밍 상태(501)로 시작되지만, 전술한 패킷 프레이밍 프로토콜의 잔여부분을 충족시키지 못하는 경우에 발생한다. rx-timeout은 패킷 프레이밍 상태 중 하나가 Timer1 타이머에 의해 결정된 시간 주기 내에서 완료되지 못하는 경우에 발생한다. 전술한 tx_error와 유사한 rx_error는 지정된 상태에 의해 무효 s1sta 상태가 검출되는 경우에 발생하며, 이것은 일반적으로 전술한 바와 같은 프레이밍 에러를 나타낸다. rx_error 태스크(829)를 처리하는데 있어, 수신기 상태 머신(849)은 P-비트 프레이밍 상태(503)에 의한 패킷 수신을 종료하고, 상태 큐(stat_q)로 에러 상태 표시를 로딩하고, stat_to_csa 플래그를 셋트하는데, 이것은 마이크로컨트롤러(401)로 하여금 메모리(403)에 상태 표시를 로딩할 수 있도록 한다. 또한, rx_error 태스크(829)를 처리하는데 있어, 수신기 상태 머신(849)은 rx_buf_bsy(receive buffer busy) 플래그(821)를 리셋한다. rx_error 태스크(829) 다음에, 수신기 상태 머신(849)은 경로(879)를 통해 태스크(830)로 시퀀스한다.
또한, rx_data_st 상태(822)로부터, 수신기 상태 머신(849)은 또한, 버스 수신기가 P-비트 프레이밍 상태(503)를 검출하는 경우에 경로(875)를 통해 rx_stop (receiver stop) 태스크(824)로 시퀀스될 수 있다. 태스크(824)를 처리하는데 있어, 수신기 상태 머신(849)은 다른 장치에 의한 이용을 위해 버스(150)를 릴리스(release)한다. 단계(824) 다음에, 수신기 상태 머신(849)은 경로(877)를 따라 태스크(825)로 시퀀스한다.
태스크(825)를 처리하는데 있어, 수신기 상태 머신(849)은 마이크로컨트롤러의 수신 버퍼 rx_buf를 적절한 포맷 및 첵크섬에 대해 확인한다. 수신기 상태 머신(849)은 그것이 에러를 검출하는 경우에 태스크(825)로부터 경로(876)를 통해 rx_error 태스크로 시퀀스되게 된다. 한편, 수신기 상태 머신(849)이 수신된 패킷에 대한 포맷이 적절하고 수신된 패킷의 첵크섬이 패킷내의 첵크섬에 합치되는 것으로 판단하면, 그것은 수신된 패킷의 형태를 판단하고, 그 판단에 근거하여 태스크(826,827,828) 중 하나로 시퀀스한다.
태스크(825) 다음에, 수신기 상태 머신(849)은 수신된 패킷의 형태가 User packet(이용자 패킷) 명령인지, 어텐션 명령인지, 또는 예상 상태 응답 패킷인지에 근거하여 경로(882,880 또는 878)를 통해 시퀀스되게 된다. 태스크(827,828)를 처리하는데 있어, 수신기 상태 머신(849)은 각각의 att_resp_rq (attention response request) 및 usr_pkt_resp_rq (user packet response request) 플래그를 셋트하며, 이들 플래그는 도6과 관련하여 전술한 바와 같이, 실행 루프(600)의 처리중에 마이크로컨트롤러(401)를 제어하는데 이용된다. 이들 플래그는 이용자 패킷 명령 또는 어텐션 명령이 각각 수신되었다는 것을 나타낸다. 태스크(827,828) 다음에, 수신기상태 머신(849)은 경로(879)를 따라 태스크(830)로 시퀀스한다.
수신된 패킷이 STC(400)에 의해 이전에 전송된 명령 패킷에 대한 응답인 경우에, 수신기 상태 머신(849)은 태스크(825)로부터 태스크(826)로 시퀀스되게 된다. 이 경우에, 수신기 상태 머신(849)은 현재 액티브 상태의 명령 전송 기능을 종료하고, 핸들러(1400)를 위해 메모리(403)에 로딩될 상태 표시를 생성하고, stat_to_csa 플래그를 셋트하기 위해 태스크(826)를 이용한다. 마이크로컨트롤러(401)는 도6과 관련하여 전술한 바와 같이, 실행 루프(600)를 처리하는데 있어 stat_to_csa 플래그를 이용하게 된다. 또한, 수신기 상태 머신(849)도 역시 tx_buf_actv (transmit buffer active) 및 retry_err (retry error) 플래그를 포함하여 적절한 액티비티 플래그를 리셋하고, 다음에 경로(879)를 따라 태스크(830)로 시퀀스한다.
수신기 상태 머신(849)은 버스 상태 머신에 대한 다음 상태를 판단하기 위해 태스크(830)를 이용한다. 만일 수신기 상태 머신(849)이 tx_buf_actv 플래그가 거짓인 것으로 판단하면, 이것은 STC(400)가 전송할 패킷을 갖고 있지 않은 경우가 되며, 수신기 상태 머신(849)은 경로(831)를 통해 태스크(831)로, 다시 이 태스크(831)로부터 경로(883)를 통해 idle_st 상태(802)로 시퀀스함으로써 유휴 상태로 복귀한다. 한편, 만일 tx_buf_actv 플래그가 참인 경우에, 이것은 STD(400)가 전송할 패킷을 갖고 있는 경우가 되며, 수신기 상태 머신(849)은 경로(882)를 통해 태스크(832)로, 다시 이 태스크로부터 경로(884)를 통해 송신기 상태 머신(848)의 tx_start_st 상태(803)로 시퀀스한다.
이제, 도9 내지 도13을 참조하여 STD(300)(도3)의 마이크로컨트롤러(301)에 의해 수행되는 연산의 세부사항에 대해 설명한다. 도9는 마이크로컨트롤러(301)에 의해 실행되는 파워-업 리셋 및 실행 루프(903)의 흐름도를 도시하고 있다. 도10은 마이크로컨트롤러(301)에 의해 실행되는 서브루틴 태스크(1000)에 대한 흐름도이며, 여기서, STC(400)로부터 수신되는 명령 패킷이 처리되며, 버스(150)를 통해 STC(400)로의 전송을 위해 응답 패킷이 생성된다. 도11은 마이크로컨트롤러(301)가 드라이브 전원 스위치(302)의 스위치0,1,2에서의 상태 변화를 처리하는 태스크(1100)에 대한 흐름도를 도시하고 있다. 도12는 마이크로컨트롤러(301)에 의해 실행되는 타이머 인터럽트 서브루틴(1200)에 대한 흐름도를 도시하고 있다. 도13은 STD 마이크로컨트롤러(301)의 인터페이스에 의해 버스(150)로 단일 바이트가 수신 또는 송신될 때, 마이크로컨트롤러(301)에 의해 처리되는 인터럽트 서브루틴(1300)의 흐름도를 도시하고 있다. 다음의 논의에서는, 마이크로컨트롤러(301)가 도2에 도시된 바와 같이 좌측 STD(300) 내에 있는 것이며, 이것은 드라이브 모듈(202-204)의 드라이브-포트 바이패스 스위치와 파이버 채널 구성 스위치(201,205,206)를 제어하는 것으로 가정하고, 우측 STD(300)의 마이크로컨트롤러(301)에 의해서도 그 대응하는 연산이 수행된다는 것을 이해할 것이다.
도9는 마이크로컨트롤러(301)에 의해 처리되는 파워-업 리셋 및 실행 루프(903)의 흐름도를 도시하고 있다. 초기에는, STD(300)의 회로(별도로 도시되지 않음)에 의해 리셋 신호(950)가 생성되며, 이 신호는 마이크로컨트롤러(301)가 리셋 상태(900)로 들어갈 수 있도록 하며, 또한, STD(300)의 모든 구성요소를 각각의 소정의 상태로 리셋하는 작용을 한다. 마이크로컨트롤러(301)는 다음에 경로(956)를 따라 메모리 테스트 서브루틴(901)으로 시퀀스하며, 여기서는 STD 마이크로컨트롤러(301)상에서 내부 메모리 테스트가 수행된다. 만일 메모리 테스트를 통과하면, 마이크로컨트롤러(301)는 경로(957)를 따라 초기화 서브루틴(902)으로 시퀀스한다. 만일 메모리 테스트가 실패하면, 마이크로컨트롤러(301)는 서브루틴(901)을 빠져나오지 못하며, 이것은 더 이상의 초기화를 억제하는 작용을 하고, 마이크로컨트롤러(301)가 드라이브 상태 LED(306)에 의해 에러 상태 표시를 제공할 수 있도록 한다.
초기화 서브루틴(902)을 처리하는데 있어, 마이크로컨트롤러(301)는 내부 상태 및 전술한 바와 같은 상태 플래그들을 셋업하고, 드라이브 모듈(202,203,204)에 대해 드라이브 전원 스위치(302)의 셋팅을 검사하고, 그들의 스위치가 On 위치로 셋트되어 있는 장치들에게만 전원을 제공한다. 서브루틴(902)에서, 마이크로컨트롤러(301)는 FC Loop-A 및 FC Loop-B 포트(214,216)에 대한 드라이브-포트 바이패스 스위치(213,215)의 상태를 전원이 On 상태로 되어있는 드라이브 모듈에 대해서는 횡단 모드로 조절하고, 전원이 Off 상태로 되어있는 드라이브 모듈에 대해서는 바이패스 모드로 조절한다. 이와 유사하게, 초기화 서브루틴(902)은 마이크로컨트롤러(301)가 구성 스위치(201,205,206)의 상태를 횡단 모드로 조절할 수 있도록 한다. 마이크로컨트롤러(301)는 초기화 서브루틴(902)의 처리를 완료한 이후에, 경로(951)를 따라 실행 루프(903)로 시퀀스한다. 이 시점에서, STD(300)는 현재 버스(150)로부터 명령 패킷을 수용하고 드라이브 전원 스위치(302)의 상태 변화를모니터하기 위한 준비가 되어있는 것이다.
실행 루프(903)를 처리하는데 있어, 마이크로컨트롤러(301)는 2개의 판단 태스크(904,905)를 검사하고 그에 서비스한다. 판단 태스크(904)를 처리하는데 있어, 마이크로컨트롤러(301)는 그것에 의해 실행될 명령을 포함하는 패킷이 수신되었는지 판단하고, 판단 태스크(905)를 처리하는데 있어, 마이크로컨트롤러(301)는 드라이브 전원 스위치(302)의 상태에서 변화가 발생했는지 판단한다. 만일 마이크로컨트롤러(301)가 태스크(904) 또는 태스크(905)에서 긍정 판단을 하면, 그것은 각각의 태스크 핸들러에 대한 서브루틴 호출을 실행한다. 즉, 마이크로컨트롤러(301)가 태스크(904)에서 긍정 판단을 하면, 그것은 도10에 도시된 서브루틴을 처리하게 된다. 한편, 만일 마이크로컨트롤러(301)가 태스크(905)에서 긍정 판단을 하면, 그것은 도11에 도시된 서브루틴을 처리하게 된다.
보다 특정하여 말하면, 마이크로컨트롤러(301)가 태스크(904)를 처리하는데 있어 긍정 판단을 하면, 이것은 명령이 수신되었다는 것을 나타내며, 마이크로컨트롤러(301)는 경로(1050)를 따라 시퀀스하여, 도10에 도시된 SRVC_I2C 버스 서비스 서브루틴(1000)에 대한 서브루틴 호출을 실행하게 된다. 이러한 상황은 수신된 패킷이 실행을 위한 명령을 포함하는 경우에, 도13에 도시된 Slave_Rx_Done (Slave receive done) 서브루틴의 처리중에 Rx_I2C_CMD (receive command) 플래그가 셋트될 때 발생하게 된다. 서브루틴(1000)을 처리한 이후에, 마이크로컨트롤러(301)는 경로(952)를 따라 실행 루프(903)로 복귀한다. 만일 마이크로컨트롤러(301)가 Rx_I2C_CMD 판단 태스크(904)를 처리하는 동안에 부정 판단을 하면, 그것은경로(952)를 따라 태스크(905)로 시퀀스한다. 이 태스크(905)는 실질적으로 3개의 별도의 판단 태스크를 포함하고 있으며, 이들은 각각 드라이브 전원 스위치(302) 내의 드라이브 모듈(202-204) 각각에 대한 드라이브 전원 스위치에 작용한다. 만일 마이크로컨트롤러(301)가 드라이브 전원 스위치들중 하나에 대한 스위치 상태 변화를 검출하면, 그것은 경로(1151)를 따라 시퀀스하여, 각각의 스위치에 대해, 도11에 도시된 SRVC_0-2 서브루틴 태스크(1100)에 대한 서브루틴 호출을 실행한다. 하나의 스위치에 대해 태스크(1100)를 처리한 이후에, 마이크로컨트롤러(301)는 경로(953)를 따라 태스크(905)로 복귀하여 그 다음 스위치에 서비스한다. 연속되는 드라이브 모듈(202-204)에 대한 스위치들의 순서로 마이크로컨트롤러(301)에 의해 DRV PWR 스위치(302) 내의 스위치들이 검사되고 서비스된다. 마이크로컨트롤러(301)가 드라이브 모듈(204)과 관련된 스위치에 대해 태스크(905)의 처리를 완료하면, 그것은 경로(951)를 따라 시퀀스하여 실행 루프(903)를 계속한다.
도10은 STC(400)로부터 수신되는 명령 패킷이 처리되고, 버스(150)를 통해 STC(400)로 전송하기 위한 응답 패킷이 생성되는, 서브루틴 태스크(1000)에 대한 흐름도이다. 마이크로컨트롤러(301)는 도9에 도시된 바와 같이, 실행 루프(903)로부터 경로(1050)를 통해 서브루틴 호출을 함으로써 태스크(1000)로 들어간다. 도10을 참조하면, 태스크(1000)로부터, 마이크로컨트롤러(301)는 처음에 "Compute Pckt Checksum" 태스크(1001)를 수행하여, 수신된 패킷에 대한 첵크섬을 계산하고, 그 결과를 마이크로컨트롤러(301) 내의 일시 저장 레지스터(별도로 도시되지 않음)로 저장한다. 다음에, 마이크로컨트롤러(301)는 경로(1051)를 따라 "Checksum Error" 판단 태스크(1002)로 시퀀스하여, 수신된 패킷의 첵크섬(프레이밍 상태560 참조)이 태스크(1001)에서의 첵크섬과 다른지 여부를 판단한다. 만일 마이크로컨트롤러(301)가 태스크(1002)에서 긍정 판단을 하면, 그것은 경로(1052)를 따라 "Reset Ptr's" 태스크(1003)로 시퀀스하며, 여기서는 그 패킷이 폐기되고, 그에 대해 설정된 리셋 데이터 구조가 리셋된다. "Reset Ptr's" 태스크(1003) 다음에, 마이크로컨트롤러(301)는 경로(952)를 따라 실행 루프(903)로 복귀한다.
한편, 만일 마이크로컨트롤러(301)가 태스크(1002)에서 부정 판단을 하면, 수신된 패킷의 첵크섬이 계산된 첵크섬과 합치되는 것이다. 이경우에, 마이크로컨트롤러(301)는 경로(1053)를 따라 "Illegal CMD" 판단 태스크(1004)로 시퀀스하여, 수신된 패킷이 불법(illegal) 명령을 포함하고 있는지 판단한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1004)에서 긍정 판단을 하면, 그것은 경로(1054)를 따라 "Nack Packet" 태스크(1005)로 시퀀스한다. "Nack Packet" 태스크(1005)에서, 마이크로컨트롤러(301)는 부정 확인응답 패킷을 생성하며, 이 패킷은 STC(400)로 전송되게 된다. 이 태스크(1005) 다음에, 마이크로컨트롤러(301)는 경로(1055)를 통해 전술한 바와 같은 "Reset Ptr's" 태스크(1003)로 시퀀스한다.
만일 마이크로컨트롤러(301)가 "Illegal CMD" 판단 태스크(1004)에서 부정 판단을 하면, 그것은 경로(1056)를 따라 "Decode Command" 태스크(1007)로 시퀀스한다. 이 태스크(1007)에서, 마이크로컨트롤러(301)는 프레이밍 상태(530)로부터 Opcode 필드를 디코드하며, 이것은 펌웨어가 전술한 바와 같은 5개의 명령 실행 태스크중 하나로 이동하도록 한다. 명령을 실행하는데 있어, 마이크로컨트롤러(301)는각각의 명령에 대해 적절한 상태 응답 패킷을 생성하고, 첵크섬을 생성 및 부가하고, 버스(150)에 대한 중재를 개시하는 버스 스타트(Bus Start) 신호를 마이크로컨트롤러(301)의 버스 인터페이스에 제공하게 되는데, 이에 대해서는 도13과 관련하여 후술하게 된다. 만일 마이크로컨트롤러(301)가 그 명령이 질의(Inquiry) 명령인 것으로 판단하면, 그것은 경로(1057)를 따라 "Inquiry Resp Packet" 태스크(1006)로 시퀀스한다. 이 태스크(1006)를 처리한 이후에, 마이크로컨트롤러(301)는 경로(952)를 따라 실행 루프(903)로 복귀한다. 만일 마이크로컨트롤러(301)가 그 명령이 Mode Select (모드 선택) 명령인 것으로 판단하면, 그것은 경로(1059)를 따라 시퀀스하여 "Mode Select Resp Packet"(모드 선택 응답 패킷) 태스크(1009)를 실행한다. 이 태스크(1009)를 처리한 이후에, 마이크로컨트롤러(301)는 경로(952)를 따라 실행 루프(903)로 복귀한다. 만일 마이크로컨트롤러(301)가 그 명령이 불법 패킷에 존재하는 것으로 판단하면, 그것은 경로(1060)를 따라 "Illegal Command resp packet"(불법 명령 응답 패킷) 태스크(1011)로 시퀀스한다. 이 태스크(1011)를 처리한 이후에, 마이크로컨트롤러(301)는 경로(952)를 따라 실행 루프(903)로 복귀한다. 만일 마이크로컨트롤러(301)가 그 명령이 모드 센스(Mode Sense) 명령인 것으로 판단하면, 그것은 "Mode Sense Resp Packet"(모드 센스 응답 패킷) 태스크(1010)로 시퀀스한다. 이 태스크(1010)를 처리한 이후에, 경로(952)를 따라 실행 루프(903)로 복귀한다. 마지막으로, 만일 마이크로컨트롤러(301)가 그 명령이 어텐션 명령인 것으로 판단하면, 그것은 경로(1058)를 따라 "Send Attn Resp Packet" 태스크(1008)로 시퀀스한다. 이 태스크(1008)를 처리한 이후에, 마이크로컨트롤러(301)는경로(952)를 따라 실행 루프(903)로 복귀한다.
도11은 드라이브 전원 스위치(302)의 스위치0,1,2에서의 상태 변화가 처리되는 태스크(1100)에 대한 흐름도를 도시하고 있다. 이 태스크(1100)는 근본적으로 3개의 독립적이지만 기능적으로는 동일한 서브루틴을 나타내며, 이들 각각의 서브루틴은 각각의 드라이브 모듈(202-204)에 대한 드라이브 전원 스위치(302) 내의 스위치0,1,2에 서비스한다. 이 태스크(1100)는 마이크로컨트롤러(301)로 하여금, 스위치 상태 변화를 검출하고, 스위치 디바운싱(debouncing) 필터를 제공하고, 오퍼레이터가 그의 마음을 바꿔 스위치의 위치를 그 이전의 위치로 되돌리도록 허용하는 시간 지연을 제공할 수 있도록 한다. 만일 스위치가 소정의 지연 시간에 이어 그 새로운 상태로 유지되면, 마이크로컨트롤러(301)는 ATTN_POLL_START 명령을 포함하는 패킷에 응답하여, 각각의 드라이브 모듈(202-204)에 대한 전원을 제어하고, STC(400)에 대한 Attention(어텐션) 상태를 제공한다. 스위치 상태가 "On" 상태로부터 "Off"로, 또는 "Off" 상태로부터 "On" 상태로 변경되면, 마이크로컨트롤러(301)는 드라이브 모듈의 전원을 "Off" 또는 "On" 상태로 만들고, 드라이브 모듈의 상태 구조(status structure)(별도로 도시되지 않음)를 갱신한다. 다음에, 마이크로컨트롤러(301)는 관련 타이머가 만료될 때까지 백그라운드 태스크로서 태스크(1100)를 처리한다.
다음에는, 드라이브 모듈(202)에 대한 드라이브 전원 스위치와 관련하여 마이크로컨트롤러(301)에 의해 수행되는 연산에 대해 설명하게 되는데, 다른 드라이브 모듈(203,204)에 대한 드라이브 전원 스위치와 관련하여 수행되는 연산도 이와 유사하다. 마이크로컨트롤러(301)는 실행 루프(903-1151)로부터의 태스크(905)에서 서브루틴 호출을 실행할 때 태스크(1100)로 들어간다. 처음에, 마이크로컨트롤러(301)는 "De-Glitch Timer" 판단 태스크(1101)를 실행하게 되는데, 이 태스크(1101)는 스위치를 디바운싱하기 위한 디글리치(De-Glitch) 시간 지연을 제공한다. 이 디글리치 시간 지연이 종료되기 전에, 마이크로컨트롤러(301)는 태스크(905)로 복귀하고, 다시 거기로부터 디글리치 판단 태스크(1101)로 되돌아간다. 마이크로컨트롤러(301)는 그것이 태스크(905)에서 스위치가 그 이전의 상태로 복귀되었거나 또는 디글리치 판단 태스크(1101)에서, 디글리치 시간 지연이 타임아웃되었다는 것을 판단할 때까지 여러번 반복하여 이들 연산을 반복하게 된다. 만일 마이크로컨트롤러(301)가 디글리치 판단 태스크(1101)에서 디글리치 시간 지연이 타임아웃된 것으로 판단하면, 그것은 "Still in New State"(여전히 새로운 상태에 있는지?) 판단 태스크(1103)로 시퀀스하게 된다. 만일 마이크로컨트롤러(301)가 이 판단 태스크(1103)에서 부정 판단을 하면, 이것은 그 스위치가 상태를 변경하지 않는 경우가 되며, 따라서, 마이크로컨트롤러(301)는 경로(1153)를 따라, 다양한 플래그들이 리셋될 수 있는 "Reset Flags" 태스크(1102)로 시퀀스하고, 다음에, 경로(953)를 따라 태스크(905)로 복귀한다.
한편, 만일 마이크로컨트롤러(301)가 태스크(1103)에서 긍정 판단을 하면, 그것은 경로(1154)를 따라 "Switch On/Off" 판단 태스크(1105)로 시퀀스한다. 이 판단 태스크(1105)에서, 마이크로컨트롤러(301)는 스위치의 새로운 셋팅이 "On" 위치인지 또는 "Off" 위치인지 판단한다. 만일 마이크로컨트롤러(301)가 스위치의 새로운 셋팅이 "On" 위치인 것으로 판단하면, 그것은 경로(1157)를 따라 시퀀스하여, "Drive Power On" (드라이브 전원을 On 상태로 함) 태스크(1108)를 실행한다. 이 태스크(1108)를 처리하는데 있어, 마이크로컨트롤러(301)는 어텐션 상태 비트를 셋트하고, 이것은 응답 패킷에서 STC(400)로 반송된다. 다음에, 마이크로컨트롤러(301)는 드라이브 전원을 켜고, 경로(953)를 따라 태스크(905)로 되돌아간다. 그러면, 드라이브 모듈(202)은 바이패스 모드에서 드라이브-포트 바이패스 스위치(213,215)에 의해 전원이 켜지게 되며, 따라서, FC 루프(106,170)를 방해하지 않게 된다. 어텐션 상태 비트를 수신한 이후에, STC(400)는 적절한 STD DS Mode Select 명령을 포함하는 패킷을 전송함으로써 각각의 드라이브-포트 바이패스 스위치의 모드를 변경할 수도 있다.
만일 마이크로컨트롤러(301)가 판단 태스크(1105)를 처리하는데 있어, 스위치 셋팅이 "Off" 위치라는 것을 판단하면, 그것은 경로(1155)를 따라 "Is 1st 5sec enabled" (첫번째 5초가 인에이블되었는가?) 판단 태스크(1106)로 시퀀스한다. 이 판단 태스크(1106)는 5초 타이머를 인에이블시키기 위해 이용되며, 이것은 오퍼레이터가 그의 마음을 변경하여 스위치를 다시 "On" 위치로 반전시키기 위한 시간을 허용한다. 이것은 예를 들어, 오퍼레이터가 드라이브 전원 스위치의 상태를 고의적으로 변경한 것이 아닌 경우에 유용하다. 만일 마이크로컨트롤러(301)가 판단 태스크(1106)에서 부정 판단을 하면, 그것은 경로(1156)를 따라 "set 1st 5sec Delay" (첫번째 5초 지연 셋팅) 태스크(1104)로 시퀀스하며, 이것은 첫 번째 5초 지연을 위한 타이머를 개시시킨다. 다음에, 마이크로컨트롤러(301)는 경로(953)를 따라 태스크(905)로 복귀한다.
한편, 만일 마이크로컨트롤러(301)가 판단 태스크(1106)에서 긍정 판단을 하면, 그것은 경로(1159)를 따라 "Is 1st 5sec Delay Done" (첫번째 5초 지연이 완료되었는가?) 판단 태스크(1107)로 시퀀스한다. 이 판단 태스크(1107)에서, 마이크로컨트롤러(301)는 첫 번째 5초 타이머가 만료되었는지 판단하고, 만일 만료되지 않았다면, 경로(953)를 따라 태스크(905)(도9)로 복귀한다. 만일 스위치가 이 주기 동안에 상태를 변경하면, 마이크로컨트롤러(301)가 태스크(905)로 복귀할 때, 그것은 경로(1153)를 따라 태스크(1102)를 통해 태스크(905)로 복귀하게 된다.
한편, 마이크로컨트롤러(301)가 판단 태스크(1107)에서 긍정 판단을 하면, 그것은 경로(1160)를 따라 "Is Attn Bit Set" (어텐션 비트가 셋트되었는가?) 판단 태스크(1109)로 시퀀스한다. 이 판단 태스크(1109)에서는, 어텐션 비트가 패킷으로 STC(400)로 전송되었는지 알기 위한 검사가 이루어진다. 만일 마이크로컨트롤러(301)가 판단 태스크(1109)에서 부정 판단을 하면, 그것은 경로(1161)를 따라 "Set Attn Bit" (어텐션 비트 셋트) 태스크(1110)로 시퀀스하여, 그것이 마이크로컨트롤러(301)와 관련된 STD(300)에 대한 어드레스를 폴링할 때 판독되도록 STC(400)에 대한 어텐션 비트를 셋트한다. 다음에, 마이크로컨트롤러(301)는 경로(1162)를 따라 시퀀스하여, "Set 2nd 5sec Delay" (두번째 5초 지연 셋트) 태스크(1111)를 실행하게 된다. 이 태스크(1111)에서, 마이크로컨트롤러(301)는 다른 5초 지연 타이머를 설정하여, 핸들러(1400)가 어텐션 상태에 작용하여, 드라이브 모듈의 전원 오프에 이어 파이버 채널 루프(160,170)로부터드라이브를 격리시키는 것과 같은 소정의 액션을 취할 수 있는 시간을 허용한다. 이 태스크(1111) 다음에, 마이크로컨트롤러(301)는 경로(953)를 통해 태스크(905)로 복귀한다.
한편, 만일 마이크로컨트롤러(301)가 판단 태스크(1109)에서 긍정 판단을 하면, 그것은 경로(1163)를 따라 시퀀스하여, "Is 2nd 5sec delay" (두번째 5초 지연이 완료되었는가?) 판단 태스크(1112)를 실행하게 된다. 만일 마이크로컨트롤러(301)가 이 판단 태스크(1112)에서 부정 판단을 하면, 그것은 경로(1164)를 따라 "Rx Response from STC" (STC로부터의 수신 응답) 판단 태스크(1113)로 시퀀스한다. 이 판단 태스크(1113)를 처리하는데 있어, 마이크로컨트롤러(301)는 후속 연산을 제어하는 "Rx Response from STC" 플래그의 상태를 판단한다. "Rx Response from STC" 플래그의 상태는 핸들러(1400)가 어텐션 상태에 응답하여 "Drive Power Off" 모드 선택 명령을 전송하도록 STC(400)를 인에이블시켰는지 여부를 나타낸다. 이 플래그는 어텐션 상태 비트가 액티브 상태인 동안에 "Drive Power Off" 모드 선택 명령을 디코드할 때 "Mode Sel Response Pckt" (모드 선택 응답 패킷) 태스크(1009)(도10)에 의해 조건부로 셋트된다. 태스크(1113)에서 이루어진 판단은 마이크로컨트롤러(301)가 두 번째 5초 시간 지연의 종료 이전에 드라이브 모듈의 전원의 오프를 계속할 것인지 여부를 제어한다. 따라서, 만일 마이크로컨트롤러(301)가 판단 태스크(1113)에서 긍정 판단을 하면, 그것은 경로(1166)를 따라 시퀀스하여 "Drive Power Off" (드라이브 전원 오프) 태스크(1114)를 실행하게 된다. 이와 반대로, 만일 마이크로컨트롤러(301)가 판단 태스크(1113)에서 부정 판단을 하면, 그것은 이 서브루틴으로부터 경로(953)를 통해 태스크(905)로 복귀한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1112)에서 긍정 판단을 하면, 두 번째 5초 지연이 경과된 것이며, 마이크로컨트롤러(301)는 경로(1165)를 따라 시퀀스하여 태스크(1114)를 실행하게 된다. 여기서, 드라이브 모듈의 전원은 오프되고, 드라이브 모듈의 파이버 채널 드라이브-포트 바이패스 스위치(213,215)가 바이패스 모드로 조절되고, 관련 플래그가 조절된다. 이후에, 마이크로컨트롤러(301)는 이 서브루틴으로부터 경로(953)를 통해 태스크(905)로 되돌아간다.
도12는 타이머 인터럽트 서브루틴(1200)에 대한 흐름도를 도시하고 있다. 이 타이머 인터럽트 서브루틴(1200)의 제어하에, 마이크로컨트롤러(301)는 각각의 드라이브 모듈(202,203,204)에 대해 독립적인 1초 타이머를 설정하고 유지관리하며, 이들 타이머는 다른 태스크의 제어하에서의 처리와 관련하여 이용된다. 마이크로컨트롤러(301)는 하드웨어 타이머와 STD 마이크로컨트롤러(301) 내에 위치된 인터럽트 로직(별도로 도시되지 않음)의 제어하에 주기적으로 서브루틴(1200)을 처리한다. 하드웨어 타이머 및 인터럽트 로직으로부터의 인터럽트에 응답하여, 마이크로컨트롤러(301)는 타이머 인터럽트 서브루틴(1200)을 처리하기 시작한다. 처음에, 마이크로컨트롤러(301)는 경로(1251)를 따라 "Save General Purpose Reg's" (범용 레지스터 세이브) 태스크(1201)로 시퀀스하여, 스택(별도로 도시되지 않음) 상의 모든 콘텍스트 레지스터를 세이브하고, 경로(1252)를 따라 "Inc Timer" (타이머 증가) 태스크(1202)로 시퀀스한다. 이 태스크(1202)는 마이크로컨트롤러(301)로 하여금, Timer_Intr 서브루틴(1200)이 활성화될 때마다 타이머 셀을 소정의 양만큼증가시킬 수 있도록 하는 자유 실행(free running) 태스크이다. 다음에, 마이크로컨트롤러(301)는 경로(1253)를 통해 "Is 1sec Count Complete" (1초 카운트가 완료되었는가?) 태스크(1203)로 시퀀스한다. 이 판단 태스크(1203)에서, 마이크로컨트롤러(301)는 1초 시간 카운터가 카운트-아웃되었는지 검사한다. 만일 마이크로컨트롤러(301)가 단계(1203)에서 부정 판단을 하면, 그것은 경로(1262)를 따라 "Rsetore General Purpose Reg's" (범용 레지스터 복원) 태스크(1210)로 시퀀스하고, 이 태스크는 마이크로컨트롤러(301)로 하여금 태스크(1201)에서 세이브된 레지스터를 복원(restore)할 수 있도록 한다. 단계(1210) 다음에, 마이크로컨트롤러(301)는 인터럽트로부터의 복귀를 가능하게 하는 Return(복귀) 명령(1211)을 처리한다.
다시 판단 태스크(1203)로 되돌아가서, 만일 마이크로컨트롤러(301)가 이 단계에서 긍정 판단을 하면, 그것은 경로(1254)로 시작되는 경로를 따라 시퀀스하여, 연속되는 드라이브 액티브 판단 태스크(1204,1207,1209)를 수행하게 된다. 만일 마이크로컨트롤러(301)가 판단 태스크(1204,1207,1209)와 관련하여 긍정 판단을 하면, 그것은 각각의 경로(1255,1258,1261)를 따라 각각의 드라이브 타이머 서비스 태스크(1205,1206,1208)로 시퀀스한다. 드라이브 타이머 서비스 태스크(1205,1206,1208)를 처리하는데 있어, 마이크로컨트롤러(301)는 각각의 드라이브 모듈(202-204)에 서비스할 책임이 있는 서브루틴에 의해 인에이블되는 타이머를 증가시키고, 관련 상태 플래그를 셋트한다. 태스크(1208) 다음에, 또는 마이크로컨트롤러(301)가 부정 판단을 하는 경우에 태스크(1209) 다음에, 그것은태스크(1210)로 시퀀스하여 이전에 세이브된 레지스터를 복원하고 복귀한다.
도13(도13a 및 도13b)은 단일 바이트가 버스(150)로부터 마이크로컨트롤러(301)의 인터페이스에 의해 수신되거나 또는 마이크로컨트롤러(301)의 인터페이스에 의해 버스(150)를 통해 수신되는 경우에 처리되는 인터럽트 서브루틴(1300)의 흐름도를 도시하고 있다. 이 인터럽트 서브루틴(1300)에서, 마이크로컨트롤러(301)는 STC(400)로부터의 명령 패킷의 수신과 STC(400)로의 상태 응답 패킷의 송신을 제어한다. 이 인터럽트 서브루틴(1300)을 처리하는데 있어, 처음에 마이크로컨트롤러(301)는 경로(1351)를 통해 "Save General Purpose Reg's" 태스크(1302)로 시퀀스하여, 스택 메모리 상의 모든 콘텍스트 레지스터를 세이브한다. 다음에, 마이크로컨트롤러(301)는 경로(1352)를 따라 "Decode S1STA" 태스크(1301)로 시퀀스하여, STD(300)에 의해 송신되거나 수신되는 패킷(500)에 대한 프레이밍 상태 및 에러 상태를 나타내는, S1STA 레지스터(I2C 스펙에 정의됨)에 포함된 상태 코드를 디코드한다. 다음에, 마이크로컨트롤러(301)는 경로(1353)를 따라 "Valid_St" 태스크(1303)로 시퀀스하여, S1STA 레지스터에 포함된 상태 코드가 유효 코드인지 판단한다. 만일 마이크로컨트롤러(301)가 태스크(1303)에서 부정 판단을 하면, 그것은 경로(1363)를 따라 "Proc_Error_Status" 태스크(1304)로 시퀀스하여, 에러 상태를 처리하고, STD(300)가 패킷(500)을 전송하고 있는 경우에는 다른 패킷 전송을 정지시키고, STD(300)가 패킷(500)을 수신하고 있는 경우에는 다른 패킷 수신을 정지시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 "Restore General Purpose Reg's"태스크(1334)로 시퀀스하여, 태스크(1302)에서 세이브된 레지스터를 복원한다. 태스크(1334) 다음에, 마이크로컨트롤러(301)는 경로(1385)를 따라, 복귀 명령(1335)으로 시퀀스하며, 이 명령은 마이크로컨트롤러(301)로 하여금 인터럽트로부터 복귀하도록 한다.
다시 판단 태스크(1303)를 참조하여, 만일 마이크로컨트롤러(301)가 이 태스크에서 긍정 판단을 하면, 이것은 S1STA 레지스터 내의 상태 코드가 유효한 경우가 되며, 마이크로컨트롤러(301)는 이 상태 코드에 의해 결정되는 바와 같이, 다수의 경로(1355,1356,1358,1362,1365,1369,1375,1380,1383) 중 하나를 따라 시퀀스한다. 만일 마이크로컨트롤러(301)가 S-비트 프레이밍 상태(501)가 발생한 것으로 S1STA 레지스터 내의 상태 코드를 판단하면, 마이크로컨트롤러(301)는 경로(1355)를 따라 태스크(1305)로 시퀀스하여, STA 비트를 클리어시키고, 프레이밍 상태(510)에 대한 수신지 어드레스를 S1DAT 데이터 레지스터에 로딩하고, 현재 상태를 셋트한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 전술한 바와 같이, 레지스터를 복원하고, 인터럽트 처리로부터 복귀한다.
만일 마이크로컨트롤러(301)가 STD(300)가 패킷에 대한 수신지 어드레스를 포함하는, 패킷에 대한 Dadr(수신지 어드레스) 프레임 상태(510)를 성공적으로 전송했다는 것을 S1STA 레지스터 내의 상태 코드가 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1356)를 따라 태스크(1306)로 이동하여, Attempt Counter(시도횟수 카운터)(별도로 도시되지 않음)를 클리어시키고, 다음에 전송될 프레이밍 상태에 따라, Sadr(발신지 어드레스) 프레이밍 상태(520)에 사용하기 위한 발신지 어드레스나, 프레이밍 상태(520-550)에 사용하기 위한 데이터나, 또는 프레이밍 상태(560)에 사용하기 위한 첵크섬을 S1DAT 레지스터에 로딩한다. 시도횟수 카운터는 패킷 전송 폴트가 일어나는 경우에 STD(300)가 패킷을 재전송하기 위해 시도한 횟수를 식별하며, 각각의 시도에 대해 증가된다. 마이크로컨트롤러(301)는 송신을 위해 S1DAT 레지스터로 전송되기 전에 그 내부 메모리내의 연속되는 위치에 연속되는 프레이밍 상태(510-560)를 저장하기 때문에, 태스크(1306) 다음에, 마이크로컨트롤러(301)는 경로(1357)를 따라 태스크(1307)로 시퀀스하여, 현재 상태를 갱신하고, 그 내부 메모리 내의 다음 위치를 나타내기 위해 전송될 패킷에 대한 송신 버퍼 포인터를 증가시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 Dadr 프레이밍 상태(510) 내의 수신지 어드레스가 확인응답되지 않았다는 것을 S1STA 레지스터 내의 상태 코드가 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1358)를 따라 태스크(1308)로 시퀀스하여, Transmit Attempt Counter(송신 시도횟수 카운터)를 증가시킨다. 이 태스크(1308) 다음에, 마이크로컨트롤러(301)는 경로(1359)를 따라 "Max Attempt" 판단 태스크(1309)로 시퀀스하여, 송신 시도횟수 카운터에 의해 제공되는 값이 최대 송신 어카운트 값에 일치하는지 판단한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1309)에서 긍정 판단을 하면, 그것은 경로(1360)를 따라 태스크(1310)로 시퀀스하여, 그 현재 상태를 갱신하고, Tx_Act_Flg (Transmit active flag)를 클리어시키고, 최대 시도횟수 카운트 값을 클리어시키고, 감시장치(watch dog) 타이머를 리셋하고, 스톱 시퀀스가 버스(150)로 발생되도록 하는 STO 비트를 셋트한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여 레지스터를 복원하고 인터럽트로부터 복귀한다.
다시 판단 태스크(1309)로 되돌아가서, 만일 마이크로컨트롤러(301)가 그 단계에서 부정 판단을 하면, 이것은 송신 시도횟수 카운터가 최대 송신 어카운트 값과 일치하지 않는 경우가 되며, 마이크로컨트롤러(301)는 경로(1361)를 따라 시퀀스하여 태스크(1311)를 실행하게 된다. 이 태스크(1311)에서, 마이크로컨트롤러(301)는 현재 상태를 갱신하고, 송신 버퍼 포인터를 리셋하고 이 송신 버퍼 포인터에 의해 지시되는 데이터를 S1DAT 레지스터에 로딩하고 버스 송신 스타트 시퀀스를 발생함으로써 동일한 데이터를 다시 재전송한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 S1STA 레지스터 내의 상태 코드가 버스(150)를 통해 하나의 데이터 바이트가 성공적으로 전송된 것을 나타내는 것으로 판단하면, 그것은 경로(1362)를 통해 판단 태스크(1312)로 시퀀스하여, 현재 바이트 카운트가 제로인지 판단한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1312)에서 긍정 판단을 하면, 마이크로컨트롤러(301)는 경로(1367)를 통해 태스크(1317)로 시퀀스하여, 현재 상태를 셋트하고, Tx_Act_Flg (Transmit active flag) 및 최대 시도횟수 카운트를 클리어시키고, 감시장치 타이머를 리셋하고, 버스 스톱 시퀀스가 버스(150)로 발생될 수 있도록 하는 STO 비트를 셋트한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 판단 태스크(1312)에서 부정 판단을 하면, STD(300)는 전체 패킷을 전송하지 않은 것이다. 이 경우에, 마이크로컨트롤러(301)는 경로(1364)를 따라 태스크(1314)로 시퀀스하여, 현재 바이트 카운트를 감소시킨다. 다음에, 마이크로컨트롤러(301)는 전술한 바와 같이, 경로(1356)를 통해 태스크(1306)로 시퀀스한다.
만일 마이크로컨트롤러(301)가 S1STA 레지스터내의 상태 코드가 전송된 데이터 바이트가 확인응답되지 않았다는 것을 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1365)를 따라 태스크(1315)로 시퀀스하여, 송신 시도횟수 카운터를 증가시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1366)를 따라 "Max Attempt" (최대 시도횟수) 판단 태스크(1316)로 시퀀스하여, 송신 시도횟수 카운터에 의해 제공된 값이 소정의 값과 일치하는지 판단한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1316)에서 긍정 판단을 하면, 그것은 경로(1357)를 따라 태스크(1317)로 시퀀스하여, 전술한 바와 같이 버스 스톱 시퀀스를 인에이블시키기 위해 STO 비트의 상태를 조절한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 판단 태스크(1316)에서 부정 판단을 하면, 이것은 송신 시도횟수 카운터에 의해 제공된 값이 소정의 값과 일치하지 않는 것으로판단한 경우가 되며, 마이크로컨트롤러(301)는 경로(1368)를 따라 태스크(1318)로 시퀀스하여, 현재 상태를 갱신하고, 송신 버퍼 포인터를 리셋하고, 패킷이 재전송될 수 있도록 버스 스타트 시퀀스를 재발생한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 STD(300)가 버스 패킷(500) 내의 프레이밍 상태의 전송중에 버스(150)에 대한 중재를 상실했다는 것을 S1STA 레지스터내의 상태 코드가 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1369)를 따라 태스크(1319)로 시퀀스하여, STD(300)가 액티브 송신 상태에 있다는 것을 나타내는 송신 플래그가 셋트되어 있는지 판단한다. 송신 플래그는 그것이 STD(300) 내부의 송신 감시장치 타이머(별도로 도시되지 않음)에 의해 클리어된 경우에 셋트되지 않을 수도 있다. 만일 마이크로컨트롤러(301)가 판단 태스크(1319)에서 긍정 판단을 하면, 그것은 경로(1371)를 통해 태스크(1312)로 시퀀스하여, 현재 상태를 갱신하고, 전송되고 있는 패킷의 제1 바이트의 그 메모리내의 위치를 지시하기 위해 송신 버퍼 포인터를 셋트하고, 버스(150)상으로 스타트 시퀀스를 재발생한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 판단 태스크(1319)에서 부정 판단을 하면, 이것은 송신 플래그가 클리어된 경우가 되며, 마이크로컨트롤러(301)는 경로(1370)를 따라 태스크(1320)로 시퀀스하여, 현재 상태를 갱신하고 플래그를 클리어시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 경로(1373)에 도시된 바와 같이, STD(300)의 고유 어드레스 또는 일반 호출(General Call) 어드레스를 포함하는, 패킷에 대한 수신지 어드레스 프레이밍 상태가 수신되었다는 것을 S1STA 레지스터내의 상태 코드가 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1373)를 통해 태스크(1322)로 시퀀스하여, 수신기 바이트 카운트 레지스터 및 수신기 버퍼 포인터 레지스터를 초기화하고 그 현재 상태를 갱신한다. 이후에, 마이크로컨트롤러(301)는 경로(1374)를 따라 태스크(1323)로 시퀀스하여, Receive active 플래그를 셋트하고, 제1 바이트를 수신기 버퍼 레지스터로 로딩하고, 수신기 버퍼 포인터를 증가시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 STD(300)의 고유 어드레스 또는 일반 호출 어드레스가 버스(150)로부터 수신되었기 때문에, STD(300)가 패킷을 전송하기 위해 시도하는 동안에 버스(150)에 대한 중재를 상실했다는 것을 S1STA 레지스터내의 상태 코드가 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1375)를 따라 판단 태스크(1324)로 시퀀스하여, STD의 송신기가 여전히 액티브 상태인지 판단한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1324)에서 긍정 판단을 하면, 그것은 경로(1377)를 따라 태스크(1326)로 시퀀스하여, 송신 버퍼 포인터를 재초기화하고, 버스(150)에 대한 버스 스타트 시퀀스를 재개시한다. 이후에, 마이크로컨트롤러(301)는 경로(1373)를 따라 태스크(1322)로 시퀀스하여, 전술한 바와 같이 수신기 바이트 카운트 레지스터 및 수신기 버퍼 포인터 레지스터를 초기화하고 그 현재 상태를 갱신한다. 만일 마이크로컨트롤러(301)가 판단 태스크(1324)에서 부정 판단을 하면, 그것은 경로(1373)를 따라 태스크(1322)로 시퀀스하여, 전술한 바와 같은 액션을 취한다.
만일 마이크로컨트롤러(301)가 S1STA 레지스터내의 상태 코드가 수신지 어드레스가 STD(300)에 대한 수신지 어드레스 또는 일반 호출 어드레스인 패킷에 대해 하나의 데이터 바이트가 성공적으로 수신되었다는 것을 나타내는 것으로 판단하면, 마이크로컨트롤러(301)는 경로(1380)를 따라 태스크(1328)로 시퀀스하여, 현재 상태를 갱신하고, 수신된 데이터 바이트를 수신기 버퍼로 로딩하고, 수신기 버퍼 포인터를 증가시킨다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 S1STA 레지스터 내의 상태 코드가 스톱 조건이 수신되었다는 것을 나타내는 것으로 판단하면, 그것은 경로(1381)를 따라 시퀀스하여, Slave_Rx_Done 태스크(1331)를 실행하게 된다. 이 태스크(1331)에서, 마이크로컨트롤러(301)는 현재 상태를 갱신하고, 오버런(overrun) 또는 언더런(under-run) 에러와 같은 패킷 내용 에러에 대해 검사하고, 태스크(904)에 사용하기 위한 RX_I2C_CMD(received command) 플래그를 셋트하고, 다른 관련 상태 플래그를 셋트한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
만일 마이크로컨트롤러(301)가 S1STA 레지스터내의 상태 코드가 전술한 것 이외의 코드인 것으로 판단하면, 이것은 버스(150)와 관련하여 에러 상태가 존재하거나 또는 STD(300)가 무효 S1STA 상태 코드를 수신한 경우에 발생할 수 있으며, 마이크로컨트롤러(301)는 경로(1383)를 따라 태스크(1332)로 시퀀스한다. 이 태스크(1332)에서, 마이크로컨트롤러(301)는 버스(150)의 데이터 및 클럭 라인을 무효화시킨다. 또한, 마이크로컨트롤러(301)는 경로(1384)를 통해 태스크(1333)로 시퀀스하여, 에러 상태 비트를 셋트하고, 버스 스톱 시퀀스를 전송한다. 다음에, 마이크로컨트롤러(301)는 경로(1354)를 따라 태스크(1334)로 시퀀스하여, 레지스터를 복원하고 인터럽트로부터 복귀한다.
도14는 핸들러(1400)의 제어하에 파이버 채널 호스트 어댑터(105)(도1)에 의해 수행되는 연산을 도시하고 있다. 핸들러(1400)는 특히, STC(400) 및 그것을 통해 STD(300)를 제어할 책임이 있다. 핸들러(1400)는 파이버 채널 호스트 어댑터(105)의 메모리(112)에 상주하며, 각각의 DSP(101,102)의 CPU(111)에 의해 실행된다. 핸들러(1400)는 그 핸들러(1400)를 통해 STC(400)의 마이크로컨트롤러(401)를 제어하는 작용을 하는 각각의 DSP(101,102)에 의해 처리되는 소프트웨어 또는 오퍼레이터에 의해 발생될 수 있는 명령에 의해 호출된다. 핸들러(1400)로 발생된 명령은 전술한 바와 같은 파이버 채널 루프(160,170)의 구성, 각각의 드라이브-포트 바이패스 스위치(213,215)에 대한 절차, 드라이브 모듈의 파워-업 또는 파워-다운 등을 제어할 수 있다.
도14는 핸들러(1400)와 관련하여 수행되는 연산의 흐름도를 도시하고 있다.이 핸들러(1400)는 3개의 구성요소, 즉, 메인 태스크(1401), Issue_cmd(issue command) 태스크(1409) 및 인터럽트 핸들러(1402)를 포함한다.
파이버 채널 호스트 어댑터(105)의 로컬 중앙 처리 장치(111)는 DSP(101,102)가 초기화될 때 운영체제의 제어하에 경로(1450)를 따라 핸들러(1400)의 메인 태스크(1401)를 호출한다. 로컬 중앙 처리 장치(111)는, 마이크로컨트롤러(401)를 리셋하기 위해 STC 마이크로컨트롤러(401) 내에 위치된 STC_CTL 제어 레지스터(별도로 도시되지 않음)에 소정의 값을 로딩하고, 마이크로컨트롤러(401)가 상태 정보 영역에 저장하고 있는 메모리(403) 내의 영역을 클리어하고, 파이버 채널 호스트 어댑터(105)로부터 각각의 DSP(101,102)의 중앙 처리 장치(103)로의 인터럽트를 인에이블시키기 위해 태스크(1402)를 이용한다. 이후에, 태스크(1402)에서, 핸들러(1400)는 전술한 바와 같이, STC(400)로 STD INIT 초기화 명령을 발생하도록 로컬 중앙 처리 장치(111)를 인에이블시킨다. STD INIT 명령을 발생하는데 있어, 로컬 중앙 처리 장치(111)는 실제적으로 명령 발생 태크스(1409)를 이용하게 된다. 이 태스크(1402)로부터, 로컬 중앙 처리 장치(111)는 경로(1453)를 따라 명령 발생 태크스(1409) 내의 판단 태스크(1410)로 시퀀스하여, stc_busy 플래그가 셋트되어 있는지 판단한다.
stc_busy 플래그는 명령 발생 태스크(1409) 및 인터럽트 핸들러(1412) 사이의 동기화 및 흐름 제어를 위해 이용된다. 초기화 이후에, stc_busy 플래그는 처음에 리셋 상태에 있게 된다. 이 stc_busy 플래그는 STC(400)로 명령을 발생할 때 태스크(1411)의 제어하에 로컬 중앙 처리 장치(111)에 의해 셋트되게 된다.stc_busy 플래그는 나중에, STC(400)가 명령 처리를 완료했다는 것을 통지하기 위해 로컬 중앙 처리 장치(111)를 인터럽트할 때, 인터럽트 핸들러(1412)의 처리중에 리셋된다. 명령 발생 태스크(1409)의 처리중에, 만일 로컬 중앙 처리 장치(111)가 태스크(1410)에서 stc_busy 플래그가 셋트되어 있는 것으로 판단하면, 이것은 STC(400)가 현재 명령을 처리하고 있다는 것을 나타내며, 로컬 중앙 처리 장치(111)는 STC가 이전에 발생된 명령의 처리를 완료했다는 것을 나타내기 위해 stc_busy 플래그가 리셋될 때까지 대기하게 된다. 만일 로컬 중앙 처리 장치(111)가 태스크(1410)에서 stc_busy 플래그가 셋트되어 있는 것을 판단하면, 그것은 경로(1464)를 통해 태스크(1410)로 되돌아가게 되며, 따라서, 로컬 중앙 처리 장치(111)는 stc_busy 플래그가 셋트되어 있는 동안에는 태스크(1410)를 반복적으로 처리하게 된다.
만일 로컬 중앙 처리 장치(111)가 태스크(1410)를 처리하는데 있어, stc_busy 플래그가 리셋 상태에 있는 것으로 판단하면, 그것은 경로(1454)를 통해 태스크(1411)로 시퀀스한다. 이 태스크(1411)를 처리하는데 있어, 로컬 중앙 처리 장치(111)는 Acquire_csa 태스크를 처리하는데, 여기서는 로컬 중앙 처리 장치(111)로 하여금 ISA 버스(153)를 통해 STC(400)의 메모리(403)에 억세스할 수 있게 하도록 멀티플렉서(402)가 인에이블된다. 이 연산에서, 로컬 중앙 처리 장치(111)는 STC_CTL 제어 신호의 상태를 조절하여, 마이크로컨트롤러(401)로 하여금 ST_RAM_ACC 메모리 억세스 제어 신호의 상태를 조절하도록하여, 멀티플렉스(402)를 인에이블시켜 라인(453)과 라인(456) 사이의 신호를 결합시킴으로써, 로컬 중앙 처리 장치(111)가 메모리(402)에 억세스할 수 있도록 허용한다. 로컬 중앙 처리 장치(111)는 메모리(403)에 억세스할 때, stc_busy 플래그를 셋트한다. 또한, 태스크(1411)를 처리하는데 있어, 로컬 중앙 처리 장치(111)는 STC(400)로 발생될 명령에 대한 다양한 필드를 생성하고, 명령을 메모리(403)로 카피한다. 이후에, 로컬 중앙 처리 장치(111)는 STC_CTL 제어 신호의 상태를 조절하여, 마이크로컨트롤러(401)로 하여금 ST_RAM_ACC 메모리 억세스 제어 신호의 상태를 조절하도록 하여, 멀티플렉스(402)를 인에이블시켜 라인(453)과 라인(456) 사이의 신호를 결합시킴으로써, 마이크로컨트롤러(401)가 메모리(402)에 억세스할 수 있도록 허용한다. 또한, 로컬 중앙 처리 장치(111)는 마이크로컨트롤러(401)를 인터럽트하기 위해 STC_CTL 제어 신호의 상태를 조절하며, 이것은 마이크로컨트롤러(401)가 전술한 바와 같이, 그 실행 루프(600)로부터 경로(650)를 따라 이동할 수 있도록 한다. 이후에, 태스크(1409)는 로컬 중앙 처리 장치(111)로 하여금 경로(1455)를 따라 Build Inquiry Command (질의 명령 구축) 태스크(1403)로 복귀하도록 한다.
이 태스크(1403)에서, 로컬 중앙 처리 장치(111)는 STC(400)가 STC_INIT 명령의 처리를 성공적으로 완료했는지 판단한다. 이 연산에서, 로컬 중앙 처리 장치(111)는 후술하는 바와 같이 인터럽트 핸들러(1412)와 관련하여 생성되는 액션 종료 상태(end action status)가 명령이 성공적으로 처리되었는다는 것을 나타내는지 판단한다. 만일 로컬 중앙 처리 장치(111)가 태스크(1403)에서, STC_INIT 명령이 성공적으로 처리된 것으로 판단하면, 그것은 STD 질의 명령을 구축하고, 경로(1453)를 따라 전술한 명령 발생 태스크(1409)로 시퀀스하여, 전술한 바와 같이, STC(400)로 명령이 발생될 수 있도록 한다. 명령 발생 태스크(1409)를 완료한 이후에, 로컬 중앙 처리 장치(111)는 메인 태스크(1401)의 태스크(1404)로 되돌아간다.
태스크(1404)에서, 로컬 중앙 처리 장치(111)는 태스크(1403)와 관련하여 전술한 바와 유사한 방식으로, STC(400)가 STD 질의 명령을 성공적으로 완료했는지 판단하고, 만일 긍정 판단을 하면, STC Drive Power On/Off(드라이브 전원 온/오프) 명령을 구축하고, 경로(1453)를 따라 전술한 명령 발생 태스크(1409)로 시퀀스하여, 전술한 바와 같이 STC(400)로 명령이 발생될 수 있도록 한다. 명령 발생 태스크(1409)의 완료 이후에, 로컬 중앙 처리 장치(111)는 메인 태스크(1401)의 태스크(1405)로 복귀한다.
태스크(1405)에서, 로컬 중앙 처리 장치(111)는 태스크(1403)와 관련하여 전술한 바와 유사한 방식으로 STC(400)가 STC 드라이브 전원 온/오프 명령을 성공적으로 완료했는지 판단한다. 만일 로컬 중앙 처리 장치(111)가 긍정 판단을 하면, 그것은 STD Start_Attention_Poll 명령을 구축하고, 경로(1453)를 따라 명령 발생 태스크(1409)로 시퀀스하여, 전술한 바와 같이 STC(400)로 명령이 발생될 수 있도록 한다. 명령 발생 태스크(1409)의 완료 이후에, 로컬 중앙 처리 장치(111)는 메인 태스크(1401)의 명령 루프(1406), 특히, 태스크(1407)로 복귀한다.
태스크(1407)와 태스크(1408)를 포함하는 명령 루프(1406)는 로컬 중앙 처리 장치(111)로 하여금, 그것에 의해 처리되는 프로그램의 제어하에 각각의 DSP(101,102)의 오퍼레이터 또는 각각의 DSP의 중앙 처리 장치(103)에 의해 제공되는 명령을 처리할 수 있도록 한다. 명령 루프(1406)에서, 로컬 중앙 처리 장치(111)는 처음에 cmd_present 판단 태스크(1407)를 처리하게 되며, 여기서는, DSP(101,102) 내의 명령 큐(별도로 도시되지 않음)가 오퍼레이터 또는 다른 프로그램에 의해 포스팅된 명령을 포함하는지 판단한다. 만일 로컬 중앙 처리 장치(111)가 태스크(1407)내의 cmd_present 상태에서 긍정 판단을 하면, 그것은 경로(1451)를 따라 명령 구축 및 명령 발생 태스크(1408)로 시퀀스한다. 태스크(1408)에서, 로컬 중앙 처리 장치(111)는 STC(400)에 대한 각각의 명령을 구축하고, 다음에 경로(1453)를 따라 명령 발생 태스크(1409)로 시퀀스하여, 전술한 바와 같이 STC(400)로 명령이 발생될 수 있도록 한다. 명령 발생 태스크(1409)의 완료 이후에, 로컬 중앙 처리 장치(111)는 메인 태스크(1401)의 명령 루프(1406), 특히, 태스크(1407)로 복귀한다.
cmd_present (명령 존재) 태스크(1407)로 되돌아가서, 만일 로컬 중앙 처리 장치(111)가 이 태스크(1407)에서 부정 판단을 하면, 그것은 경로(1452)를 통해 태스크(1407)로 되돌아간다. 따라서, 로컬 중앙 처리 장치(111)는 명령 큐가 명령을 포함하게될 때까지 명령 존재 태스크(1407)를 반복적으로 수행하게 되며, 그 이후에는 태스크(1408)로 시퀀스하게 된다.
인터럽트 핸들러(1412)는 STC(400)로부터 로컬 중앙 처리 장치(111)에 의해 수신되는 인터럽트와 관련한 처리를 제어하기 위해 이용되는데, 이것은 라인(451)(도4) 상에 ST_STAT_INT 인터럽트 신호를 표명함으로써 STC의 마이크로컨트롤러(401)에 의해 신호된다. ST_STAT_INT 인터럽트 신호의 표명에 응답하여, 로컬 중앙 처리 장치(111)는 멀티플렉서(402)를 인에이블시켜 메모리(403)에 대한 억세스를 허용하도록 하기 위해, 인터럽트 핸들러(1412)에서 Acquire_csa 태스크(1413)를 처리하기 시작한다. 로컬 중앙 처리 장치(111)가 메모리(403)에 억세스할 수 있게 되면, 그것은 경로(1457)를 따라 명령 디코드 태스크(Decode Command task)(1414)로 시퀀스하며, 여기서, 로컬 중앙 처리 장치(111)는 완료된 발생 명령에 근거하여, STC의 마이크로컨트롤러(401)에 의해 로딩되는 상태 표시를 디코드하고, 그 상태 표시에 근거하여 분기한다. 만일 로컬 중앙 처리 장치(111)가 명령이 성공적으로 완료되었다는 것을 상태 표시가 나타내는 것으로 판단하면, 그것은 경로(1460)를 따라 명령 완료 태스크(1417)로 시퀀스한다. 이 명령 완료 태스크(1417)에서, 로컬 중앙 처리 장치(111)는 메모리(403)내의 상태 정보를 클리어시키고, 마이크로컨트롤러(401)로 하여금 그것이(즉, 마이크로컨트롤러(401)) 메모리(403)에 억세스할 수 있도록 멀티플렉서(402)를 제어하도록 한다. 만일 완료된 명령이 STC INIT 명령이면, 전술한 메인 태스크(1401)의 제어하에 STC(400)로 다른 명령의 발생이 허용되도록 하기 위해 내부의 "Initialization completed successfully" (초기화가 성공적으로 완료됨) 플래그가 셋트된다. 로컬 중앙 처리 장치(111)는 또한, STC(400)가 다른 명령을 수신하기 위한 상태에 있다는 것을 표시하기 위해 stc_busy 플래그를 클리어시키고, 마이크로컨트롤러(401)는 ST_STAT_INT 인터럽트 신호를 무효화하도록 인에이블된다. 명령 완료 태스크(1417) 이후에, 로컬 중앙 처리 장치(111)는 경로(1463)를 따라 시퀀스하여, 인터럽트 핸들러(1412)를 빠져나오기 위해 복귀 명령(1418)을 실행한다.
만일 로컬 중앙 처리 장치(111)가 태스크(1414)에서, 상태 표시가 에러 상태를 나타내는 것으로 판단하면, 그것은 경로(1458)를 따라 Error Process (에러 처리) 태스크(1415)로 시퀀스하여, 에러를 처리한다. 이 태스크(1415) 다음에, 로컬 중앙 처리 장치(111)는 경로(1461)를 따라 전술한 바와 같은 명령 완료 태스크(1417)로 시퀀스한다.
마지막으로, 만일 로컬 중앙 처리 장치(111)가 태스크(1414)에서, 상태 표시가 어텐션 상태를 나타내는 것으로 판단하면, 그것은 경로(1459)를 따라 Attention Process (어텐션 처리) 태스크(1416)로 시퀀스하여, 어텐션 상태를 처리한다. 이 태스크(1416) 다음에, 로컬 중앙 처리 장치(111)는 경로(1462)를 따라 전술한 바와 같은 명령 완료 태스크(1417)로 시퀀스한다.
본 발명에 따른 시스템은 그 전부 또는 일부가 특수 목적 하드웨어 또는 범용 컴퓨터 시스템으로 구성될 수 있으며. 그 일부분은 적절한 프로그램에 의해 제어될 수도 있다는 것을 이해할 것이다. 어떤 프로그램은 그 전부 또는 일부가 종래의 방식으로 시스템에 저장될 수도 있으며, 또는 종래의 방식으로 정보를 전달하기 위한 네트워크 또는 다른 메카니즘을 통해 시스템으로 제공될 수도 있다. 또한, 본 발명의 시스템은 시스템에 직접 접속되거나 또는 종래의 방식으로 정보를 전달하기 위한 네트워크 또는 다른 메카니즘을 통해 시스템에 정보를 전달할 수도 있는 오퍼레이터 입력 구성요소(도시 안됨)를 이용하여 제공되는 정보에 의해 동작하거나 또는 제어될 수 있다는 것을 이해할 것이다.
비록 전술한 설명이 본 발명의 특정 실시예로 제한되었지만, 그러나, 본 발명의 일부 또는 모든 장점을 달성하면서, 본 발명에 다양한 변경 및 수정이 이루어질 수도 있다는 것은 명백하다. 따라서, 첨부된 청구범위의 목적은 이러한 변경 및 수정이 본 발명의 사상 및 범위내에 속하도록 하는 것이다.
전술한 바와 같은 본 발명에 따르면, 디지탈 데이터 처리 시스템 내의 다수의 호스트 컴퓨터 사이에서 기억 서브시스템과 같은 자원의 공유를 용이하게 하기 위한 새롭고 개선된 시스템 및 방법을 제공할 수 있다.

Claims (16)

  1. 상호접속수단(interconnection)에 의해 상호접속된 다수의 자원 및 하나의 호스트 프로세서를 포함하는 적어도 하나의 서브시스템을 구비한 디지탈 데이터 처리 시스템에 있어서,
    상기 상호접속수단은 루프의 형태로 이루어지진 토폴로지(topology)를 가지며, 상기 상호접속수단은 상기 토폴로지가 전체 루프를 포함하는 횡단 모드(pass-through mode)와 상기 토폴로지가 호스트 프로세서를 포함하여 루프의 일부분을 포함하는 바이패스 모드(bypass mode)를 갖도록 선택적으로 구성가능한 적어도 하나의 구성(configuration) 스위치를 포함하고, 상기 호스트 프로세서는 상기 적어도 하나의 구성 스위치를 상기 횡단 모드 또는 상기 바이패스 모드로 선택적으로 조절하도록 구성되어 있는
    디지탈 데이터 처리 시스템.
  2. 제 1 항에 있어서,
    상기 자원중 적어도 하나는 디스크 기억 장치를 포함하는
    디지탈 데이터 처리 시스템.
  3. 제 1 항에 있어서,
    상기 서브시스템은 상기 적어도 하나의 구성 스위치를 조절하도록 접속된 서브시스템 제어기를 포함하고, 상기 서브시스템 제어기는 상기 호스트 프로세서로부터 구성 명령을 수신하고 그에 응답하여 상기 구성 스위치를 상기 횡단 모드 또는 상기 바이패스 모드로 조절하도록 구성된
    디지탈 데이터 처리 시스템.
  4. 제 3 항에 있어서,
    상기 호스트 프로세서와 상기 서브시스템 제어기를 상호접속하도록 구성된 명령 상호접속수단을 더 포함하고, 상기 호스트 프로세서는 상기 구성 명령을 상기 명령 상호접속수단을 통해 상기 서브시스템 제어기로 전송하도록 구성된
    디지탈 데이터 처리 시스템.
  5. 제 4 항에 있어서,
    상기 명령 상호접속수단은 직렬 버스를 포함하는
    디지탈 데이터 처리 시스템.
  6. 제 5 항에 있어서,
    상기 명령 상호접속수단은 I2C 버스를 포함하는
    디지탈 데이터 처리 시스템.
  7. 제 3 항에 있어서,
    상기 호스트 프로세서는 상기 명령 상호접속수단을 통해 상태 요구 명령(status request commands)을 전송하도록 구성되고, 상기 서브시스템 제어기는 그에 응답하여 상태 응답을 제공하도록 구성된
    디지탈 데이터 처리 시스템.
  8. 제 7 항에 있어서,
    상기 서브시스템 제어기는 상기 명령 상호접속수단을 통해 상태 응답을 제공하도록 구성된
    디지탈 데이터 처리 시스템.
  9. 제 1 항에 있어서,
    상기 각각의 자원은 포트-바이패스 스위치와 하나의 장치(device)를 포함하고, 상기 포트 바이패스 스위치는 루프 토폴로지가 상기 장치를 포함하는 횡단 모드와 상기 루프 토폴로지가 상기 장치를 바이패스하는 바이패스 모드를 갖도록 선택적으로 구성가능하며, 상기 호스트 프로세서는 상기 각각의 자원의 포트 바이패스 스위치를 상기 각각의 모드로 선택적으로 조절하도록 구성된
    디지탈 데이터 처리 시스템.
  10. 제 1 항에 있어서,
    상기 디지탈 데이터 처리 시스템은 다수의 호스트 프로세서 및 각각 상기 모든 호스트 프로세서와 상기 적어도 하나의 서브시스템을 포함하는 루프의 형태로 되어 있는 다수의 상호접속수단을 포함하고, 상기 각각의 상호접속수단은 적어도 하나의 구성 스위치를 포함하고, 상기 각각의 호스트 프로세서는 상기 다수의 상호접속수단 중 하나와 관련된 구성 스위치를 제어하도록 구성된
    디지탈 데이터 처리 시스템.
  11. 제 10 항에 있어서,
    상기 자원들중 적어도 하나의 자원은 디스크 기억 장치를 포함하는
    디지탈 데이터 처리 시스템.
  12. 제 1 항에 있어서,
    상기 서브시스템은 상기 다수의 상호접속수단중 하나와 각각 관련된 다수의 서브시스템 제어기를 포함하고, 상기 각각의 서브시스템 제어기는 그것이 관련되어있는 상호접속수단과 관련된 적어도 하나의 구성 스위치를 조절하도록 구성되고, 또한, 상기 서브시스템 제어기는 상기 호스트 시스템으로부터 구성 명령을 수신하고 그에 응답하여 그것과 관련된 구성 스위치를 횡단 모드 또는 바이패스 모드로 조절하도록 구성된
    디지탈 데이터 처리 시스템.
  13. 제 12 항에 있어서,
    상기 호스트 프로세서와 상기 서브시스템 제어기를 상호접속하도록 구성된 명령 상호접속수단을 더 포함하고, 상기 호스트 프로세서는 상기 명령 상호접속수단을 통해 상기 서브시스템 제어기로 구성 명령을 전송하도록 구성된
    디지탈 데이터 처리 시스템.
  14. 제 13 항에 있어서,
    상기 호스트 프로세서는 상기 명령 상호접속수단을 통해 상태 요구 명령을 전송하도록 구성되고, 상기 서브시스템 제어기는 상태 응답을 제공하도록 구성된
    디지탈 데이터 처리 시스템.
  15. 제 14 항에 있어서,
    상기 서브시스템 제어기는 상기 명령 상호접속수단을 통해 상태 응답을 제공하도록 구성된
    디지탈 데이터 처리 시스템.
  16. 제 10 항에 있어서,
    상기 각각의 자원은 상기 각각의 상호접속수단과 관련된 포트 바이패스 스위치와 하나의 장치를 포함하고, 각각의 포트 바이패스 스위치는 상기 각각의 상호접속수단의 루프 토폴로지가 상기 장치를 포함하는 횡단 모드와 상기 루프 토폴로지가 상기 장치를 바이패스하는 바이패스 모드를 갖도록 선택적으로 구성가능하며, 상기 호스트 프로세서는 상기 각각의 자원의 포트 바이패스 스위치를 상기 각각의 모드로 선택적으로 조절하도록 구성된
    디지탈 데이터 처리 시스템.
KR1019990025904A 1998-06-30 1999-06-30 디지탈데이터처리시스템내의다수의호스트컴퓨터사이에서자원의공유를용이하게하기위한시스템 KR20000006576A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/107,070 1998-06-30
US09/107,070 US6356984B1 (en) 1998-06-30 1998-06-30 Digital data processing system having a data bus and a control bus

Publications (1)

Publication Number Publication Date
KR20000006576A true KR20000006576A (ko) 2000-01-25

Family

ID=22314682

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990025904A KR20000006576A (ko) 1998-06-30 1999-06-30 디지탈데이터처리시스템내의다수의호스트컴퓨터사이에서자원의공유를용이하게하기위한시스템

Country Status (4)

Country Link
US (1) US6356984B1 (ko)
EP (1) EP0969629A3 (ko)
JP (1) JP2000099448A (ko)
KR (1) KR20000006576A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230151239A (ko) 2022-04-25 2023-11-01 상신전자(주) 에나멜 피복 전선 레이저 탈피 시스템

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4294142B2 (ja) 1999-02-02 2009-07-08 株式会社日立製作所 ディスクサブシステム
US6647433B1 (en) * 2000-08-14 2003-11-11 Hewlett-Packard Development Company, L.P. Architecture and related methods facilitating secure port bypass circuit settings
US6934785B2 (en) * 2000-12-22 2005-08-23 Micron Technology, Inc. High speed interface with looped bus
US6725315B2 (en) * 2000-12-22 2004-04-20 Nortel Networks Limited System and method to efficiently move data from one data bus to another data bus in a network switch
US6763409B1 (en) * 2001-01-31 2004-07-13 Hewlett-Packard Development Company, L.P. Switch-on-the-fly GBIC disk channel adapter and disk channel system
JP3536829B2 (ja) * 2001-06-14 2004-06-14 日本電気株式会社 Fc−alシステムのリンク診断方法及び装置
US7185062B2 (en) * 2001-09-28 2007-02-27 Emc Corporation Switch-based storage services
JP3722429B2 (ja) * 2002-01-17 2005-11-30 インターナショナル・ビジネス・マシーンズ・コーポレーション 外部記憶装置、制御装置、外部記憶システム、制御方法、プログラム、及び記録媒体
JP2005518589A (ja) * 2002-02-22 2005-06-23 レクサー メディア,インク. インジケータライトが一体化されたリムーバブル記憶媒体
JP4219610B2 (ja) * 2002-04-23 2009-02-04 株式会社日立製作所 ディスクサブシステム装置
US20040076428A1 (en) * 2002-05-20 2004-04-22 The Boeing Company Form existing fibers into a fibre channel-arbitrated loop
US6961786B2 (en) * 2002-09-25 2005-11-01 Lsi Logic Corporation Fiber loop linking/detecting
US6981111B1 (en) * 2003-03-31 2005-12-27 Emc Corporation Data storage system
US7421520B2 (en) * 2003-08-29 2008-09-02 Aristos Logic Corporation High-speed I/O controller having separate control and data paths
US7721024B2 (en) * 2003-11-12 2010-05-18 Dell Products L.P. System and method for exiting from an interrupt mode in a multiple processor system
US20050228943A1 (en) * 2004-04-02 2005-10-13 Decenzo David P Multipath redundant storage system architecture and method
US7707434B2 (en) * 2004-06-29 2010-04-27 Broadcom Corporation Power control bus for carrying power control information indicating a power supply voltage variability
US7581122B2 (en) * 2004-06-29 2009-08-25 Broadcom Corporation Power supply integrated circuit with feedback control
JP2006072717A (ja) * 2004-09-02 2006-03-16 Hitachi Ltd ディスクサブシステム
US8312454B2 (en) * 2006-08-29 2012-11-13 Dot Hill Systems Corporation System administration method and apparatus
JP5068086B2 (ja) * 2007-02-16 2012-11-07 株式会社日立製作所 記憶制御装置
US8473647B2 (en) * 2007-09-17 2013-06-25 Apple Inc. Methods and apparatus for decreasing power consumption and bus activity
CN101131570B (zh) * 2007-09-18 2011-06-08 重庆川仪自动化股份有限公司 冗余切换控制方法及其控制电路
CN102761646B (zh) * 2011-04-26 2014-12-10 深圳富泰宏精密工业有限公司 双模手机的命令交互纠错系统及方法
CN107852275B (zh) 2015-07-31 2020-10-23 索尼公司 数据传输装置和数据传输方法、接收装置和接收方法
US9960981B2 (en) 2015-10-08 2018-05-01 Sony Corporation Communication device, communication method, program, and communication system
US20180322084A1 (en) 2015-12-16 2018-11-08 Sony Corporation Communication apparatus, communication method, program, and communication system
JP6792314B2 (ja) 2016-04-22 2020-11-25 ソニーセミコンダクタソリューションズ株式会社 通信装置、通信方法、プログラム、および、通信システム
JP6739983B2 (ja) 2016-04-22 2020-08-12 ソニーセミコンダクタソリューションズ株式会社 通信装置、通信方法、プログラム、および、通信システム
JP6786871B2 (ja) 2016-05-18 2020-11-18 ソニー株式会社 通信装置、通信方法、プログラム、および、通信システム
JP6911282B2 (ja) 2016-05-18 2021-07-28 ソニーグループ株式会社 通信装置、通信方法、プログラム、および、通信システム
JP6971538B2 (ja) 2016-05-18 2021-11-24 ソニーセミコンダクタソリューションズ株式会社 通信装置、通信方法、プログラム、および、通信システム
JP6828271B2 (ja) 2016-05-18 2021-02-10 ソニー株式会社 通信装置、通信方法、プログラム、および、通信システム
TWI834603B (zh) 2017-02-14 2024-03-11 日商索尼半導體解決方案公司 通信裝置、通信方法、通信程式及通信系統

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4090035A (en) * 1975-12-17 1978-05-16 Martin Marietta Corporation Line access module
US5249164A (en) * 1990-06-27 1993-09-28 Koz Mark C Digital color tv for personal computers
US5535035A (en) * 1994-09-15 1996-07-09 International Business Machines Corporation Optical fiber ring communications system and communications method
US5602462A (en) * 1995-02-21 1997-02-11 Best Power Technology, Incorporated Uninterruptible power system
US5729763A (en) * 1995-08-15 1998-03-17 Emc Corporation Data storage system
US5768551A (en) * 1995-09-29 1998-06-16 Emc Corporation Inter connected loop channel for reducing electrical signal jitter
GB2318262B (en) * 1996-10-08 2000-11-08 Ibm Bypass circuit for data processing system
US5922077A (en) * 1996-11-14 1999-07-13 Data General Corporation Fail-over switching system
JP3516689B2 (ja) * 1996-11-14 2004-04-05 イーエムシー・コーポレーション 動的更新可能ディスク・アレイ・システムおよび方法
US6055228A (en) * 1996-12-23 2000-04-25 Lsi Logic Corporation Methods and apparatus for dynamic topology configuration in a daisy-chained communication environment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230151239A (ko) 2022-04-25 2023-11-01 상신전자(주) 에나멜 피복 전선 레이저 탈피 시스템

Also Published As

Publication number Publication date
JP2000099448A (ja) 2000-04-07
EP0969629A2 (en) 2000-01-05
EP0969629A3 (en) 2000-12-13
US6356984B1 (en) 2002-03-12

Similar Documents

Publication Publication Date Title
KR20000006576A (ko) 디지탈데이터처리시스템내의다수의호스트컴퓨터사이에서자원의공유를용이하게하기위한시스템
JP7247213B2 (ja) デバッグコントローラ回路
US6311294B1 (en) Device and method for efficient bulk data retrieval using a universal serial bus
US5644700A (en) Method for operating redundant master I/O controllers
US4777595A (en) Apparatus for transferring blocks of information from one node to a second node in a computer network
JP2944055B2 (ja) インテリジェント通信網インタフェース回路
JP4606589B2 (ja) 入出力デバイスを動的に再構成する装置及び方法
US20030131136A1 (en) Method and apparatus for emulating an OS-supported communication device to enable remote debugging
JPS61288246A (ja) 多重ポ−ト通信システム
EP0752667A1 (en) Method and apparatus for hybrid packet-switched and circuit-switched flow control in a computer system
JPH04218861A (ja) 多重クラスタ信号プロセッサ
JP4498389B2 (ja) マルチ・ノードコンピュータシステム
EP0446077A2 (en) A control system for multi-processor system
WO1992006431A1 (en) Message control method for data communication system
US7685473B2 (en) Computer system, method of detecting a stall in a computer system, and signal-bearing medium embodying a program causing a computer system to perform a method of detecting a stall in a computer system
JP3057591B2 (ja) マルチプロセッサシステム
EP0094177A2 (en) Apparatus for direct memory-to-memory intercomputer communication
JPS61131060A (ja) ネツトワーク制御システム
KR100440588B1 (ko) 계층적 구조를 지원하는 직렬 버스형 형상 인식 및 경보장치
JP3538069B2 (ja) ブロードキャスト通信試験方式
JPH0756842A (ja) チャネルサブシステム
JPH0675883A (ja) メッセージ通信装置
CN116582473A (zh) 一种机架式通信设备及其串口管理方法
JPH05216792A (ja) プロセッサ間におけるサービス要求制御方式
JPH0248736A (ja) 情報処理システム

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid