상기 목적을 달성하기 위한 본 발명에 따른, 전자장치는, 헤더에 읽기시작어드레스(Read_Start_Address), 쓰기시작어드레스(Write_Start_Address),및 쓰기데이터(Write_Data)가 포함되어 있는 커멘드(Command)를 생성하여 출력하는 제1 디바이스; 및 상기 커멘드를 수신하여 데이터 기록이 가능한 제2 디바이스; 를 포함한다.
그리고, 상기 제1 디바이스는, 상기 커멘드를 상기 제2 디바이스에 전송하는 동안 상기 제2 디바이스로부터 읽기데이터를 수신하는 것이 바람직하다.
또한, 상기 제2 디바이스는, 상기 커멘드를 상기 제1 디바이스로부터 수신하는 동안 상기 제2 디바이스로 읽기데이터(Read_Data)를 전송하는 것이 바람직하다.
그리고, 상기 제1 디바이스 및 상기 제2 디바이스는 주변장치용 직렬 인터페이스(Serial Peripheral Interface)로 연결되어 있으며, 상기 제1 디바이스는 마스터로써, 상기 제2 디바이스는 슬레이브로써 동작하는 것이 바람직하다.
또한, 상기 쓰기데이터가 복수의 바이트로 구성된 경우, 상기 제1 디바이스에 첫번째로 전송되는 1 바이트의 데이터인 제1 쓰기데이터는 상기 쓰기시작어드레스에 기록되는 것이 바람직하다.
그리고, 상기 제1 쓰기데이터 이외의 데이터는 전송순서에 따라 1 바이트 단위로 상기 쓰기시작어드레스의 다음 어드레스에 기록되는 것이 바람직하다.
한편, 상기 목적을 달성하기 위한 본 발명에 따른, 제1 디바이스 및 제2 디바이스를 구비한 전자장치의 제어방법에 있어서, 상기 제1 디바이스는 헤더에 읽기시작어드레스(Read_Start_Address), 쓰기시작어드레스(Write_Start_Address), 및 쓰기데이터(Write_Data)를 포함하는 커멘드(Command)를 생성하는 단계; 및 상기 제 1 디바이스는 상기 커멘드를 상기 제2 디바이스로 전송하는 단계;를 포함한다.
그리고, 상기 제1 디바이스는,상기 커멘드를 상기 제2 디바이스에 전송하는 동안 상기 제2 디바이스로부터 읽기데이터를 수신하는 것이 바람직하다.
또한, 상기 제2 디바이스는, 상기 커멘드를 상기 제1 디바이스로부터 수신하는 동안 상기 제2 디바이스에 읽기데이터(Read_Data)를 전송하는 것이 바람직하다.
그리고, 상기 제1 디바이스 및 상기 제2 디바이스는 주변장치용 직렬 인터페이스(Serial Peripheral Interface)로 연결되어 있으며, 상기 제1 디바이스는 마스터로써, 상기 제2 디바이스는 슬레이브로써 동작하는 것이 바람직하다.
또한, 상기 쓰기데이터가 복수의 바이트로 구성된 경우, 상기 제2 디바이스에 첫번째로 전송되는 1 바이트의 데이터인 제1 쓰기데이터는 상기 쓰기시작어드레스에 기록되는 것이 바람직하다.
그리고, 상기 제1 쓰기데이터 이외의 데이터는 전송순서에 따라 1 바이트 단위로 상기 쓰기시작어드레스의 다음 어드레스에 기록되는 것이 바람직하다.
이하에서는 도면을 참조하여 본 발명을 보다 상세하게 설명한다.
도 1은 본 발명에 따른, 마스터(110)(master), 및 슬레이브(120)(slave)를 포함하는 전자장치의 블럭도이다.
마스터(110)는 칩선택신호, 클럭, 커멘드(Command)를 생성하여 슬레이브(120)로 송신하고, 슬레이브(120)로부터 데이터를 수신하다.
첫째, 마스터(110)는 칩선택신호(Serial_Chip_Select: SCS)를 생성하여 슬레이브(120)로 전송한다. 칩선택신호는 논리레벨인 '하이'와 논리레벨인 '로우'일 수 있다. 구체적으로, 마스터(110)가 논리레벨인 '하이'인 칩선택신호를 생성하여 슬레이브(120)로 전송할 경우, 논리레벨인 '하이'인 동안에는 마스터(110)와 슬레이브(120)간 데이터 통신이 수행되지 않는다.
그러나, 마스터(110)가 논리레벨인 '로우'를 생성하여 슬레이브(120)(slave)로 전송하면, 논리레벨인 '로우'가 마스터(110)(master)와 슬레이브(120)(slave)간에 유지되는 동안 데이터 통신이 수행된다. 만약, 마스터(110)(master)와 슬레이브(120)(slave)간에 데이터가 전송되고 있는 도중, 마스터(110)가 칩선택신호를 논리레벨인 '로우' 에서 논리레벨인 '하이'로 변환하여 슬레이브(120)(slave)로 전송하면, '하이' 이전에 마스터(110)(master)와 슬레이브(120)(slave)간 전송된 데이터만이 유효한 데이터가 된다.
둘째, 마스터(110)는 데이터 전송을 위한 동기 신호인 직렬 클럭(Serial Clock: 'SCLK')를 발생하여 슬레이브(120)(slave)로 전송한다. 직렬 클럭의 주파수는 2MHz 내지 2.5MHz로 동작하는 것이 바람직하며, 쓰기 클럭 또는 읽기 클럭으로써 이용된다.
셋째, 마스터(110)는 커멘드(Command: SDO)를 슬레이브(120)로 전송한다. 커멘드는 헤더와 데이터를 포함하며, 헤더는 쓰기플래그(Write_Flag), 쓰기시작어드레스(Write_Start_Address), 읽기플래그(Read_Flag), 및 읽기시작어드레스(Read_Start_Address)를 포함한다.
마스터(110)에서 슬레이브(120)로 송신되는 커멘드에 포함되어 있는 데이터를 쓰기데이터(Write_data:W_data)라고 지칭하고, 슬레이브(120)에서 마스터(110) 로 전송되는 데이터(SDI)를 읽기데이터(Read_data:R_data)로 지칭한다. 데이터는 복수의 바이트로 구성될 수 있다.
쓰기시작어드레스(Write_Start_Address: WSA)는 쓰기데이터(W_data)가 복수의 바이트(byte)로 구성되어 있는 경우, 첫번째로 마스터(110)에서 슬레이브(120)로 전송되는 1 바이트의 쓰기데이터인 제1 쓰기데이터(W_data 1)가 기록되는 슬레이브(120)의 어드레스이고, 읽기시작어드레스(Read_Start_Address: RSA)는 읽기데이터(R_data)가 복수의 바이트로 구성되어 있는 경우, 첫번째로 독출되어 마스터(110)로 전송되는 1 바이트의 데이터인 제1 읽기데이터(R_data 1)가 기록되어 있는 슬레이브(120)의 어드레스이다.
플래그는 슬레이브(120)의 동작 수행여부를 표시하는 비트이다. 구체적으로, 읽기플래그가 '1'이면 마스터(110)는 슬레이브(120)에게 읽기데이터를 독출하여 전송하라는 명령비트이고, 읽기플래그가 '0'이면, 마스터(110)는 슬레이브(120)에게 데이터 읽기 동작을 수행하지 않도록 하는 명령비트이다. 마찬가지로, 쓰기플래그가 '1'이면 마스터(110)는 슬레이브(120)에게 전송받은 데이터를 기록하라는 명령비트이고, 쓰기플래그가 '0'이면, 마스터(110)는 슬레이브(120)에게 전송되는 데이터를 기록하지 않도록 하는 명령비트이다.
마스터(110)는 칩선택신호를 논리레벨인 '로우'로 생성하여 슬레이브(120)로 전송하고, 클럭를 생성하여 슬레이브(120)로 전송한다. 또한, 마스터(110)는 커멘드를 생성하여 클럭의 하강에지(falling edge)에서 비트단위로 마스터(110)로 송신하다.
구체적으로, 마스터(110)는 '1'인 읽기플래그, 읽기시작어드레스, '1'인 쓰기플래그, 쓰기시작어드레스, 및 쓰기데이터를 포함하는 커멘드를 송신하면, 논리레벨 '로우'인 클럭발생신호를 수신받은 슬레이브(120)는 마스터(110)에서 생성되어 전송되는 클럭과 커멘드를 수신하다. 슬레이브(120)는 클럭의 상승에지(rising edge)에서 커멘드를 수신하는 것이 바람직하다.
슬레이브(120)는 마스터(110)가 전송하는 순서대로 비트단위로 신호를 수신하는데, 슬레이브(120)는 읽기플래그, 읽기시작어드레스, 쓰기플래그, 쓰기시작어드레스, 및 쓰기데이터 순으로 수신한다.
구체적으로, 슬레이브(120)는 읽기플래그가 '1'인 경우로 판단하면, 읽기시작어드레스에서 제1 읽기데이터를 독출하여 마스터(110)로 전송한다. 이때, 칩선택신호가 논리레벨 '로우'로 유지되고 있다면, 슬레이브(120)는 읽기시작어드레스의 다음 어드레스에 있는 읽기데이터를 독출하여 마스터(110)로 전송하고, 또한 그 다음 어드레스에 있는 읽기데이터들을 순차적으로 독출하여 마스터(110)로 전송한다. 이처럼 슬레이브(120)는 칩선택신호의 논리레벨인 '로우'를 수신하다가 논리레벨인 '하이'를 수신하기까지 클럭의 상승에지(rising edge)에서 비트단위로 읽기데이터를 마스터(110)로 전송한다.
또한, 슬레이브(120)는 쓰기플래그가 '1'인 경우로 판단하면, 첫번째로 전송받은 쓰기데이터를 쓰기시작어드레스에 기록한다. 이때, 칩선택신호가 논리레벨인 '로우'로 유지되고 있다면, 슬레이브(120)는 첫번째로 전송받은 쓰기데이터 다음의 쓰기데이터는 쓰기시작어드레스의 다음 어드레스에 순차적으로 기록한다. 이처럼 슬레이브(120)는 칩선택신호의 논리레벨인 '로우'를 수신하다가 논리레벨인 '하이'를 수신하기까지 클럭의 상승에지(rising edge)에서 쓰기데이터를 비트단위로 전송받아 기록한다.
이때, 슬레이브(120)의 읽기데이터 송신 및 쓰기데이터 수신은 동시에 발생한다. 즉, 마스터(110)의 커멘드내 헤더에는 읽기플래그, 읽기시작어드레스, 쓰기플래그, 및 쓰기시작어드레스가 모두 포함되어 있기 때문에 슬레이브(120)가 커멘드의 헤더를 판단하고 나서, 쓰기데이터를 수신하여 기록하면서 동시에 읽기데이터를 독출하여 마스터(110)로 송신한다. 그리하여 마스터(110)는 쓰기데이터를 송신하면서 동시에 읽기데이터를 수신하게 된다.
그러나, 쓰기플래그(Write_Flag)가 '0'이면, 마스터(110)는 쓰기데이터를 슬레이브(120)로 전송하지 않으며, 마찬가지로, 읽기플래그가 '0'이면, 슬레이브(120)는 읽기데이터를 마스터(110)로 전송하지 않는다.
도 2는 쓰기 동작 및 읽기 동작을 동시에 수행하는 마스터(110)(master) 및 슬레이브(120)의 설명에 제공되는 타이밍도이다.
도 2에 도시된 바와 같이, 마스터(110)는 칩선택신호의 논리레벨인 '로우' 를 생성하여 슬레이브(120)로 인가한다. 마스터(110)는 칩선택신호의 논리레벨인 '로우' 를 생성하여 슬레이브(120)로 인가하면서 클럭 또한 슬레이브(120)에 인가한다.
그리고, 마스터(110)는 클럭의 하강에지(falling edge)에서 비트 단위로 커멘드를 슬레이브(120)로 송신하다. 마스터(110)에서 슬레이브(120)로 송신하는 케 먼드는 32비트로 구성된 헤더와 N바이트로 구성된 쓰기데이터(W_data)를 포함한다.
헤더의 첫번째 바이트의 최상위 비트(most significant bit)는 읽기동작 수행여부를 표시하는 신호인 읽기플래그가 표시된다. 헤더의 그 다음 15비트는 슬레이브(120)로부터 수신받을 데이터가 기록되어 있는 어드레스의 읽기시작어드레스(Read_Start_Address:RSA)이다. 도 2에서는 슬레이브(120)의 어드레스가 12비트로 표시될 수 있기 때문에 15비트 중 12비트만이 어드레스로 이용되어 있다고 표시하였다. 그 다음 16비트는 쓰기플래그(Write_Flag)와 쓰기시작어드레스(Write_Start_Address: WSA)를 나타낸다.
또한, 커멘드에는 N바이트로 구성된 쓰기데이터(Write_ data: W_data)가 포함된다. 헤더 다음의 첫번째 1 바이트에 해당하는 제1 쓰기데이터(W_data 1)는 첫번째로 슬레이브(120)로 전송되는 데이터로써, 쓰기시작어드레스(Write_Start_Address:WSA)에 기록되는 데이터이다. 그리고, 제2 쓰기데이터(W_data 2)는 쓰기시작어드레스(Write_Start_Address: WSA)의 다음 어드레스(WSA+1)에 기록되는 데이터이다. 이와 같이 쓰기데이터(W_data)가 1 바이트씩 증가함에 따라 어드레스도 순차적으로 증가한다.
그리고, 슬레이브(120)는 마스터(110)로부터 출력되는 커멘드를 수신하면서, 커멘드의 헤더 정보를 판단한다. 커멘드의 헤더에 쓰기 동작 및 읽기 동작을 실행하라는 명령이 있는 경우, 즉, 읽기플래그, 및 쓰기플래그가 '1'인 경우에는 읽기시작어드레스 및 쓰기시작어드레스를 판단하고, 읽기시작어드레스에 기록되어 있는 제1 읽기데이터를 독출하여 마스터(110)로 전송하면서, 제1 쓰기데이터를 마스 터(110)로부터 수신하여 쓰기시작어드레스에 기록한다. 또한, 읽기시작어드레스의 다음 어드레스인 제1 읽기어드레스에 기록되어 있는 제2 읽기데이터를 독출하여 마스터(110)로 전송함과 동시에 제2 쓰기데이터를 수신하여 제1 쓰기어드레스에 기록한다.
이와 같이, 슬레이브(120)는 읽기데이터를 1바이트씩 수신하면서, 읽기시작어드레슬를 기준으로 순차적으로 증가하는 읽기어드레스에 수신받은 읽기데이터를 1바이트씩 기록하고, 쓰기시작어드레스를 기준으로 순차적으로 증가하는 쓰기어드레스에서 1바이트씩 쓰기데이터를 독출하여 마스터(110)로 전송한다.
결과적으로, 마스터(110)는 클럭신호의 하강에지(falling edge)에서 비트 단위로 커멘드를 송신하면서 읽기데이터를 수신하고, 슬레이브(120)는 클럭신호의 상승에지(rising edge)에서 비트 단위로 커멘드를 수신하고, 읽기데이터를 송신한다.
이하에서는 쓰기데이터(W_data) 및 읽기데이터(R_data)를 동시에 수행하는 디바이스를 구비한 구체적인 전자장치를 일 예로 들어 설명한다. 도 3는 본 발명이 적용가능한 디지털 캠코더의 블럭도이다. 도 3에 도시된 바와 같이, 본 디지털 캠코더는, 렌즈부(310), 촬상부(320), DSP(Digital Signal Processor)부(340), 압축부(340), 기록부(350), 디스플레이부(360), 및 제어부(370)를 구비한다.
렌즈부(310)를 통해 들어오는 광학적 영상신호는 촬상부(320)로 인가되어 디지털 영상신호로 변환된 후, DSP부(330)로 인가되어 신호처리된다. DSP부(330)로 인가되어 신호처리된 영상신호는 디스플레이부(360)로 출력될 수도 있고, 압축부(340)를 통해 소정 포맷으로 압축되어 기록부(350)에 저장될 수도 있다.
특히, 구체적으로 일 예로서, AWB(Auto White Balance)를 수행하는 경우, 마스터(110)인 '제어부(370)'는 슬레이브(120)인 'DSP부(330)'에 읽기시작어드레스, 쓰기시작어드레스, 쓰기데이터를 포함하는 커멘드를 전송하면서, 읽기데이터를 수신한다. 이때, 읽기시작어드레스는 제어부(370)가 첫번째로 수신받고자 하는 색차적분에 대한 정보가 기록되어 있는 DSP부(330)의 어드레스이고, 쓰기시작어드레스는 제어부(370)가 첫번째로 게인조정량에 대한 정보를 DSP부(330)로 전송하여 기록하고자 하는 DSP부(330)의 어드레스이다.
한편, 슬레이브(120)인 'DSP부(330)'는 커멘드의 헤더부터 수신하면서, 헤더로부터 쓰기 동작 및 읽기 동작 수행명령이 있다고 판단되면, 읽기시작어드레스를 기준으로 1바이트 단위로 읽기데이터인 색차적분을 독출하여 마스터(110)로 전송하면서 동시에 쓰기데이터인 게인조정량을 수신하여 쓰기시작어드레스를 기준으로 1 바이트 단위로 쓰기데이터를 기록한다. 이처럼, 제어부(370)와 DSP부(330)간에 색차적분과 게인조정량들이 동시에 양방향으로 전송되기 때문에 제어부(370)는 AWB를 수행하는데 적용되는 시간을 단축시킬 수 있다.
본 발명이 적용되는 전자장치로서, 디지털 캠코더를 일 예로 들었으나, 이에 한정하는 것이 아니고, 주변장치용 직렬 인터페이스가 적용되는 전자장치에는 모두 적용된다.
한편, 본 발명은 읽기 동작과 쓰기 동작을 동시에 수행할 수 있는데 특징이 있으나, 본 발명이 읽기 동작만을 수행하거나 쓰기 동작만을 수행하는데도 이용된다. 읽기 동작만을 수행하고자 할 경우에는 쓰기플래그를 '0'으로 하면 되고, 쓰기 동작만을 수행하고자 할 경우에는 읽기플래그를 '0'로 하면 된다.