以下、図面を参照して本発明の実施の形態を説明する。
図1は、本発明の一実施の形態に係る電子機器としての撮像装置を含む撮像システムのブロック図である。この撮像システムは、撮像装置としてのカメラ100とアクセサリ200とを含む。アクセサリ200は、カメラ100に対して着脱可能である。図1では、カメラ100とアクセサリ200との電気的構成を示している。
カメラ100には、アクセサリ200を装着可能な装着部としてのカメラ側接続部141が設けられる。カメラ側接続部141は、複数の端子である接点TC01~TC21を有する。アクセサリ200には、アクセサリ側接続部211が設けられる。アクセサリ側接続部211は、複数の端子である接点TA01~TA21を有する。カメラ100とアクセサリ200とは、接点TC01~TC21と接点TA01~TA21とがそれぞれ一対一で接触することで電気的に接続される。なお、アクセサリ200は複数の接点TA01~TA21の一部を有していなくてもよい。
カメラ100は、電池111から電力を供給される。電池111はカメラ100に対して着脱が可能である。カメラ制御部A101およびカメラ制御部B102は、それぞれCPU等を内蔵したマイクロコンピュータにより構成され、カメラ100全体を制御する。カメラ制御部A101は、カメラ操作のためのスイッチ等(不図示)の操作を監視している。カメラ制御部A101は、カメラ100が待機状態(低消費電力モード)であっても動作し、ユーザの操作に応じてシステム電源の制御などをする。カメラ制御部B102は、撮像センサ122や表示部127などの制御を担い、待機状態においては動作を停止している。なお、本実施の形態、カメラ制御部A101とカメラ制御部B102を別々のプロセッサにより構成する場合について説明しているが、これらを単一のプロセッサ内に設けてもよい。
システム電源部112は、DCDCコンバータ、LDO(Low Drop Out)およびチャージポンプ回路等により構成され、カメラ100の各部に供給するための電力を生成する。電池111からカメラ制御部A101には、システム電源部112で生成された1.8Vの電圧がカメラマイコン電源VMCU_Cとして常時供給される。また、カメラ制御部B102にも、システム電源部112で生成された数種類の電圧がカメラマイコン電源VMCU2_Cとして任意のタイミングで供給される。カメラ制御部A101は、システム電源部112を制御することで、カメラ100の各部への電力供給のオン・オフを制御する。
撮像センサ122は、CMOSセンサやCCDセンサ等で構成される。カメラ100には、光学レンズ121が着脱可能である。装着された光学レンズ121を介して入射した被写体からの光が、撮像センサ122上に結像される。なお、光学レンズ121とカメラ100とが一体の構成であってもよい。撮像センサ122上に結像された被写体像は、デジタル撮像信号に符号化される。画像処理部123は、デジタル撮像信号に対して、ノイズリダクション処理やホワイトバランス処理等の画像処理を行って画像データを生成する。また、画像処理部123は、生成した画像データを記録用メモリ126に記録するために、JPEG形式等の画像ファイルに変換する。また、画像処理部123は、生成した画像データから、表示部127に表示するためのVRAM画像データを生成する。
メモリ制御部124は、画像処理部123等で生成される画像データや他のデータの送受を制御する。揮発性メモリ125は、高速な読み出しと書き込みが可能なDDR3 SDRAM等のメモリであり、画像処理部123で行われる画像処理のワークスペース等に使用される。記録用メモリ126は、例えば、SDカードやCFexpressカード等の読み書き可能なメディアであり、カメラ100に着脱可能な記録メディアである。表示部127は、カメラ100の背面に配置されたディスプレイを含み、このディスプレイはLCDパネルや有機ELディスプレイパネル等により構成される。バックライト部128は、表示部127のバックライトの光量を変更することで表示部127の明るさを調整する。
アクセサリ用電源部A131およびアクセサリ用電源部B132は、システム電源部112から供給された電圧を所定の電圧に変換する電圧変換部であり、3.3Vのアクセサリ電源VACCを生成する。なお、アクセサリ用電源部A131およびアクセサリ用電源部B132は、その他の電圧に変換する構成でもよい。
アクセサリ用電源部A131は、LDO等で構成される自己消費電力が小さい電源回路である。アクセサリ用電源部B132は、DC/DCコンバータ等で構成され、アクセサリ用電源部A131よりも大きな電流を流すことができる。なお、アクセサリ用電源部B132の自己消費電力は、アクセサリ用電源部A131の自己消費電力よりも大きい。このため、負荷電流が小さいときにはアクセサリ用電源部A131の方がアクセサリ用電源部B132よりも効率が良く、負荷電流が大きいときにはアクセサリ用電源部B132の方がアクセサリ用電源部A131よりも効率が良い。カメラ制御部A101は、アクセサリ200の動作状態に応じてアクセサリ用電源部A131およびアクセサリ用電源部B132の各電圧出力のオン・オフを制御する。
保護部133は、電流ヒューズ素子、ポリスイッチ素子、または、抵抗とアンプとスイッチ素子とを組み合わせた電子ヒューズ部等により構成される。保護部133は、アクセサリ用電源部A131またはアクセサリ用電源部B132からアクセサリ200に供給される電源電流値が所定値を超えて過大(異常)になったときに過電流検知信号DET_OVCを出力する。保護部133は一例として電子ヒューズであり、1A以上の電流が流れた場合にカメラ制御部A101に対して過電流検知信号DET_OVCにて通知する。過電流検知信号DET_OVCは、Hiレベルによって、過電流であることを示す。なお、所定値が1Aと異なる構成であってもよい。
カメラ側接続部141は、一列に配列された21個の接点TC01~TC21を介してアクセサリ200と電気的な接続を行うためのコネクタである。接点TC01~TC21は、これらの配列方向の一端から他端にこの順で配置されている。接点TC01はグランド(GND)に接続されており、基準電位の接点としてだけではなく、差動信号D1Nと差動信号D1Pの配線インピーダンスをコントロールする接点としての用途も兼ねている。接点TC01は第3のグランド接点に相当する。
接点TC02に接続された差動信号D1Nと接点TC03に接続された差動信号D1Pは、互いにペアとなってデータ通信を行う差動データ通信信号であり、カメラ制御部B102に接続されている。接点TC02、TC03、後述する接点TC07~TC17、TC19およびTC20は通信接点である。
第1のグランド接点としての接点TC04はGNDに接続されており、カメラ100とアクセサリ200の基準電位の接点となる。接点TC04は、接点TC05よりも接点の配列方向における外側に配置されている。電源接点としての接点TC05には、保護部133を介して、アクセサリ用電源部A131,B132で生成されたアクセサリ電源VACCが接続されている。
装着検出接点としての接点TC06には、アクセサリ装着検出信号/ACC_DETが接続されている。アクセサリ装着検出信号/ACC_DETは、抵抗素子Rp134(例えば10kΩ)を介してカメラマイコン電源VMCU_Cにプルアップされている。カメラ制御部A101は、アクセサリ装着検出信号/ACC_DETの信号レベルを読み出すことでアクセサリ200の装着有無を検出することが可能である。アクセサリ装着検出信号/ACC_DETの信号レベル(電位)がHiレベル(所定電位)であればアクセサリ200が未装着と検出され、Loレベル(後述するようにGND電位)であればアクセサリ200が装着状態と検出される。
カメラ100の電源ON時にアクセサリ装着検出信号/ACC_DETの信号レベル(電位)がHiレベルからLoレベルになることがトリガーとなり、カメラ100とアクセサリ200との間で接点を介した各種伝達が行われる。
カメラ制御部A101は、アクセサリ200が装着状態になったことを検出することに応じて、電源接点としての接点TC05を介してアクセサリ200に対して電源供給を行う。
接点TC07にはSCLK(Serial Clock)が接続される。接点TC08にはMOSI(Master Out Slave In)が接続される。接点TC09にはMISO(Master In Slave Out)が接続される。TC10にはSS(Slave Select)が接続される。SCLK、MOSI、MISOおよびCSは、カメラ制御部B102が通信マスタとなってSPI(Serial Peripheral Interface)(登録商標)通信を行うための信号である。本実施の形態では、SPI通信の通信クロック周波数は1MHz、データ長は8ビット(1バイト)、ビットオーダーはMSBファースト、全二重通信方式であるとする。
接点TC11には、アクセサリ200からカメラ制御部A101に対して通信を要求するための通信要求信号/WAKEが接続されている。通信要求信号/WAKEは、抵抗を介してカメラマイコン電源VMCU_Cにプルアップされている。カメラ制御部A101は、通信要求信号/WAKEの立下りエッジを検出することでアクセサリ200からの通信要求を受信することができる。
接点TC12に接続された信号SDAおよび接点TC13に接続された信号SCLは、カメラ制御部A101が通信マスタとなってI2C(Inter-Integrated Circuit)(登録商標)通信を行うための信号である。信号SDA、SCLは、カメラマイコン電源VMCU_Cにプルアップされたオープンドレインの出力仕様となっている。この通信の通信周波数は100kbpsであるとする。I2C通信では、SDAを介してカメラ100からのデータ送信、アクセサリ200からのデータ送信の双方が行われる。SPI通信とI2C通信を比較すると、I2C通信は、SPI通信に比べて通信速度が低速である。また、SPI通信のほうがI2C通信よりも通信速度が高速であるためデータ量の多い情報の通信に適している。そのため、本実施の形態のカメラ100とアクセサリ200との通信においては、データ量の多い情報はSPI通信を用いて通信し、データ量の少ない情報はI2C通信を用いて通信する。例えばまずはI2C通信を用いてデータを通信し、このデータに基づいてSPI通信が実行可能である場合やSPI通信を実行する必要がある場合には、更にSPI通信を実行するように制御することができる。
図17(a)、(b)は、I2C通信波形の一例を示した図である。図17(a)は、カメラ100がアクセサリ200にNバイト分のデータ(DATA[1]~DATA[N])を送信する場合の波形例を示している。図17(b)は、カメラ100がアクセサリ200からNバイト分のデータ(DATA[1]~DATA[N])を受信する場合の波形例を示している。
図17(a)において、1バイト目と2バイト目の通信では、カメラ制御部A101からアクセサリ制御部201に対して、送信するデータの格納アドレス情報を通知する。3バイト目から(N+2)バイト目の通信で、カメラ制御部A101は、Nバイト分のデータ(DATA[ADDRESS]~DATA[ADDRESS+N])をアクセサリ制御部201に送信する。
図17(b)において、1バイト目と2バイト目の通信では、カメラ制御部A101は、アクセサリ制御部201に対して、受信するデータの格納アドレス情報を通知する。3バイト目から(N+3)バイト目の通信で、カメラ制御部A101は、Nバイト分のデータ(DATA[ADDRESS]~DATA[ADDRESS+N])をアクセサリ制御部201から受信する。
次に、図18~図20のフローチャートについて説明する。
図18は、カメラ制御部A101からアクセサリ制御部201へNバイトのデータを送信する場合の、カメラ制御部A101が行う処理を示すフローチャートである。この処理は、カメラ制御部A101におけるROMに格納されたプログラムをカメラ制御部A101におけるCPUがカメラ制御部A101におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS3001では、カメラ制御部A101は、送信するバイト数を示す数値を変数NCに格納する。例えば、3バイト送信する場合は3が変数NCに格納される。本実施の形態では変数NCに3を格納するものとする。
ステップS3002では、カメラ制御部A101は、SCLがHiレベルの間に、SDAをLoレベルに変化させる(STARTコンディション)。これによりアクセサリ制御部201に対して通信の開始が通知される。
ステップS3003では、カメラ制御部A101は、アクセサリ制御部201のスレーブアドレスを示すスレーブアドレス情報を、送信データの上位7ビットにセットする。本実施の形態では、アクセサリ制御部201のスレーブアドレスは2進数で1010000であるとする。
ステップS3004では、カメラ制御部A101は、WRITE通信であることを示す情報を送信データの下位1ビットにセットする。本ビットに0がセットされることはWRITE通信であることを意味する。
ステップS3005では、カメラ制御部A101は、ステップS3003とステップS3004で送信データとしてセットされたデータ(2進数で10100000、16進数で0xA0)を、アクセサリ制御部201に対して送信する。
ステップS3006では、カメラ制御部A101は、1バイトのデータ送信後にSCLを1クロック分出力するとともに、SDAの信号レベルを確認する。カメラ制御部A101は、SDAの信号レベルがLoの場合はアクセサリ制御部201からのデータ受信通知(ACK)と判断してステップS3007に進む。一方、カメラ制御部A101は、SDAの信号レベルがHiの場合はアクセサリ制御部201がデータを正常に受信できていないと判断してステップS3014に進む。
ステップS3007では、カメラ制御部A101は、アクセサリ制御部201に送信するデータの格納アドレスの情報(開始アドレス情報)を送信データとしてセットする。本実施の形態では開始アドレス情報のサイズは1バイトで、値は0x00であるとする。
ステップS3008では、カメラ制御部A101は、アクセサリ制御部201に対して、セットされた1バイトの開始アドレス情報(値0x00)を送信する。ステップS3009では、カメラ制御部A101は、1バイトの開始アドレス情報データ送信後にSCLを1クロック分出力するとともに、SDAの信号レベルを確認する。カメラ制御部A101は、SDAの信号レベルがLoの場合はアクセサリ制御部201からのデータ受信通知(ACK)と判断してステップS3010に進む。一方、カメラ制御部A101は、SDAの信号レベルがHiの場合はアクセサリ制御部201がデータを正常に受信できていないと判断してステップS3014に進む。
ステップS3010では、カメラ制御部A101は、変数MCに1を格納する。変数MCは送信データ数をカウントするための変数である。ステップS3011では、カメラ制御部A101は、SCLを1バイト分出力するとともに、SCLがLoの間にSDAを所望の信号レベルに変化させることで、アクセサリ制御部201に対して1バイトのデータを送信する。ここでは、開始アドレス情報は0x00、変数MCは1であるので、カメラ制御部A101は、アドレス0x00に対応する1バイトのデータを送信する。
ステップS3012では、カメラ制御部A101は、1バイトのデータ送信後にSCLを1クロック分出力するとともに、SDAの信号レベルを確認する。カメラ制御部A101は、SDAの信号レベルがLoの場合はアクセサリ制御部201からのデータ受信通知(ACK)と判断してステップS3013に進む。一方、カメラ制御部A101は、SDAの信号レベルがHiの場合はアクセサリ制御部201がデータを正常に受信できていないと判断してステップS3014に進む。
ステップS3013では、カメラ制御部A101は、変数MCが変数NCと同じ値であるか否かを判別する。カメラ制御部A101は、変数MCが変数NCと同じ値である場合は全データの送信が完了したと判断してステップS3014に進む。カメラ制御部A101は、変数MCが変数NCと同じ値でない場合は送信データがまだ残っていると判断してステップS3015に進む。
ステップS3015では、カメラ制御部A101は、変数MCに1を加算してステップS3011に戻る。このようにして、ステップS3011に戻った後に、カメラ制御部A101は、送信するデータのアドレスを順次インクリメントし、それぞれのアドレスに対応する1バイトデータを送信する。
このようにステップS3013の処理で変数MCと変数NCが同じ値になるまで1バイトのデータを繰り返し送信することで、カメラ制御部A101はアクセサリ制御部201に対してNバイト分のデータを送信する。本実施の形態のように変数NCを3とした場合は、3バイトのデータ送信を行うことができる。
ステップS3014では、カメラ制御部A101は、SCLがHiレベルの間に、SDAをHiレベルに変化させる(STOPコンディション)。これによりアクセサリ制御部201に対して通信の終了が通知される。
図19は、カメラ制御部A101がアクセサリ制御部201からNバイトのデータを受信する場合の、カメラ制御部A101が行う処理を示すフローチャートである。この処理は、カメラ制御部A101におけるROMに格納されたプログラムをカメラ制御部A101におけるCPUがカメラ制御部A101におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS3101では、カメラ制御部A101は、受信するバイト数を示す数値を変数NDに格納する。例えば、3バイト受信する場合は3が変数NDに格納される。本実施の形態では3が変数NDに格納されるものとする。ステップS3102~S3106では、カメラ制御部A101は、それぞれステップS3002~S3006と同様の処理を実行する。
ステップS3107では、カメラ制御部A101は、アクセサリ制御部201から受信するデータの格納アドレスの情報(開始アドレス情報)を送信データとしてセットする。本実施の形態では開始アドレス情報のサイズは1バイトで、値は0x00であるとする。ステップS3108では、カメラ制御部A101は、アクセサリ制御部201に対して、セットされた1バイトの開始アドレス情報(値0x00)を送信する。
ステップS3109では、カメラ制御部A101は、1バイトの開始アドレス情報データ送信後にSCLを1クロック分出力するとともに、SDAの信号レベルを確認する。カメラ制御部A101は、SDAの信号レベルがLoの場合はアクセサリ制御部201からのデータ受信通知(ACK)と判断してステップS3110に進む。一方、カメラ制御部A101は、SDAの信号レベルがHiの場合はアクセサリ制御部201がデータを正常に受信できていないと判断してステップS3122に進む。
ステップS3110では、カメラ制御部A101は、ステップS3102と同様に、SCLがHiレベルの間に、SDAをLoレベルに変化させ、アクセサリ制御部201にSTARTコンディションを通知する。ステップS3111では、カメラ制御部A101は、アクセサリ制御部201のスレーブアドレスを示すスレーブアドレス情報を送信データの上位7ビットにセットする。本実施の形態では、アクセサリ制御部201のスレーブアドレスは2進数で1010000であるとする。
ステップS3112では、カメラ制御部A101は、READ通信であることを示す情報を送信データの下位1ビットにセットする。本ビットに1をセットすることはREAD通信であることを意味する。
ステップS3113では、カメラ制御部A101は、ステップS3103とステップS3104で送信データとしてセットされたデータ(2進数で10100001、16進数で0xA1)をアクセサリ制御部201に対して送信する。
ステップS3114では、カメラ制御部A101は、1バイトのデータ送信後にSCLを1クロック分出力するとともに、SDAの信号レベルを確認する。カメラ制御部A101は、SDAの信号レベルがLoの場合はアクセサリ制御部201からのデータ受信通知(ACK)と判断してステップS3115に進む。一方、カメラ制御部A101は、SDAの信号レベルがHiの場合はアクセサリ制御部201がデータを正常に受信できていないと判断してステップS3122に進む。
ステップS3115では、カメラ制御部A101は、変数MDに1を格納する。変数MDは受信データ数をカウントするための変数である。ステップS3116では、カメラ制御部A101は、SCLを1バイト分出力するとともに、SCLがLoからHiに変化したタイミングのSDAの信号レベルを読み出す。これにより、アクセサリ制御部201から1バイト分のデータを受信することが可能となる。受信した1バイトデータは、アドレス0x00に対応するデータとして、揮発性メモリ125に記憶したり所定の処理に用いたりすることができる。
ステップS3117では、カメラ制御部A101は、1バイトのデータを正常に受信できているか否かを判別する。カメラ制御部A101は、正常に受信できている場合はステップS3118に進み、正常に受信できていない場合はステップS3119に進む。
ステップS3118では、カメラ制御部A101は、変数MDが変数NDと同じ値であるか否かを判別する。カメラ制御部A101は、変数MDが変数NDと同じ値である場合は全データの受信が完了したと判断してステップS3119に進む。カメラ制御部A101は、変数MDが変数NDと同じ値でない場合は受信データがまだ残っていると判断してステップS3120に進む。
ステップS3120では、カメラ制御部A101は、SCLを1バイト分出力するとともに、SDAをLoレベルに制御することで、アクセサリ制御部201に対してデータ受信通知(ACK)を行い、引き続きデータ通信を行うことを通知する。ステップS3121では、カメラ制御部A101は、変数MDに1を加算し、ステップS3116に戻る。このようにして、ステップS3116に戻った後に、カメラ制御部A101は、受信するデータのアドレスを順次インクリメントし、それぞれのアドレスに対応する1バイトデータを受信する。
このようにステップS3118の処理で変数MDと変数NDとが同じ値になるまで1バイトのデータを繰り返し受信することで、カメラ制御部A101はアクセサリ制御部201からNバイト分のデータを受信する。本実施の形態のように変数NDを3とした場合は、3バイトのデータ受信を行うことができる。
ステップS3119では、カメラ制御部A101は、SCLを1バイト分出力するとともに、SDAをHiレベルに制御することで、アクセサリ制御部201に対してデータ通信を完了したことを通知する(NACK)。ステップS3122では、カメラ制御部A101は、SCLがHiレベルの間に、SDAをHiレベルに変化させる(STOPコンディション)。これによりアクセサリ制御部201に対して通信の終了が通知される。
図20は、カメラ制御部A101とアクセサリ制御部201との間でNバイトのデータが送受信される場合にアクセサリ制御部201が行う処理を示すフローチャートである。この処理には、アクセサリ制御部201がカメラ制御部A101からNバイトのデータを受信する処理、および、アクセサリ制御部201からカメラ制御部A101へNバイトのデータを送信する処理が含まれる。
この処理は、アクセサリ制御部201におけるROMに格納されたプログラムをアクセサリ制御部201におけるCPUがアクセサリ制御部201におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS3201では、アクセサリ制御部201は、SCLがHiレベルの間に、SDAがLoレベルに変化する(STARTコンディションとなる)のを待つ。アクセサリ制御部201は、STARTコンディションを検出したらステップS3202に進む。
ステップS3202では、アクセサリ制御部201は、変数MEに0を格納する。変数MEは送信及び受信データ数をカウントするための変数である。ステップS3203では、アクセサリ制御部201は、カメラ制御部A101から送信された1バイトのデータを受信する。
ステップS3204では、アクセサリ制御部201は、ステップS3203で受信した1バイトデータの上位7ビットのデータが、アクセサリ制御部201のスレーブアドレス(本実施の形態では0x50)と一致しているか判別する。アクセサリ制御部201は、上位7ビットのデータがアクセサリ制御部201のスレーブアドレスと一致している場合はステップS3205に進む。アクセサリ制御部201は、上位7ビットのデータがアクセサリ制御部201のスレーブアドレスと一致していない場合はステップS3221に進む。
ステップS3205では、アクセサリ制御部201は、1バイト受信後の次のSCLクロック出力に対してSDAをLoレベルに制御することで、カメラ制御部A101に対してデータ受信通知(ACK)を行う。ステップS3206では、アクセサリ制御部201は、ステップS3203で受信した1バイトデータの下位1ビットのデータによって、次に行う1バイト通信のデータの種類を判別する。アクセサリ制御部201は、下位1ビットのデータが0の場合(WRITE)は、次に行う1バイト通信のデータはカメラ制御部A101からアクセサリ制御部201に対する開始アドレス情報であると判別してステップS3207に進む。アクセサリ制御部201は、下位1ビットのデータが1の場合は、次に行う1バイト通信のデータはアクセサリ制御部201からカメラ制御部A101への送信データであると判別してステップS3209に進む。
ステップS3207では、アクセサリ制御部201は、カメラ制御部A101から送信された1バイトのデータを受信する。受信した1バイトのデータは、以降の通信で送信・受信するデータが格納されているアドレスを示す情報(開始アドレス情報)である。本実施の形態では、図18、図19で説明したように、開始アドレス情報は0x00であるとする。
ステップS3209では、アクセサリ制御部201は、開始アドレス情報として、予めアクセサリ制御部201が記憶しているアドレス情報、あるいは、予めカメラ制御部A101から通知されたアドレス情報を設定する。
ステップS3208では、アクセサリ制御部201は、1バイトのデータを正常に受信できたと判断した場合には、ステップS3210に進み、1バイトのデータを正常に受信できていないと判断した場合には、ステップS3221に進む。ステップS3210では、アクセサリ制御部201は、1バイトのデータ受信後の次のSCLクロック出力に対してSDAをLoレベルに制御することで、カメラ制御部A101に対してデータ受信通知(ACK)を行う。
ステップS3211では、アクセサリ制御部201は、SCLがHiレベルの間に、SDAがLoレベルに変化した(STARTコンディションとなった)か否かを判別する。STARTコンディションを検出した場合は、アクセサリ制御部201は、次に通信する1バイトのデータは、カメラ制御部A101からアクセサリ制御部201に対して送信するデータであると判断できる。すなわちアクセサリ制御部201は、次に通信する1バイトのデータは、スレーブアドレスおよび通信種類を示すデータであると判断してステップS3212に進む。STARTコンディションを検出しなかった場合は、アクセサリ制御部201は、次に通信する1バイトのデータは、アクセサリ制御部201がカメラ制御部A101から受信するデータであると判断してステップS3216に進む。
ステップS3212では、アクセサリ制御部201は、カメラ制御部A101から送信された1バイトのデータを受信する。ステップS3213では、アクセサリ制御部201は、ステップS3212で受信した1バイトデータの上位7ビットのデータが、アクセサリ制御部201のスレーブアドレス(本実施の形態では0x50)と一致しているか否かを判別する。アクセサリ制御部201は、上位7ビットのデータが、アクセサリ制御部201のスレーブアドレスと一致している場合はステップS3214に進む。アクセサリ制御部201は、上位7ビットのデータが、アクセサリ制御部201のスレーブアドレスと一致していない場合はステップS3221に進む。
ステップS3214では、アクセサリ制御部201は、ステップS3203で受信した1バイトデータの下位1ビットのデータによって、次に行う1バイト通信のデータの種類を判別する。アクセサリ制御部201は、下位1ビットのデータが0の場合は、ステップS3221に進む。アクセサリ制御部201は、下位1ビットのデータが1の場合(READ)は、次に行う1バイト通信のデータはアクセサリ制御部201からカメラ制御部A101への送信データであると判別してステップS3215に進む。
ステップS3215では、アクセサリ制御部201は、1バイト受信後の次のSCLクロック出力に対してSDAをLoレベルに制御することで、カメラ制御部A101に対してデータ受信通知(ACK)を行う。ステップS3222では、アクセサリ制御部201は、ステップS3207でカメラ制御部A101から受信した開始アドレス情報、または、ステップS3209で設定した開始アドレス情報に対応する1バイトのデータを、カメラ制御部A101に送信する。
ステップS3223では、アクセサリ制御部201は、変数MEに1を加算してステップS3224に進む。ステップS3224では、アクセサリ制御部201は、1バイトのデータ送信後にSDAの信号レベルを確認する。アクセサリ制御部201は、SDAの信号レベルがHiの場合はカメラ制御部A101がすべてのデータを受信完了した通知(NACK)であると判断してステップS3225に進む。一方、アクセサリ制御部201は、SDAの信号レベルがHiの場合はカメラ制御部A101が引き続きアクセサリ制御部201からのデータ送信を要求していると判断してステップS3222に戻る。
このようにして、ステップS3222に戻った後に、アクセサリ制御部201は、送信するデータのアドレスを順次インクリメントし、それぞれのアドレスに対応する1バイトデータを送信する。このようにステップS3224の処理でカメラ制御部A101からNACKが通知されるまで1バイトのデータを繰り返し送信することで、アクセサリ制御部201はカメラ制御部A101に対してNバイト分のデータを送信する。
ステップS3225では、アクセサリ制御部201は、SCLがHiレベルの間に、SDAがHiレベルに変化する(STOPコンディションとなる)のを待つ。アクセサリ制御部201は、STOPコンディションを検出したら通信を終了する。
ステップS3216では、アクセサリ制御部201は、1バイト分のデータを受信する。この1バイトデータは、ステップS3207でカメラ制御部A101から受信した開始アドレス情報に対応するデータとして、不図示の不揮発性メモリなどに記憶されたり所定の処理に用いられたりする。
ステップS3217では、アクセサリ制御部201は、変数MEに1を加算してステップS3218に進む。ステップS3218では、アクセサリ制御部201は、1バイトのデータを正常に受信できたか否かを判別する。アクセサリ制御部201は、1バイトのデータを正常に受信できたと判断した場合にはステップS3219に進み、1バイトのデータを正常に受信できていないと判断した場合にはステップS3221に進む。
ステップS3219では、アクセサリ制御部201は、1バイト受信後の次のSCLクロック出力に対してSDAをLoレベルに制御することで、カメラ制御部A101に対してデータ受信通知(ACK)を行う。ステップS3220では、アクセサリ制御部201は、SCLがHiレベルの間に、SDAがHiレベルに変化した(STOPコンディションとなった)か否かを判別する。アクセサリ制御部201は、STOPコンディションを検出した場合は通信を終了する。一方、アクセサリ制御部201は、STOPコンディションを検出しなかった場合には、カメラ制御部A101から引き続きアクセサリ制御部201にデータが送信されてくると判断してステップS3216に戻る。
このようにして、ステップS3216に戻った後に、アクセサリ制御部201は、受信するデータのアドレスを順次インクリメントし、それぞれのアドレスに対応する1バイトデータを受信する。このようにステップS3220でSTOPコンディションが通知されるまで1バイトのデータを繰り返し受信することで、アクセサリ制御部201はカメラ制御部A101からNバイト分のデータを受信する。
接点TC14に接続されたFNC1信号、接点TC15に接続されたFNC2信号、接点TC16に接続されたFNC3信号および接点TC17に接続されたFNC4信号は、装着されたアクセサリ200の種類に応じて機能を可変にできる機能信号である。これらの機能信号は例えば、アクセサリ200がマイク機器である場合は接点TC15を介して通信される信号は音声データ信号となる。また、アクセサリ200が照明機器(ストロボユニット)である場合は接点TC14を介して通信される信号は発光タイミングを通知する信号(ストロボ発光タイミング信号)となる。
なお、装着されたアクセサリの種別(アクセサリ種類)によって、同じ接点を介して異なる機能を実現する信号が通信されるようにしても良い。例えばアクセサリ200が照明以外のアクセサリである場合に、TC14を介して発光タイミングとは異なるタイミングを制御するための同期信号が通信されるようにしても良い。TC14~TC17は機能信号接点に相当する。機能信号接点の少なくともいずれかを用いた通信を機能信号通信とも称する。機能信号通信は、I2C通信・SPI通信と並行して、I2C通信・SPI通信に依存しないタイミングで通信を実行することができる。
ここでいうアクセサリ種類(種別)とは、上述のマイク機器、照明機器等である。性能が異なる照明同士のように、同じ目的の機能を実現するアクセサリは同じ種別のアクセサリである。マイク機器と照明機器のように、異なる目的の機能を実現するアクセサリは異なる種別のアクセサリである。機能信号通信は、I2C通信またはSPI通信によって取得された情報に基づいて実行される。
第2のグランド接点としての接点TC18もGNDに接続されており、接点TC04と同様に、カメラ100とアクセサリ200の基準電位となる接点である。接点TC19に接続された差動信号D2Nおよび接点TC20に接続された差動信号D2Pは、互いにペアとなってデータ通信を行うデータ通信信号であり、カメラ制御部B102と接続されている。TC19とTC20とを介して、例えばUSB通信を行うことが可能である。
接点TC21はGNDに接続されており、基準電位の接点としてだけではなく、差動信号D2Nと差動信号D2Pの配線インピーダンスをコントロールする接点としての用途も兼ねる。接点TC21は第4のグランド接点に相当する。接点TC01、TC04、TC06、TC18、TC21は、例えば、フレキシブル基板のGND部に接続されていて、フレキシブル基板のGND部がカメラ100のGNDレベルとなる金属性の部材とビスなどで固定される。GNDレベルとなる金属性の部材は例えば、アクセサリシュー部においてアクセサリ200と係合する係合部材、カメラ100内部の不図示のベースプレートなどがある。
本実施の形態では、クロック信号であるSCLK(第1のクロック信号)を伝達する接点(第1のクロック接点)TC07の隣に、アクセサリ装着検出信号/ACC_DETが接続されている装着検出接点TC06を配置している。一般に、クロック信号の接点に隣接した接点には、クロック信号の電位変動に伴うノイズ(クロックノイズ)が伝わり、これが誤動作の要因となり得る。特に、本実施の形態のように接点数が多く、接点間の距離が短い構成においては、その影響がより大きくなる。そこで、SCLK接点TC07の隣に、装着検出接点TC06を配置することで、クロックノイズの影響を抑えることができる。
アクセサリ装着検出信号/ACC_DETは、アクセサリ装着前はプルアップされているが、アクセサリ装着後はGND電位に設定される。一方、クロック信号を伝達するSCLK接点TC07は、アクセサリ装着前はクロック信号を伝達しないので、電位の変動がなく、アクセサリ装着後にのみクロック信号を伝達するために電位が変動する。
SCLK接点TC07がクロック信号を伝達する際に、装着検出接点TC06はGND電位になっている。このため、装着検出接点TC06がクロックノイズを受けても、カメラ100やアクセサリ200の制御部の電位は変動しにくいため、誤動作を防ぐことができる。また、装着検出接点TC06よりも離れた位置へクロックノイズが伝わるのを抑制することができる。その結果、GND端子を配置せずに済むので、接点数を増やさずにクロックノイズの影響を抑制することができる。
また、接点(第2のクロック接点)TC13にもクロック信号としてのSCL(第2のクロック信号)が伝達される。しかし、SCLK接点TC07に伝達されるSCLKの方がSCLよりも周波数が高く、SCLK接点TC07からの方がSCL接点TC13からに比べてクロックノイズをより多く発生する。このため、装着検出接点TC06を、SCL接点TC13の隣ではなく、SCLK接点TC07の隣に配置する方が、クロックノイズによる誤動作を防ぐ効果が大きい。
さらに、周波数の違いだけでなく、SCL接点TC13で伝達されるSCLは、I2C通信規格のクロック信号であり、信号線の電圧の変動はオープンドレイン接続で駆動される。一方、SCLK接点TC07で伝達されるSCLKは、SPI通信規格のクロック信号であり、信号線の電圧の変動はCMOS出力で駆動される。このため、SCL接点TC13の方がSCLK接点TC07に比べて電圧の変動のエッジが緩やかになりやすく、クロックノイズが発生しにくい。したがって、装着検出接点TC06を、SCL接点TC13の隣ではなくSCLK接点TC07の隣に配置する方がクロックノイズによる誤動作を防ぐ効果が大きい。
また、第1および第2の差動信号接点TC19、TC20にもペアで差動信号D1N、D1Pを伝達して、クロック信号を伝達する場合がある。その際、SCLK接点TC07やSCL接点TC13よりも周波数が高いクロック信号(第3のクロック信号)を伝達することがある。しかし、差動信号D1N、D1Pはペア信号であるために、シングルエンド信号を伝達するSCLK接点TC07やSCL接点TC13よりもクロックノイズの放射は少ない。このため、装着検出接点TC06を、第1および第2の差動信号接点TC19、TC20の隣ではなく、SCLK接点TC07の隣に配置する方が、クロックノイズによる誤動作を防ぐ効果が大きい。
なお、SCLK接点TC07の装着検出接点TC06とは反対側の隣に配置された接点(第1のデータ接点)TC08は、MOSI(第1のデータ信号)を伝達する。MOSIはデータ信号であるので、クロックノイズの影響を受けやすいように見える。しかし、MOSIは、SCLK接点TC07で伝達されるクロック信号と同一のSPI通信規格のデータ信号であるため、電位の変動タイミングがクロック信号と同期しており、クロックノイズの影響を受けにくい。このため、接点TC08をGND電位に固定しなくてよく、MOSI接点として用いることができる。
アクセサリ200は、電池205を有し、電池205からの電力供給を受けるとともに、カメラ側接続部141およびアクセサリ側接続部211を介してカメラ100からの電力供給も受ける。アクセサリ制御部201は、CPU等を内蔵したマイクロコンピュータで構成され、アクセサリ200全体を制御する。
アクセサリ電源部202は、DCDCコンバータ、LDOまたはチャージポンプ等で構成され、アクセサリ200の各部に供給するための電力を生成する。アクセサリ制御部201には、アクセサリ電源部202で生成された1.8Vの電圧がアクセサリマイコン電源VMCU_Aとして常時供給される。なお、アクセサリ電源部202で生成される電圧が1.8Vと異なる値である構成であってもよい。アクセサリ制御部201は、アクセサリ電源部202を制御することで、アクセサリ200の各部への電力供給のオン・オフを制御する。
充電部204は、カメラ100から供給された電力を用いて電池205を充電するための回路部である。アクセサリ制御部201は、充電動作を行うのに十分な電力をカメラ100から供給されていると判断できる場合には、充電部204を制御して電池205を充電する。なお、本実施の形態ではアクセサリ200に電池205が装着されている場合について説明するが、電池205が装着されずにカメラ100からの給電のみでアクセサリ200が動作してもよい。この場合、充電部204は不要となる。
差動通信部207は、カメラ100と差動通信を行うための回路であり、カメラ100との間でデータの送受信を行うことができる。外部通信IF部208は、不図示の外部機器とデータ通信を行うためのIF(インターフェイス)であり、Ethernet通信IF、無線LAN通信IFおよび公衆ネットワーク通信IF等である。
アクセサリ制御部201は、差動通信部207および外部通信IF部208を制御することで、カメラ100から受信したデータを外部機器に送信したり、外部機器から受信したデータをカメラ100に送信したりすることができる。機能部206は、アクセサリ200の種類に応じて異なる機能を発揮する回路部である。例えば、アクセサリ200がストロボ機器の場合には、機能部206は発光部または充電部などとして機能する。また、アクセサリ200がマイク機器の場合には、機能部206は、音声コーデック部やマイク部などとして機能する。
外部接続端子209は、外部機器と接続するためのコネクタ端子であり、一例として、USB TYPE-Cコネクタであるが、これに限定されない。接続検出部210は、外部接続端子209に外部機器が接続されたことを検出する。アクセサリ制御部201は、接続検出部210の出力信号を受信することで、外部接続端子209への外部機器接続を検出することができる。電源スイッチ203は、アクセサリ200の動作をオン・オフするためのスイッチである。アクセサリ制御部201は、電源スイッチ203が接続された端子の信号レベルを読み出すことでオンポジション、オフポジションを検出できる。
操作スイッチ212は、アクセサリ200をユーザが操作するための操作子であり、ボタン、十字キー、スライドスイッチ、ダイヤルスイッチ、タッチセンサ等で構成される。アクセサリ制御部201は、操作スイッチ212が操作されたことを検知すると、操作に応じた所定の処理を実行する。
アクセサリ側接続部211は、一列に配列された21個の接点TA01~TA21を介してカメラ100と電気的な接続を行うためのコネクタである。接点TA01~TA21は、これらの配列方向の一端から他端にこの順で配置されている。
接点TA01はGNDに接続されており、基準電位の接点としてだけではなく、差動信号D1Nと差動信号D1Pの配線インピーダンスをコントロールする接点としての用途も兼ねる。接点TA01は第3のグランド接点に相当する。
接点TA02に接続された差動信号D1Nと接点TA03に接続された差動信号D1Pは、互いにペアとなってデータ通信を行うデータ通信信号である。接点TA02、接点TA03は、差動通信部207と接続されている。接点TA02、接点TA03、接点TA07~TA17、TA19、TA20はいずれも、通信接点である。
第1のグランド接点としての接点TA04はGNDに接続されており、カメラ100とアクセサリ200の基準電位の接点となる。接点TA04は、接点TA05よりも接点の配列方向における外側に配置されている。電源接点としての接点TA05にはアクセサリ電源部202と充電部204が接続されており、カメラ100から供給されるアクセサリ電源VACCが接続される。
装着検出接点としての接点TA06はGNDに直接接続されている。接点TA06は、アクセサリ200がカメラ100に装着されたときにアクセサリ装着検出信号/ACC_DETをLoレベルとしてのGNDレベル(グランド電位)にすることで、カメラ100にアクセサリ200の装着を検出させるための接点となる。
接点TA07に接続されたSCLK、接点TA08に接続されたMOSI、接点TA09に接続されたMISOおよびTA10に接続されたCSは、アクセサリ制御部201が通信スレーブとなってSPI通信を行うための信号である。
接点TA11には、アクセサリ制御部201からカメラ100に対して通信を要求するための通信要求信号/WAKEが接続されている。アクセサリ制御部201は、カメラ100との通信が必要と判断した場合に、通信要求信号/WAKEをLo出力することでカメラ100に対して通信要求を行う。
アクセサリ200が装着状態であることを検出することに応じてカメラ制御部A101からアクセサリ200に対して接点TC5を介した電源供給がなされる。すると、アクセサリ制御部201は、通信要求信号/WAKEの信号レベル(電位)をHiレベルからLoレベルに変化させることで、電源供給を受けた旨をカメラ制御部A101に通知する。
アクセサリ制御部201は、カメラからの要求がなくとも通信要求信号/WAKEの信号レベル(電位)をHiレベルからLoレベルに変化させることで、アクセサリ200がカメラ100と通信すべき要因が発生したことを通知することができる。この構成により、カメラ制御部A101はアクセサリ200に通信すべき要因が発生したか否かを、ポーリングすることよって周期的に確認する動作を省略することができる。また、アクセサリ200は通信すべき要因が発生した場合にその旨をリアルタイムにカメラ100に通信することが可能である。
接点TA12に接続されたSDAおよびTA13に接続されたSCLは、アクセサリ制御部201が通信スレーブとなってI2C通信を行うための信号である。
接点TA14に接続されたFNC1信号、TA15に接続されたFNC2信号、TA16に接続されたFNC3信号、およびTA17に接続されたFNC4信号は、アクセサリ200の種類に応じて機能を可変にできる機能信号である。これらの機能信号は例えば、アクセサリ200がマイク機器である場合は音声データ信号となり、アクセサリ200がストロボユニットである場合は発光タイミングを通知するストロボ発光タイミング信号となる。
第2のグランド接点としての接点TA18もGNDに接続されており、接点TA04と同様に、カメラ100とアクセサリ200の基準電位の接点となる。接点TA19に接続された差動信号D2Nと接点TA20に接続された差動信号D2Pは、互いにペアとなってデータ通信を行うデータ通信信号であり、外部接続端子209と接続されている。
接点TA21はGNDに接続されており、基準電位の接点としてだけではなく、差動信号D2Nと差動信号D2Pの配線インピーダンスをコントロールする端子としての用途も兼ねる。接点TA21は第4のグランド接点に相当する。
接点TA01、TA04、TA06、TA18、TA21は、例えば、フレキシブル基板のGND部に接続されていて、フレキシブル基板のGND部がアクセサリ200のGNDレベルとなる金属性の部材と不図示のビスなどで固定される。GNDレベルとなる金属性の部材は例えば、カメラ100のアクセサリシュー部と係合するシュー取付脚やアクセサリ200内部の不図示のベースプレートなどである。
本実施の形態では、カメラ100およびアクセサリ200は、SPI通信方式として2種類の通信プロトコルに対応可能である。これらのうち第一の通信プロトコルは、アクセサリ200が通信可能状態であるかどうかを、カメラ100がSCLK信号を出力する前に確認しない方式であり、本実施の形態ではこれをSPIプロトコルAと呼称する。第二の通信プロトコルは、アクセサリ200が通信可能状態であるかどうかを、カメラ100がSCLK信号を出力する前に確認する方式であり、本実施の形態ではこれをSPIプロトコルBと呼称する。
カメラ100は、内蔵アクセサリ151、152を内蔵する。例えば、内蔵アクセサリ151、152はそれぞれ、内蔵マイク、内蔵ストロボである。備える内蔵アクセサリの数は問わない。
図2(a)はSPIプロトコルAの通信波形の概略を示した図である。図2(b)はSPIプロトコルBの通信波形の概略を示した図である。図2(a)、(b)では、CS信号はLoアクティブとする。
まず、図2(a)に示すように、SPIプロトコルAにおいて、カメラ制御部B102は、タイミングA1でCS信号をLoレベルに変化させ、アクセサリ制御部201に対してSPI通信の要求を行う。
タイミングA1から所定の時間T_CS経過後のタイミングA2で、カメラ制御部B102は、SCLK信号およびMOSI信号の出力を開始する。同様にアクセサリ制御部201は、SCLK信号の立下り変化を検知するとMISO信号の出力を開始する。
カメラ制御部B102は、1バイト分のSCLK出力が完了したタイミングA3でSCLK出力を停止する。カメラ制御部B102は、タイミングA3から所定時間T_INTERVALが経過するまでの間、SCLK出力を停止し、所定時間T_INTERVALが経過したタイミングA4でSCLK出力を再開し、次の1バイトの通信を行う。
図3(a)は、SPIプロトコルAにおけるカメラ制御部B102の処理を示すフローチャートである。この処理は、カメラ制御部B102におけるROMに格納されたプログラムをカメラ制御部B102におけるCPUがカメラ制御部B102におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS101で、カメラ制御部B102は、通信するバイト数を示す数値を変数NAに格納する。例えば、3バイト通信する場合は変数NAに3が格納される。ステップS102で、カメラ制御部B102は、CS信号をLoレベルに変化させてSPI通信の要求を行う。
ステップS103で、カメラ制御部B102は、CS信号がLoレベルに変化してから所定時間T_CSが経過するまで待機し、所定時間T_CS経過後にステップS104に進む。ステップS104で、カメラ制御部B102は、1バイトデータの通信を行うため、SCLKの出力制御を行うとともに、MOSIデータの出力制御とMISOデータの入力制御を行う。
ステップS105で、カメラ制御部B102は、変数NAの数値を1だけ減じた値を新たな変数NAとして格納する。ステップS106で、カメラ制御部B102は、変数NAが0となったか否かを判別する。そして、カメラ制御部B102は、変数NAが0となった場合はステップS107に進み、変数NAが0以外の場合はステップS108に進む。
ステップS108で、カメラ制御部B102は、ステップS104で1バイトデータの通信が完了してから所定時間T_INTERVALが経過するまで待機し、所定時間T_INTERVAL経過後にステップS104に戻る。ステップS107で、カメラ制御部B102は、CS信号をHiレベルに変化させ、図3(a)に示す一連のSPI通信を終了する。
図3(b)は、SPIプロトコルAにおけるアクセサリ制御部201の処理を示すフローチャートである。この処理は、図3(a)に示す処理と並行して実行される。この処理は、アクセサリ制御部201におけるROMに格納されたプログラムをアクセサリ制御部201におけるCPUがアクセサリ制御部201におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS201で、アクセサリ制御部201は、CS信号がLoに変化するまで待機し、CS信号がLoに変化した場合はステップS202に進む。ステップS202で、アクセサリ制御部201は、SCLK信号入力に応じてMOSIデータの入力制御とMISOデータの出力制御を行い、1バイトデータの通信を行う。
ステップS203で、アクセサリ制御部201は、CS信号がHiに変化したか否かを判別する。そしてアクセサリ制御部201は、CS信号がHiに変化していない場合は、次の1バイト通信を行うためにステップS202に戻り、CS信号がHiに変化した場合は、図3(b)に示す一連のSPI通信を終了する。
次に、SPIプロトコルBを説明する。図2(b)に示すように、SPIプロトコルBにおいて、カメラ制御部B102は、タイミングB1でCS信号をLoレベルに変化させて、アクセサリ制御部201に対してSPI通信の要求を行う。通信の要求と合わせて、カメラ制御部B102はMISO信号の電位を確認する。カメラ制御部B102は、MISO信号がHiレベルならばアクセサリ制御部201が通信可能な状態であると判断し、MISO信号がLoレベルならばアクセサリ制御部201が通信不可能な状態であると判断する。
一方、アクセサリ制御部201はCS信号の立下りを検知すると、SPI通信可能な状態であればMISOをHiレベルに制御し、SPI通信不可能な状態であればMISOをLoレベルに制御する(タイミングB2)。
タイミングB3で、カメラ制御部B102は、MISO信号がHiレベルにあることを確認すると、SCLK信号MOSI信号の出力を開始する。同様にアクセサリ制御部201は、SCLK信号の立下り変化を検知すると、MISO信号の出力を開始する。
カメラ制御部B102は、タイミングB4で、1バイト分のSCLK出力が完了すると、SCLK出力を停止する。アクセサリ制御部201は、1バイトのデータ送受を行った後に、SPI通信可能な状態であればMISO信号をHiレベルに制御し、SPI通信不可能な状態であればMISO信号をLoレベルに制御する(タイミングB5、B6)。
タイミングB7で、カメラ制御部B102は、MISO信号の電位を確認する。そしてカメラ制御部B102は、MISO信号がHiレベルならばアクセサリ制御部201が通信可能な状態であると判断し、MISO信号がLoレベルならばアクセサリ制御部201が通信不可能な状態であると判断する。
図4(a)は、SPIプロトコルBにおけるカメラ制御部B102の処理を示すフローチャートである。この処理は、カメラ制御部B102におけるROMに格納されたプログラムをカメラ制御部B102におけるCPUがカメラ制御部B102におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS111で、カメラ制御部B102は、通信するバイト数を示す数値を変数NBに格納する。例えば、3バイト通信する場合は変数NBに3が格納される。ステップS112で、カメラ制御部B102は、CS信号をLoレベルに変化させてSPI通信の要求を行う。ステップS113で、カメラ制御部B102は、MISO信号がHiレベルに変化するまで待機し、MISO信号がHiレベルに変化した場合はステップS114に進む。
ステップS114で、カメラ制御部B102は、1バイトデータの通信を行うため、SCLKの出力制御を行うとともに、MOSIデータの出力制御とMISOデータの入力制御を行う。ステップS115で、カメラ制御部B102は、変数NBの数値を1だけ減じた値を新たな変数NBとして格納する。ステップS116で、カメラ制御部B102は、全データの通信が完了したか(変数NBが0となったか)否かを判別する。ここで、変数NBが0となった場合に、全データの通信が完了したと判別される。
カメラ制御部B102は、全データの通信が完了した場合はステップS117に進み、全データの通信が完了していない場合はステップS118に進む。ステップS118で、カメラ制御部B102は、MISO信号がHiレベルに変化するまで待機し、MISO信号がHiレベルに変化すると、ステップS114に戻る。ステップS117で、カメラ制御部B102は、CS信号をHiレベルに変化させ、図4(a)に示す一連のSPI通信を終了する。
図4(b)は、SPIプロトコルBにおけるアクセサリ制御部201の処理を示すフローチャートである。この処理は、図4(a)に示す処理と並行して実行される。この処理は、アクセサリ制御部201におけるROMに格納されたプログラムをアクセサリ制御部201におけるCPUがアクセサリ制御部201におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
ステップS211で、アクセサリ制御部201は、CS信号がLoに変化するまで待機し、CS信号がLoに変化した場合はステップS212に進む。ステップS212で、アクセサリ制御部201は、SPI通信可能な状態である否かを判別し、SPI通信を可能な場合はステップS213に進み、SPI通信が可能でない場合はステップS214に進む。
ステップS213で、アクセサリ制御部201は、MISO信号をHiレベルに制御してステップS215に進む。ステップS214で、アクセサリ制御部201は、MISO信号をLoレベルに制御してステップS212に戻る。ステップS215で、アクセサリ制御部201は、SCLK信号入力に応じてMOSIデータの入力制御と、MISOデータの出力制御を行い、1バイトデータの通信を行う。
ステップS216で、アクセサリ制御部201は、CS信号がHiに変化したか否かを判別する。アクセサリ制御部201は、CS信号がHiに変化していない場合は、次の1バイト通信を行うためにステップS212に戻り、CS信号がHiに変化した場合は、図4(b)に示すSPI通信を終了させる。
図5は、SPI通信による、カメラ100からアクセサリ200への動作実行命令(コマンド)を通知する際の通信内容を示す図である。
最初の1バイト目の通信で、カメラ制御部B102は、MOSIデータとして、コマンド番号を示す情報CMDを送信する。一方、アクセサリ制御部201は、MISOデータとして、通信可能状態であることを示す情報として0xA5の値を送信する。アクセサリ制御部201は、1バイト目の通信処理を実行できない場合には、MISOデータとして0xA5以外の値を送信する。
2バイト目の通信で、カメラ制御部B102は、コマンド番号CMDに対応した引数MOSI_DATA1を送信する。3バイト目~(N-2)バイト目以降も同様に、カメラ制御部B102は、コマンド番号CMDに対応した引数MOSI_DATA2~MOSI_DATA[N-3]を送信する。
一方、2バイト目の通信で、アクセサリ制御部201は、MISOデータとして、1バイト目に受信したコマンド番号CMDを送信する。これにより、アクセサリ制御部201がMOSIデータを正しく受信できていることを、カメラ制御部B102が判別することができる。
3バイト目の通信で、アクセサリ制御部201は、MISOデータとしてコマンド番号CMDに対応した戻り値MISO_DATA1を送信する。4バイト目~(N-2)バイト目以降も同様に、アクセサリ制御部201は、コマンド番号CMDに対応した引数MISO_DATA2~MISO_DATA[N-4]を送信する。なお、引数及び戻り値の数は、コマンド番号毎にあらかじめ決められている。また、引数及び戻り値のどちらか一方はなくても構わない。
N-1バイト目の通信でカメラ制御部B102は、チェックサムデータとしての‘CheckSum_C’をMOSIデータとして送信する。このCheckSum_Cは、カメラ制御部B102により、カメラ制御部B102がアクセサリ制御部201へ送信するデータから、下記式1で算出される。一方、アクセサリ制御部201は、MISOデータとして、‘0x00’の値を送信する。
Nバイト目の通信でカメラ制御部B102は、‘0x00’をMOSIデータとして送信する。一方、アクセサリ制御部201は、チェックサムデータとしての‘CheckSum_A’をMISOデータとして送信する。
CheckSum_Aは、下記式2により算出される第1のCheckSum_A、又は、下記式3により算出される第2のCheckSum_Aとなる。即ち、アクセサリ制御部201は、実際に受信したデータからCheckSum_C_Aを算出する。そして、アクセサリ制御部201は、受信したCheckSum_Cと受信データから算出したCheckSum_C_Aとが一致しているか否かを判定する。アクセサリ制御部201は、CheckSum_CとCheckSum_C_Aとが一致している場合、下記式2により第1のCheckSum_Aを算出して、カメラ制御部B102へ送信する。
一方、アクセサリ制御部201は、CheckSum_CとCheckSum_C_Aとが一致していないと判定した場合、下記式3により第2のCheckSum_Aを算出して、カメラ制御部B102へ送信する。
CheckSum_C=EXOR(AND(SUM(CMD,MOSI_DATA1,…,MOSI_DATA[N-3]),0xFF),0xFF)…(1)
CheckSum_A=EXOR(AND(SUM(0xA5,CMD,MIS0_DATA1,…,MOSI_DATA[N-4]),0xFF),0xFF)…(2)
CheckSum_A=AND(SUM(0xA5,CMD,MIS0_DATA1,…,MOSI_DATA[N-4]),0xFF)…(3)
図6は、アクセサリ情報の一例を示す図である。このアクセサリ情報は、アクセサリ200における不図示の不揮発性メモリ内に格納される。アクセサリ情報は、カメラ100にアクセサリ200の種類や通信および動作(機能)に関する仕様を識別させるための情報である。アクセサリ情報は、アドレス0x00~0x0Fのメモリ空間にマッピングされている。I2C通信によりアクセサリ200からアクセサリ情報を読み出すことが可能である。なお、本実施の形態におけるI2C通信においては、読み出したデータに対するチェックサム値を通信の最終データとして付加するものとする。アクセサリ情報の詳細は後述する。
図7は、アクセサリ200がカメラ100に装着されたときのシーケンスを示す図である。ここでは、アクセサリ装着時の概略を説明するが、カメラ100、アクセサリ200のそれぞれによる処理の詳細は後述する。
アクセサリ200がカメラ100に装着されると、アクセサリ装着検出信号/ACC_DETは、GNDレベルとなり、カメラ制御部A101はアクセサリ200が装着されたと判定する。アクセサリ200が装着されたと判定されると、カメラ制御部A101は、アクセサリ用電源部A131の出力をオンするために電源制御信号CNT_VACC1をHiレベルにする。アクセサリ用電源部A131は、電源制御信号CNT_VACC1がHiになることに応じてアクセサリ電源VACCを出力する。
アクセサリ200において、アクセサリ電源部202は、アクセサリ電源VACCを受電すると、アクセサリ制御部201のための電源VMCU_Aを生成する。これにより、アクセサリ制御部201は起動する。アクセサリ制御部201は、起動後、アクセサリ200内の各ブロックの初期化を行う。その後、カメラ100との通信可能な状態になると、アクセサリ制御部201は、/WAKE端子をLoレベルとする。カメラ100において、カメラ制御部A101は、/WAKE端子がLoレベルとなったことを検知すると、アクセサリ200が通信可能な状態となったことを検知する。
カメラ制御部A101は、I2C通信によりアクセサリ200へアクセサリ情報を要求する。アクセサリ200において、アクセサリ制御部201は、カメラ100からのアクセサリ情報要求に応じて、アクセサリ情報を送信する。アクセサリ制御部201は、アクセサリ情報を送信すると、通信要求信号/WAKEをHiレベルにする。
カメラ100において、カメラ制御部A101は、受信したアクセサリ情報を解析し、装着されたアクセサリ200を制御可能かどうか、などを判定する。また、カメラ制御部A101は、アクセサリ用電源部B132をオンにする。カメラ制御部A101は、カメラ100の種々の設定を完了すると、カメラ制御部B102に対してアクセサリ情報を通知する。
カメラ制御部B102は、アクセサリの種類(種別)を示す情報であるアクセサリ種類情報(ACC種類情報)に基づき、受信したイベントに応じて、SPI通信によるアクセサリ200に対して制御コマンドの通知、および、機能信号の制御を行う。アクセサリ制御部201は、カメラ100からのSPI通信による制御コマンドに対する応答(イベント)、および、機能信号に応じた制御を行う。
図8は、アクセサリ種類情報の一例を示す図である。図6に示すアクセサリ情報における、アドレス0x00のD7-D0データが、アクセサリ種類情報(ACC種類情報)である。図8において、各番号は、アクセサリの種類に対応している。例えば、番号0x81、0x82、0x83はそれぞれ、アクセサリがストロボ機器、インタフェース変換アダプタ機器、マイク機器を示している。番号0x84は、アクセサリが、複数のアクセサリ機器をカメラ100に装着するためのマルチアクセサリ接続アダプタ機器であることを示している。ここで、アダプタ機器は、カメラ100とストロボ機器やマイク機器等のアクセサリとの間に装着される中間アクセサリである。インタフェース変換アダプタ機器は、カメラ100のインタフェースとアクセサリのインタフェースが異なる場合に、カメラ100とアクサセリとの間に互換性を持たせるためにインタフェースを変換するアダプタ機器である。マルチアクセサリ接続アダプタ機器は、複数のアクセサリを装着可能なアダプタ機器である。
図6において、アドレス0x01のD7-D0データは、アクセサリの識別番号(ACC識別番号)を示す情報である。アクセサリ種類情報と識別番号とによって、アクセサリ機種を一意に示すことが可能である。アドレス0x02のD7-D0データは、アクセサリ200のファームウェアのバージョンを示す情報である。
アドレス0x03のD7-D6データは、カメラ100が不図示の電源スイッチをオフした状態において、アクセサリ200へのアクセサリ電源VACC供給を要求するか否かを示す情報である。この情報が「0」の場合には給電不要を示し、この情報が「1」の場合にはアクセサリ用電源部A131による給電要求を示し、この情報が「2」の場合にはアクセサリ用電源部B132による給電要求を示す。
アドレス0x03のD5-D4データは、カメラ100が省電力モード(オートオフモード)状態にあるときにおいて、アクセサリ200へのアクセサリ電源VACC供給を要求するか否かを示す情報である。この情報が「0」の場合には給電不要を示し、この情報が「1」の場合にはアクセサリ用電源部A131による給電要求を示し、この情報が「2」の場合にはアクセサリ用電源部B132による給電要求を示す。
アドレス0x03のD3-D2データは、アクセサリ200が電池205を具備しているか否かを示す情報である。この情報が「0」の場合には電池205を具備していないことを示し、この情報が「1」の場合には電池205を具備していることを示す。アドレス0x03のD1-D0データは、アクセサリ200が電池205への充電機能を具備しているか否かを示す情報である。この情報が「0」の場合には充電機能を具備していないことを示し、この情報が「1」の場合には充電機能を具備していることを示す。
アドレス0x04のD7-D0データは、アクセサリ200がカメラ100から給電されるアクセサリ電源VACCに対する要求電力を示す情報である。例えばこの情報を10倍した値が電流値を示し、この情報が10の場合には100mAであることを示し、100の場合には1Aであることを示す。なお、この情報のデータ量を削減する方法として、この情報と任意の電流値とを関連付けてもよい。例えば、この情報が「0」、「1」、「3」、「4」の場合には、それぞれ、100mA、300mA、450mA、600mAの要求を示すとしてもよい。
アドレス0x05のD7データは、アクセサリ200がファームアップモード状態であるか否かを示す情報である。この情報が「0」の場合にはファームアップモード状態ではないことを示し、この情報が「1」の場合にはファームアップモード状態であることを示す。アドレス0x05のD6データは、アクセサリ200がファームアップ機能を具備しているか否かを示す情報である。この情報が「0」、「1」の場合にはそれぞれ、ファームアップ機能を具備していないこと、具備していること、を示す。
アドレス0x05のD5-D4データは、アクセサリ200が中間接続アクセサリを装着された場合の動作を許可するか否かを示す情報である。この情報が「0」、「1」の場合にはそれぞれ、動作を許可しない、動作を許可することを示す。アドレス0x05のD3-D2データは、アクセサリ200が中間接続アクセサリの装着状態をカメラ100が起動する際に確認する必要があるか否かを示す情報である。この情報が「0」、「1」の場合にはそれぞれ、確認が不要であること、確認が必要であることを示す。
アドレス0x05のD1-D0データは、アクセサリ200がI2C通信によるコマンド通知に対応しているか否かを示す情報である。この情報が「0」、「1」の場合にはそれぞれ、コマンド通知に非対応であること、コマンド通知に対応していること、を示す。
アドレス0x06のD5-D4データは、アクセサリ200が通信要求信号/WAKEをカメラ100に通知した後に、カメラ100に通信要求の要因を通知可能な通信方式を示す情報である。この情報が「0」、「1」、「2」の場合にはそれぞれ、I2C通信が対応している、SPI通信が対応している、I2C通信およびSPI通信の双方が対応している、ことを示す。
アドレス0x06のD0、D1、D2、D3データはそれぞれ、アクセサリ200がFNC1信号、FNC2信号、FNC3信号、FNC4信号による機能を具備しているか否かを示す情報である。D0データはFNC1信号、D1データはFNC2信号、D2データはFNC3信号、D3データはFNC4信号に対応する。それぞれのデータ値が「0」の場合には、対応する機能を具備していないことを示し、それぞれのデータ値が「1」の場合には、対応する機能を具備していることを示す。
アドレス0x0AのD7データは、アクセサリ200が通信要求信号/WAKEをカメラ100に通知した際に、カメラ100に対して起動を要求するか否かを示す情報である。この情報が「0」、「1」の場合にはそれぞれ、起動を要求すること、起動を要求しないこと、を示す。
アドレス0x0AのD6-D0データは、アクセサリ200がカメラ100に対して通知した通信要求信号/WAKEの要因を示す情報である。
図9は、通信要求信号/WAKEの要因の一例を示す図である。この例では、アクセサリ200がマイク機器であった場合の例を示している。例えば、要因番号0x00は、操作スイッチ212のうちメニュー呼び出しスイッチ(SW)が押下操作されたことを示す番号である。また、要因番号0x01は、アクセサリ200が音声信号の出力制御を完了したことを示す番号である。また、要因番号0x02は、アクセサリ200が音声信号のミュート処理を完了したことを示す番号である。このように、通信要求信号/WAKEの発生要因に関する情報をカメラ100に通知できるようにしている。
図6に示すアドレス0x0CのD1データは、アクセサリ200が対応しているSPI通信プロトコルを示す情報である。この情報が「0」、「1」の場合はそれぞれ、SPIプロトコルAに対応していること、SPIプロトコルBに対応していること、を示す。
アドレス0x0CのD0データは、アクセサリ200が対応しているSPI通信のCS信号の制御論理を示す情報である。この情報が「0」、「1」の場合はそれぞれ、CS信号がLoアクティブ論理であること、CS信号がHiアクティブ論理であること、を示す。
アドレス0x0DのD7-D0データは、アクセサリ200がSPIプロトコルAにより通信を行う場合で且つ、アドレス0x05のD7データが「0」の場合の通信バイト間隔として必要な時間を示す情報である。アドレス0x05のD7データが「0」の場合は、上述のように、アクセサリ200がファームアップモード状態ではない場合である。
アドレス0x0EのD7-D0データは、アクセサリ200がSPIプロトコルAで通信を行う場合で且つ、アドレス0x05のD7データが「1」の場合の通信バイト間隔として必要な時間を示す情報である。アドレス0x05のD7データが「1」の場合は、上述のように、アクセサリ200がファームアップモード状態である場合である。
図10(a)は、アドレス0x0Dデータに関する通信バイトと通信間隔との関係を示す図である。図10(b)は、アドレス0x0Eデータに関する通信バイトと通信間隔との関係を示す図である。
図6に示すアドレス0x0FのD7-D0データは、チェックサムを示す情報である。
図11は、アクセサリ装着時第1処理を示すフローチャートである。このフローチャートは、カメラ100にアクセサリ200が装着され、アクセサリ200の機能を有効にするまでのカメラ制御部A101による処理を示している。このアクセサリ装着時第1処理は、カメラ制御部A101におけるROMに格納されたプログラムをカメラ制御部A101におけるCPUがカメラ制御部A101におけるRAM(いずれも図示せず)に展開して実行することにより実現される。この処理は、カメラ100の主電源がオンにされた場合や、オートオフモード(省電力モード)から復帰した場合に開始される。なお、この処理は、実質的には、後述する図15のステップS2001、S2005で実行される。
ステップS401で、カメラ制御部A101は、アクセサリ装着検出信号/ACC_DETの信号レベルをモニタし、この信号レベルがLoになるまで待機する。すなわち、カメラ制御部A101は、アクセサリ200が装着されるまで待機する。アクセサリ装着検出信号/ACC_DETの信号レベルがHiであればアクセサリ200は未装着であると判別される。信号レベルがLoであれば、アクセサリ200が装着されたと判別されるので、カメラ制御部A101は、ステップS402に進む。
ステップS402で、カメラ制御部A101は、アクセサリ用電源部A131の出力をオンするために、電源制御信号CNT_VACC1をHiレベルに制御し、ステップS403に進む。アクセサリ用電源部A131は、電源制御信号CNT_VACC1がHiになると、アクセサリ電源VACCを出力する。
ステップS403で、カメラ制御部A101は、過電流検知信号DET_OVCの信号レベルをモニタし、この信号レベルがLoであるか否かを判別する。カメラ制御部A101は、上記信号レベルがLoであれば過電流は流れていないと判断できるので、ステップS404に進む。しかし、信号レベルがHiであれば過電流が流れたと判断できるので、カメラ制御部A101は、図11に示す処理を終了させると共に、不図示のエラー処理へ移行する。
ステップS404で、カメラ制御部A101は、アクセサリ200からの通知信号である通信要求信号/WAKEの信号レベルをモニタし、信号レベルがLoとなるまで、すなわちアクセサリ200の初期化が完了するまで待機する。カメラ制御部A101は、上記信号レベルがLoとなったら、アクセサリ200の初期化が完了したと判断できるので、ステップS405に進む。
なお、ステップS404で、所定時間が経過しても通信要求信号/WAKEの信号レベルがLoとならなかった場合に、不図示のエラー処理へ移行してもよい。なお、各エラー処理では、カメラ制御部A101は、装着されたアクセサリ200が有効に利用できる状態にならない旨を表示や音声によってユーザに報知する。
ステップS405で、カメラ制御部A101は、初期通信としてアクセサリ200とI2C通信を行い、それにより15バイトのアクセサリ情報の読み出しを行う。すなわち、カメラ制御部A101は、アクセサリ200に対してアクセサリ情報を要求する。アクセサリ200において、アクセサリ制御部201はカメラ100からのアクセサリ情報要求に応じてアクセサリ情報をカメラ100へ送信する。カメラ100は、アクセサリ情報を受信する。
ステップS406で、カメラ制御部A101は、ステップS405で取得したアクセサリ情報に基づき、装着されたアクセサリ200がカメラ100に対応している機器であるか否かを判別する。そしてカメラ制御部A101は、装着されたアクセサリ200が対応しているアクセサリであると判別した場合は、ステップS407に進む。しかしカメラ制御部A101は、装着されたアクセサリ200が非対応のアクセサリであると判別した場合は、図11に示す処理を終了させると共に、不図示のエラー処理へ移行する。なお、このエラー処理では、カメラ制御部A101は、装着されたアクセサリ200が有効に利用できる状態にならない旨を表示や音声によってユーザに報知する。
ステップS407で、カメラ制御部A101は、アクセサリ用電源部B132の出力をオンするために、電源制御信号CNT_VACC2をHiレベルに制御して、ステップS408に進む。アクセサリ用電源部B132は、電源制御信号CNT_VACC2がHiになると、アクセサリ電源VACCを出力する。本実施の形態においては、電源制御信号CNT_VACC1と電源制御信号CNT_VACC2の両方をHiレベルに制御した場合には、アクセサリ用電源部B132によりアクセサリ電源VACCが出力されるものとする。
ステップS408で、カメラ制御部A101は、ステップS405で読み出したアクセサリ情報をカメラ制御部B102に対して通知し、図11に示す処理を終了する。
図12は、アクセサリ装着時第2処理を示すフローチャートである。このフローチャートは、カメラ100にアクセサリ200が装着され、アクセサリ200の機能を有効にするまでのカメラ制御部B102による処理を示している。このアクセサリ装着時第2処理は、カメラ制御部B102におけるROMに格納されたプログラムをカメラ制御部B102におけるCPUがカメラ制御部B102におけるRAM(いずれも図示せず)に展開して実行することにより実現される。この処理は、アクセサリ装着時第1処理(図11)が開始されると開始される。
ステップS501で、カメラ制御部B102は、カメラ制御部A101からアクセサリ情報が通知されるまで待機する。このアクセサリ情報は、図11のステップS408で通知されるものである。アクセサリ情報が受信されると、カメラ制御部B102は、ステップS502で、通知されたアクセサリ情報に基づいて機能信号(FNC1~FNC4)を設定する。
例えば、アクセサリ情報に基づき、アクセサリ200がマイク機器である場合は、カメラ制御部B102は、FNC1信号が音声データ用クロック信号として機能するように設定する。同様に、カメラ制御部B102は、FNC2信号が音声データ用チャンネル信号、FNC3信号が音声データ信号としてそれぞれ機能するように設定する。
また、他の例として、アクセサリ200がストロボ機器であると場合には、カメラ制御部B102は、FNC4信号がストロボ発光同期信号(ストロボ発光タイミング信号)として機能するように設定してもよい。なお、アクセサリ200に対して制御が不要な機能信号についても、カメラ100およびアクセサリ200の動作に支障が出ないように設定してもよい。
ステップS503で、カメラ制御部B102は、カメラ制御部A101から通知されたアクセサリ情報に基づいてSPI通信CS信号の制御論理の設定を行う。ステップS504で、カメラ制御部B102は、アクセサリ200に対するイベントが発生する(検出される)まで待機し、イベントが発生するとステップS505に進む。
ステップS505で、カメラ制御部B102は、ステップS504で検出されたイベントが、アクセサリ200とのSPI通信を要するイベントであるか否かを判別する。そしてカメラ制御部B102は、検出されたイベントがSPI通信を要するイベントであればステップS506に進み、検出されたイベントがSPI通信を要するイベントでない場合はステップS507に進む。
ステップS506で、カメラ制御部B102は、アクセサリ200に対してSPI通信制御を行う。ここで実行されるSPI通信制御としては、例えば、アクセサリ200がマイク機器であった場合は、マイク動作をオン/オフさせるための指示通信、マイクの集音指向性を切り替える指示通信、マイクのイコライザ機能を切り替える指示通信等が挙げられる。また、アクセサリ200がストロボ機器であった場合、上記SPI通信としては、ストロボの設定情報を読み出す通信、ストロボに対して設定情報を通知する通信等が挙げられる。ステップS506の後、カメラ制御部B102はステップS504に戻る。
ステップS507で、カメラ制御部B102は、検出されたイベントが、アクセサリ200との機能信号を用いた制御が必要なイベントであるか否かを判別する。そして、カメラ制御部B102は、検出されたイベントが、機能信号を用いた制御を要するイベントである場合はステップS508に進み、検出されたイベントが、機能信号を用いた制御を要するイベントでない場合はステップS509に進む。
ステップS508で、カメラ制御部B102は、アクセサリ200に対して機能信号を用いた制御を行う。ここで実行される機能信号を用いた制御としては、例えば、アクセサリ200がマイク機器であった場合は、FNC1の音声データ用クロック信号およびFNC2の音声データ用チャンネル信号の出力開始や、FNC3の音声データ信号の取り込みが挙げられる。これによりカメラ100はアクセサリ200からの音声データを取得可能になる。また、アクセサリ200がストロボ機器であった場合は、FNC4のストロボ発光同期信号を所定のタイミングで制御することが挙げられる。これによりストロボに発光指示を通知することができる。ステップS508の後、カメラ制御部B102はステップS504に戻る。
ステップS509で、カメラ制御部B102は、ステップS504で検出されたイベントに応じて、「その他の制御」を実行する。その他の制御においては、検出されたイベントがI2C通信を要するイベントであれば、カメラ制御部B102は、アクセサリ200に対してI2C通信制御を行う。このほか、その他の制御においては、カメラ制御部B102は、検出されたイベントに応じたカメラ内制御を行う。ここで実行されるカメラ内制御としては、例えば、アクセサリ200がマイク機器であった場合は、記録用メモリ126への音声データの記録開始、終了制御のほか、音声データに対するイコライザ処理制御等が挙げられる。また、アクセサリ200がストロボ機器であった場合は、ストロボが発光した光を撮像センサ122で蓄積取得する測光制御や、ストロボの発光量指示値の演算制御等が挙げられる。ステップS509の後、カメラ制御部B102はステップS504に戻る。
図13は、アクセサリ装着時処理を示すフローチャートである。このフローチャートは、カメラ100にアクセサリ200が装着され、アクセサリ200の機能を有効にするまでのアクセサリ制御部201による処理を示している。この処理は、アクセサリ制御部201におけるROMに格納されたプログラムをアクセサリ制御部201におけるCPUがアクセサリ制御部201におけるRAM(いずれも図示せず)に展開して実行することにより実現される。この処理は、アクセサリ200がカメラ100に装着されると開始される。
なお、図11、図12に示す処理において、カメラ側接続部141、カメラ制御部A101およびカメラ制御部B102は、協働して本発明における通信手段としての機能を果たす。また、カメラ制御部A101は、本発明における取得手段、判定手段、制御手段としての機能を果たす。
ステップS601で、アクセサリ制御部201は、カメラ100からのアクセサリ電源VACCがオンするまで待機し、アクセサリ電源VACCがオンすると、ステップS602に進む。なお、この方法とは別に、アクセサリ200が電池205を持つ構成であって、さらにアクセサリ制御部201がアクセサリ電源VACCの電圧値を監視する構成を持ち、アクセサリ電源VACCがオンしたことを検出できるようにしてもよい。なお、アクセサリ200が電池205を持たない構成の場合は、アクセサリ制御部201へ電源が供給され、アクセサリ制御部201自身が動作を開始したことでアクセサリ電源VACCがオンしたと判別してもよい。
ステップS602で、アクセサリ制御部201は初期設定を行う。この初期設定には、例えば、マイコンの動作周波数の設定、マイコンの入出力制御ポートの設定、マイコンのタイマ機能の初期化設定、マイコンの割り込み機能の初期化設定等が含まれる。ステップS603で、アクセサリ制御部201は、通信要求信号/WAKEをLoに制御することで、初期設定が完了したこと(通信可能な状態となったこと)をカメラ100に対して通知する。
ステップS604で、アクセサリ制御部201は、カメラ100からの初期通信としてのI2C通信に対して応答し、15バイトのアクセサリ情報(図6)を送信する。ステップS605で、アクセサリ制御部201は、通信要求信号/WAKEをHiに制御する。ステップS606で、アクセサリ制御部201は、イベントが発生する(検出される)まで待機し、イベントが発生すると、ステップS607に進む。従って、アクセサリ情報が送信されるのは、通信可能を示す情報を通知した後の最初の通信においてであり、且つ、イベントに基づく動作を開始する前である。
ステップS607で、アクセサリ制御部201は、ステップS606で検出されたイベントが、カメラ100とのSPI通信を要するイベントであるか否かを判別する。そして、アクセサリ制御部201は、検出されたイベントがSPI通信を要するイベントである場合はステップS608に進み、検出されたイベントがSPI通信を要するイベントでない場合はステップS609に進む。
ステップS608で、アクセサリ制御部201は、カメラ100とのSPI通信制御を行う。このSPI通信制御の実行時に通信要求信号/WAKEがLo出力状態になっている場合は、アクセサリ制御部201は、SPI通信後に通信要求信号/WAKEをHi出力制御にする。
ステップS608で実行されるSPI通信制御として、例えば、アクセサリ200がマイク機器であった場合は、カメラ100からのマイク動作をオン/オフさせるための指示通信が挙げられる。また、SPI通信として、マイクの集音指向性を切り替える指示通信、マイクのイコライザ機能を切り替える指示通信等が挙げられる。また、アクセサリ200がストロボ機器であった場合は、SPI通信制御として、ストロボの設定情報を読み出す通信、ストロボに対して設定情報を通知する通信等が挙げられる。ステップS608の後、アクセサリ制御部201は、ステップS606に戻る。
ステップS609で、アクセサリ制御部201は、検出されたイベントが、カメラ100とのI2C通信を要するイベントであるか否かを判別する。そして、アクセサリ制御部201は、検出されたイベントがI2C通信を要するイベントである場合はステップS610に進み、検出されたイベントがI2C通信を要するイベントでない場合はステップS611に進む。
ステップS610で、アクセサリ制御部201は、カメラ100とのI2C通信制御を行う。SPI通信制御の実行時に通信要求信号/WAKEがLo出力状態になっている場合は、アクセサリ制御部201は、SPI通信後に通信要求信号/WAKEをHi出力制御にする。ステップS610で実行されるI2C通信制御としては、例えば、アクセサリ制御部201からカメラ100に対して通知した通信要求信号/WAKEに対する、通信要求要因の読み出し通信等が挙げられる。ステップS610の後、アクセサリ制御部201は、ステップS606に戻る。
ステップS611で、アクセサリ制御部201は、ステップS606で検出されたイベントが、機能信号を用いた制御を行うイベントであるか否かを判別する。そして、アクセサリ制御部201は、検出されたイベントが、機能信号を用いた制御を要するイベントである場合はステップS612に進み、検出されたイベントが、機能信号を用いた制御を要するイベントでない場合はステップS613に進む。
ステップS612で、アクセサリ制御部201は、カメラ100に対して機能信号を用いた制御を行う。アクセサリ200がマイク機器であった場合、ステップS612で実行される機能信号を用いた制御としては、次のような制御が挙げられる。
例えば、カメラ100から出力されるFNC1の音声データ用クロック信号とFNC2の音声データ用チャンネル信号を受信制御すると共に、これらの信号に同期して、FNC3の音声データ信号を出力制御すること等が挙げられる。一方、アクセサリ200がストロボ機器であった場合は、ステップS612で実行される機能信号を用いた制御としては、FNC4のストロボ発光同期信号を受信制御することでストロボ発光制御を行うことが挙げられる。ステップS612の後、アクセサリ制御部201は、ステップS606に戻る。
ステップS613で、アクセサリ制御部201は、ステップS606で検出されたイベントが、通信要求信号/WAKEによるカメラへの通知を行うイベントであるかを判別する。そして、アクセサリ制御部201は、検出されたイベントが、通信要求信号/WAKEによるカメラへの通知を要するイベントである場合はステップS614に進む。一方、アクセサリ制御部201は、検出されたイベントが、通信要求信号/WAKEによるカメラへの通知を要するイベントでない場合はステップS615に進む。
ステップS614で、アクセサリ制御部201は、ステップS606で検出されたイベントに応じたカメラ100への通信要求要因番号をアクセサリ200の不図示の揮発性メモリに格納し、通信要求信号/WAKEをLoに制御する。この通信要求要因番号としては、図9で説明したように、要因内容毎に割り振られた固有の番号が該当する。ステップS614の後、アクセサリ制御部201は、ステップS606に戻る。
ステップS615で、アクセサリ制御部201は、ステップS606で検出されたイベントに応じたアクセサリ内制御を行う。ステップS615で実行されるアクセサリ内制御としては、例えば、アクセサリ200が電池205を有する場合には電池残量検出制御が挙げられ、その他、操作スイッチ212の検出制御などが挙げられる。ステップS615の後、アクセサリ制御部201は、ステップS606に戻る。
なお、図13に示す処理は、カメラ100の主電源がオフにされた場合、オートオフモードへ移行した場合、アクセサリ200がカメラ100から取り外された場合等に終了する。
上記のように、図11、図12、図13に示す処理を経ることで、カメラ100は、装着されたアクセサリ200の制御を行うことができるようになり、アクセサリ200は機能動作を行うことができるようになる。
図14は、カメラ100に分配アクセサリが装着された状態を示す図である。カメラ100における装着部としてのカメラ側接続部141には、マイク機器やストロボ機器などのほか、図14に示す分配アクセサリ200Xも、アクセサリの1つとして装着可能である。
分配アクセサリ200Xは、2以上のアクセサリを装着可能なアクセサリ接続装置(マルチアクセサリ接続アダプタ機器)である。カメラ100に対する接続に関する分配アクセサリ200Xの基本構成はアクセサリ200と同様である。従って、分配アクセサリ200Xは、カメラ側接続部141に接続(装着)されるアクセサリ側接続部211を有する。ただし、分配アクセサリ200Xは、外部接続端子209に相当する外部接続端子209Xを備える。
外部接続端子209Xは、カメラ側接続部141が有する端子と同様の端子を有するスロットSL(SL1~SL3)を複数備える。図14に示す例では、スロット数は3であるが、2または4以上でもよい。各スロットSLには1つのアクセサリを装着可能である。カメラ側接続部141が、1つのアクセサリを装着可能な第1の装着部として機能する一方、外部接続端子209Xは、2以上(複数)のアクセサリを同時に装着可能な第2の装着部として機能する。外部接続端子209Xには、アクセサリ側接続部211を備える各種のアクセサリを装着可能であり、マイク機器やストロボ機器などの撮影アクセサリも接続できる。スロットSL1、SL2、SL3に装着されたアクセサリ200を、アクセサリ200-1、200-2、200-3と記す。
カメラ100は、上述したように、カメラ側接続部141に装着されたアクセサリとの間で、I2C通信(第1の通信)を行うと共に、I2C通信の結果に応じてSPI通信(第2の通信)を行う。ここで、SPI通信は、I2C通信よりも高速な通信方式である。さらに、カメラ100は、カメラ側接続部141に分配アクセサリ200Xが装着された状態では、分配アクセサリ200XのスロットSLに装着されたアクセサリ200-1~200-3と通信する。その際、カメラ100は、アクセサリ200-1、200-2、200-3に対して、分配アクセサリ200Xを介してI2C通信を行うと共に、I2C通信の結果に応じてSPI通信を行う。
このように、分配アクセサリ200Xは、カメラ側接続部141に装着された後、I2C通信およびSPI通信を経て、自身に装着された2以上のアクセサリとカメラ100との間の、カメラ側接続部141を介した通信を可能にする。
また、カメラ100は、上述したように、I2C通信により、カメラ側接続部141に装着されたアクセサリ200(分配アクセサリ200Xを含む)から当該アクセサリのアクセサリ情報を取得する。さらにカメラ100は、カメラ側接続部141に分配アクセサリ200Xが装着された状態では、I2C通信により、スロットSLに装着されたアクセサリ200-1~200-3から、それぞれのアクセサリ情報を、分配アクセサリ200Xを介して取得する。
図15は、アクセサリ装着時メイン処理を示すフローチャートである。このフローチャートは、カメラ100に装着されたアクセサリ200(分配アクセサリ200Xである場合を含む)、または分配アクセサリ200Xに装着されたアクセサリ200の機能を有効にするまでのカメラ100による処理を示している。このアクセサリ装着時メイン処理は、主としてカメラ制御部A101におけるROMに格納されたプログラムをカメラ制御部A101におけるCPUがカメラ制御部A101におけるRAM(いずれも図示せず)に展開して実行することにより実現される。この処理は、カメラ100の主電源がオンにされた場合や、オートオフモードから復帰した場合に開始される。
ステップS2001では、カメラ制御部A101によりアクセサリ装着時第1処理(図11)が実行される。なお、ステップS2001における図11のステップS408で、アクセサリ情報がカメラ制御部B102に対して通知された場合は、さらにカメラ制御部B102によってアクセサリ装着時第2処理(図12)も実行される。
ステップS2002で、カメラ制御部A101は、カメラ100に装着されたアクセサリが分配アクセサリ200Xであるか否かを判別する。これは、アクセサリ情報(図6)におけるアドレス0x00のD7-D0データが示すアクセサリ種類情報により判別される。あるいは、アドレス0x01のD7-D0データが示すアクセサリの識別番号に、分配アクセサリ200Xを示す特定の値を含めることで判別できるようにしてもよい。あるいは、分配アクセサリ200Xを識別する情報をリザーブ領域に含めることで判別できるようにしてもよい。
なお、ステップS2002で、カメラ100に装着されたアクセサリが分配アクセサリ200Xでない場合は、カメラ制御部A101は、図15に示す処理を終了する。この場合、図11~図13で説明したように、通常のアクセサリ200がカメラ100に装着された場合と同様となる。一方、カメラ100に装着されたアクセサリが分配アクセサリ200Xである場合は、カメラ制御部A101は、分配アクセサリ200Xのスロット数を取得すると共に、ステップS2003に進む。
ステップS2003~S2010の処理を、「重複調整処理」と呼ぶ。ステップS2003で、カメラ制御部A101は、ループカウンタのカウント値Xを「0」に初期化する。ループカウンタは、ステップS2005~S2008の処理を複数のスロットSLに対して行うためのカウンタである。なお、処理するスロット数をカウントできるものであれば他のカウンタでもよい。
ステップS2004で、カメラ制御部A101は、スロット数がカウント値Xを超えている(スロット数>X)か否かを判別する。ここで、スロット数>Xが成立することは、ステップS2005~S2009の処理のループ継続条件である。カメラ制御部A101は、スロット数>Xが成立する場合は、ステップS2005に進む。
ステップS2005で、カメラ制御部A101は、複数のスロットSLのうちX+1番目のスロットSLに装着されているアクセサリ200に関する装着処理を実行する。すなわち、カメラ制御部A101によりアクセサリ装着時第1処理(図11)が実行される。なお、ステップS2005における図11のステップS408で、アクセサリ情報がカメラ制御部B102に対して通知された場合は、さらにカメラ制御部B102によってアクセサリ装着時第2処理(図12)も実行される。なお、外部接続端子209Xに対応する装着処理の実行順は予め定められており、スロットSL1、SL2、SL3の順番とする。例えば、最初のループでは、X+1番目は1番目であり、スロットSL1に装着されているアクセサリに関する装着処理が実行される。
ステップS2006で、カメラ制御部A101は、ステップS2005で装着処理が実施されたアクセサリが2以上となった場合において、互いに重複する機能を有するアクセサリが存在するか否かを判別する。これは、装着状態となった2以上のアクセサリの各々のアクセサリ情報(図6)に基づいて判別される。
具体的には、カメラ制御部A101は、アドレス0x06のD3-D0データの機能信号(FNC信号)を読み出し、2以上のアクセサリの機能信号が重複しているか否かを判別する。上記機能信号は、ビットフィールドで定義されているので、ビットの立つ位置が重複していれば機能の重複があることが分かる。FNC1~FNC4のうち重複する機能信号を有するアクセサリ同士は、互いに重複する機能を有するアクセサリ(以下、「重複アクセサリ」と称する)であると判別される。例えばFNC1、FNC2、FNC3が有効であるアクセサリと、FNC3、FNC4が有効であるアクセサリとは、FNC3が重複しているので、重複アクセサリであると判別される。カメラ制御部A101は、いずれの機能信号も重複しない場合には、それぞれのアクセサリとの通信を維持するそれぞれの機能を実行させる。
ステップS2007で、カメラ制御部A101は、重複アクセサリ停止処理を実行する。この重複アクセサリ停止処理では、カメラ制御部A101は、重複アクセサリのうち少なくとも1つとの通信を遮断し、好ましくは重複アクセサリのうち1つのみとの通信を維持する。重複アクセサリ停止処理の例は以下に示すように各種考えられる。
まず、通信遮断については、カメラ100は、アクセサリがSPI通信(S506)またはI2C通信(S405、S509)を実施中であればそれらの通信を停止する。さらに、カメラ制御部A101は、ステップS407でHiにされた電源制御信号CNT_VACC2をLoにすると共に、ステップS402でHiにされた電源制御信号CNT_VACC1をLoにする。これにより、重複アクセサリへの電力供給がオフにされる。
なお、重複アクセサリの全てとの通信を遮断してもよいし、一部との通信を遮断してもよい。また、通信のすべてを遮断せずに、互いに重複する機能に関する通信を遮断して互いに重複する機能を実行させないようにしてもよい。一部との通信を遮断する際、一定のルールに基づいて、通信を遮断するアクセサリを決定してもよい。なお、各スロットSLへの装着時刻は、少なくともカメラ100が把握できるように記憶されるとする。
まず、カメラ制御部A101は、重複アクセサリのうち、スロットSLの番号が小さい方または大きい方を、通信を遮断するアクセサリとして決定してもよい。
あるいは、カメラ制御部A101は、外部接続端子209Xに装着された順番に基づいて、通信を遮断するアクセサリを決定してもよい。例えば、重複アクセサリのうち先に装着されたもの、あるいは後から装着されたものを、通信を遮断するアクセサリとして決定してもよい。後から装着されたものを、通信を遮断するアクセサリとする場合(先勝ち)は、既に動作しているアクセサリの挙動を妨げることがない。一方、先に装着されたものを、通信を遮断するアクセサリとする場合(後勝ち)は、ユーザが利用を意図している可能性が高いと考えられるアクセサリを速やかに利用可能にすることができる。また、どのスロットに装着されたアクセサリの通信を遮断するか(遮断しないか)、先に装着されたアクセサリの通信を遮断するか(遮断しないか)、後から装着されたアクセサリの通信を遮断するか(遮断しないか)、をユーザによって設定可能にしてもよい。
このほか、アクセサリ情報に基づき、通信を遮断するアクセサリを決定してもよい。例えば、アドレス0x04のD3-D0(図6)が示す要求電力情報を参照し、カメラ100が電力供給できないアクセサリを、通信を遮断するアクセサリとして決定してもよい。また、上記各種のルールを組み合わせてもよい。
ステップS2008で、カメラ制御部A101は、報知処理を実行する。この報知処理では、例えば、通信を遮断したアクセサリを特定する内容を表示部127に表示する。その際、揮発性メモリ125のGUI表示領域を更新することでGUI表示してもよい。なお、報知態様は、メッセージのテキスト表示やアイコン表示に限らず、音声を用いてもよい。報知処理により、ユーザは接続したアクセサリが利用できないことを認識することができる。
なお、分配アクセサリ200Xに表示部等の報知部を設け、報知処理では、カメラ100または分配アクセサリ200Xのいずれかまたは双方で、通信を遮断したアクセサリの報知を行うようにしてもよい。
なお、報知の際に、重複状態を解除する方法をユーザに教えてもよい。例えば、重複アクセサリを特定する情報を提示し、どのアクセサリを取り外せば残りのアクセサリが利用可能になるかを教示してもよい。
なお、重複アクセサリ停止処理の前に報知処理を実行してもよい。この場合、重複アクセサリが存在する旨をユーザに報知し、実際に遮断するものをユーザに選択させてもよい。
ステップS2009で、カメラ制御部A101は、ループカウントのカウント値Xをインクリメントして、ステップS2004に戻る。ステップS2004で、カメラ制御部A101は、スロット数>Xが成立しない場合は、分配アクセサリ200Xが持つスロットSLの最大数分の処理を行ったと判断できる。そこでカメラ制御部A101は、ステップS2010で、分配アクセサリ200Xの各スロットSLに対するアクセサリの装着状態に変化があるまで待機する。装着状態に変化がない間、分配アクセサリ200Xに装着されたアクセサリは、停止されたアクセサリを除き、利用可能となる。
分配アクセサリ200Xの各スロットSLに対するアクセサリの装着状態に変化があると、カメラ制御部A101は、ステップS2003に戻る。従って、ステップS2010のループ中に新たなアクセサリが外部接続端子209Xに装着された場合、それにより新たな重複が生じれば、重複状態が解除されるようにいずれかのアクセサリが停止される。
図15に示す処理は、カメラ100の主電源がオフにされた場合、オートオフモードへ移行した場合、分配アクセサリ200Xが取り外された場合等にも終了する。
なお、ステップS2010を設けることは必須でなく、ステップS2004でNoと判別された場合、図15に示す処理を終了してもよい。
本実施の形態によれば、カメラ側接続部141(装着部)に装着された分配アクセサリ200Xに対して2以上のアクセサリが装着状態となったとき、アクセサリ情報に基づいて、重複アクセサリが存在するか否かが判定される(S2006)。重複アクセサリが存在すると判定された場合は、重複アクセサリのうち少なくとも1つとの通信が遮断される。これにより、機能が重複する2以上のアクセサリ200の同時利用を回避することができる。従って、複数のアクセサリが装着された状態でも不具合が生じないようにすることができる。特に、装着された複数のアクセサリ200の全てが同時に且つ正常に利用可能にならない場合に、重複アクセサリのうち1つのみとの通信を維持することで、正常利用できる状態を確保することができる。
また、重複アクセサリのうち通信を遮断するアクセサリが報知されるので、ユーザは、装着したアクセサリが有効に利用できるかどうかを認識することができる。
なお、重複調整処理(S2003~S2010)は、カメラ100が実行したが、図16に変形例を示すように、分配アクセサリ200Xが実行するように構成してもよい。
図16は、アクセサリ装着時メイン処理と分配アクセサリ処理とを対応させて示すフローチャートである。アクセサリ装着時メイン処理の実行主体や開始条件は図15に示す処理と同様である。分配アクセサリ処理は、分配アクセサリ200Xによって実行される。分配アクセサリ処理は、アクセサリ制御部201におけるROMに格納されたプログラムをアクセサリ制御部201におけるCPUがアクセサリ制御部201におけるRAM(いずれも図示せず)に展開して実行することにより実現される。
アクセサリ装着時メイン処理におけるステップS2001、S2002は、図16で説明した通り、カメラ100により実行される。ステップS2002でYesと判別されると、カメラ制御部A101は、ステップS2101に進む。
ステップS2101で、カメラ制御部A101は、重複調整処理を実行するよう分配アクセサリ200Xに指示を送り、アクセサリ装着時メイン処理を終了する。すると、分配アクセサリ200Xのアクセサリ制御部201は、分配アクセサリ処理において、ステップS2003~S2010と同様の処理を実行する。
このような構成によっても、機能が重複する2以上のアクセサリ200の同時利用を回避することができる。なお、図16に示す処理における報知処理(S2008)においては、カメラ100または分配アクセサリ200Xのいずれかまたは双方で、通信を遮断したアクセサリの報知を行うようにしてもよい。
なお、カメラ100と分配アクセサリ200Xとが予め一体となったカメラシステムにも本発明を適用可能である。この場合のカメラシステムは撮像装置と呼称されてもよい。なお、カメラ100が内蔵アクセサリ151、152を内蔵することは必須でない。また、電子機器として撮像装置について説明したが、本発明にいう電子機器には撮像装置以外の様々な電子機器も含まれる。
以上、本発明をその好適な実施形態に基づいて詳述してきたが、本発明はこれら特定の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。