製品情報 » JPEGカメラ » JPEGカメラC1098-SS » C1098ソフト作成の参考に

C1098ソフト作成の際の注意点

 C1098-SSを使用するには、シリアルでカメラに様々なコマンドを送出してカメラと通信を行う必要があります。以下に簡単にその手順を記してみます。
・まずSYNCコマンドでカメラと通信を開始します
 C1098-SSを使用するにはまずSYNCコマンドでカメラとの通信を確立する必要があります。ここで注意しなければならないのは電源投入直後のC1098-SSは、シリアル速度の初期値が14400bpsに初期設定されている事です。従って接続の確立のために初めてSYNCコマンドを送出するときは、必ずシリアル速度を14400pbsにする必要があります。その後はC1098-SSの電源を切らない限りユーザーが設定したシリアル速度が保持されます。つまりSYNCコマンドを送信する際には、コールドスタートの際には14400bpsで、ホットスタートの際にはユーザーが設定したシリアル速度でアクセスする必要があります。この違いは例えばカメラに電源が供給されたままで、マイコン側だけがリセットされた場合に問題になります。マイコン側はC1098-SSと接続を開始するために、まずシリアル速度を14400bpsに設定してSYNCコマンドを送出しようとしますが、カメラ側ではすでに高速なシリアル速度に設定されてしまっているので、14400bpsのSYNCコマンドでは認識できないという問題が発生します。
・C1098-SSの正しいSYNCコマンドの送出方法
 SYNCコマンドによるC1098ーSSとの通信の確立は以下の手順に従って行って下さい。
・まず高速なシリアル速度に設定してSYNCコマンドを送出します。すでにシリアル速度が設定されている場合にはすぐに応答が帰ってきますので、それ以後はそのシリアル速度で通信します(ホットスタート時)
・それで応答がなければシリアル速度を14400bpsに設定して、SYNCコマンドを送出します(コールドスタート)。コールドスタート時のSYNCコマンドは60回程度送出するとカメラからACK応答が帰ります。もしこれで応答が帰らなければカメラが接続されていないか、シリアル信号が正しくカメラに伝わっていないという事になります。
・C1098-SSはSYNCコマンドを受け付けると、その返答としてACKコマンドを返してきます。そのACKコマンドに続いて、カメラ側からもSYNCコマンドが送られてきます、応答としてマイコン側からもACKコマンドを返します。これでカメラとの接続が確立されました。これ以降はSYNCは不要で自由にコマンドを送出することが可能になります。
・INITIALコマンドでシリアル速度と画面の解像度を設定します。
 次にINITIALコマンドを送出して、新しいシリアル速度とJPEG画面の解像度を指定します。INITIALコマンドに対する応答としてカメラ側からACKコマンドが帰りますが、このACKコマンドは変更前のシリアル速度での応答になります。ACKコマンドを受信後にマイコン側のシリアル速度を新しい値に変更して下さい。C1098-SS側で新しいシリアル速度が反映されるのは50mS後になりますので、ACKコマンドを受け取った後に50mS待ってから新しいシリアル速度でのアクセスを開始して下さい。
・SET PACKET SIZEコマンドでパケットサイズを指定する
 C1098-SSは撮影したJPEG画像をパケット単位で送ってきます。このパケットのサイズをSET PACKET SIZEコマンドで指定します。ここで指定するパケットサイズは4の倍数である必要があります。一般的には256バイトを指定しますが、マイコンのメモリーが許す限り大きなパケットサイズを指定するほうが、若干ですが転送のオーバーヘッドが下がります。しかし264バイト以上を指定する場合には注意が必要です。詳しくはこのページををご参照下さい。SET PACKET SIZEコマンドが成功するとカメラ側からACKコマンドが返されます。
・GET PICTUREコマンドでJPEG画像データを取り出す
 GET PICTUREコマンドを送出すると、その応答としてまずACKコマンドが返されます。それに続いてDATA SIZEコマンドが送られてきます。このコマンドを解析するとこれから送られてくるJPEG画像のサイズが判明します。このサイズは記憶しておいてパケットを受け取る度に減算して、最後にこの値が0になったら転送は終了という判定に利用します。それではいよいよ画像の転送を開始します。まずマイコン側からACKコマンドを送出します。ただしこのACKコマンドには0から始まるパケットの連続番号を指定します。ACKコマンドを送ると画像データを含むデータパケットが送られてきます。データパケットの先頭にはパケットの連続番号(2バイト)とデータのサイズ(2バイト)が格納されています。それに続いてJPEGデータが格納され、最後に先頭からの全てのデータを加算した値(2バイト)が格納されます。最終パケット以外はSET PACKET SIZEコマンドで設定したパケットサイズより6バイト少ない値になります。パケットデータを受け取ったらマイコン側でデータを格納します。次にパケット番号を増加したACKを送ると次のJPEG画像データが送られてきます。
・タイムアウトについて
 C1098-SSからJPEG画像データを含むパケットを受け取ったら、200mS以内に次のACKコマンドを送出してください。この時間内にACKコマンドを送出しない場合にはタイムアウトが発生します。タイムアウトになるとACKを送出してももうデータパケットを送ってこなくなります。この場合でも画像データは保持されていますので、再度GET PICTUREコマンドの送出から始めれば画像データを取り出す事ができます
・最後のパケットについて
 JPEG画像データをパケットに分割して送ってきますが、減算してきた画像データのサイズとパケット内の画像データのサイズが一致したら、それが最後のパケットという事になります。最終パケットを受け取ったら最終ACKコマンドを送出します。この最終ACKコマンドはパケットの連続番号として0xf0f0を指定する必要があります。この最終ACKコマンドの送出をもってJPEG画像データの転送はすべて終了です。転送が終了してもC1098-SS内にはJPEG画像が保持されていますので、再度GET PICTUREを送出すると、全く同一の画像を取得する事ができます。あるいは新たなSNAP SHOTコマンドを送出して新規の画像を撮影して同様な手順で画像を取り出せます。
・パソコンのシリアルポートは意外に遅い
 多くのパソコンに搭載されているシリアル通信用チップである16550A互換チップのシリアル速度の上限は115200psまでなので、C1098-SSの高速性を生かせませんのでご注意下さい。またUSBでシリアル接続を行った場合にもドライバの出来・不出来により最高転送速度が制限される場合もあります。弊社のSJ-USBで評価を行った結果では、230400bpsと460800bpsでは画像転送時間にそう大きな違いがありませんでした。これは恐らくSJ-USBモジュールの速度の上限が230400bps程度なのかもしれません。C1098-SSの持ち味は460800bpsでの高速な画像取得ですので、マイコン側の通信速度をうまく適合させて下さい。