OBDNマガジン - OpenBlocks Developers Network Magazine
OBDNプライマルアドバイザ・後藤敏也 Toshiya Goto を責任編集者としてつづる、OpenBlocksやマイクロサーバ、Linux、オープンソースソフトウェアの最新技術やニュース定点観測ブログです。
関連情報に興味を持つ技術者や管理者に、Linux業界第一人者としての視点から見たIT最新情報をお届けします。
OpenBlocks Developers Network はこちら
http://openblocks.plathome.co.jp/support/
2012-10-03
[.tested] 勤次郎 JustTimes KTJ-100/KJT-10 [AX3][A6]
勤次郎 JustTimesは、JJY放送を受信して、USBシリアルにより時刻データを出力する機器であり、
USB接続可能な機器と接続することにより、取得した時刻データにより内部クロックの調整が可能となります。
今回、上記機器本体と、OpenBlocks AX3およびA6との接続検証を行いました。
OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。
<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8
勤次郎 JustTimes KTJ-100/KJT-10
1. 対応ドライバと事前準備
当該デバイスは、CP210xシリーズのUSBシリアルデバイスを使用しており、
dmesgでは以下のメッセージが表示されます。
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for cp210x
cp210x 1-1:1.0: cp210x converter detected
usb 1-1: reset full speed USB device using ehci_marvell and address 2
usb 1-1: cp210x converter now attached to ttyUSB0
usbcore: registered new interface driver cp210x
cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver
デバイスは、/dev/ttyUSB0
となり、9600bps/8bit/non Parityでの通信となります。
2. 勤次郎 KTJ-100について
勤次郎 KTJ-100のシステムは、送信ユニット(KTJ-100)および受信ユニット(KTJ-10)により構成されます。
受信ユニットは、USB接続によりコンピュータに接続され、受電もUSBより行います。
送信ユニットは、単4電池x2本による駆動となり、窓際など、jjyの電波の入る場所に設置します。
本送信ユニットは、決められた間隔で36bitのデータを受信ユニットに送信します。
(受信のみで、送信による強制的なデータハンドリングの手段はありません)
#電池駆動のため、データの送信は1時間に1回程度となり、
#テスト用の強制モードで3分に1回の送信とすることが出来ますが、
#強制モードの場合、evolta電池であっても1ヶ月程度しか稼動しません。
3. ntpdでの使用方法
今回、検証用にデータプロトコルを入手し、2種類のプログラムを作成しました。
プロトコルの公開に関しては、現在は本製品購入者に対してのサポート窓口での受付のみとなるため、本ブログでは現時点では公開を行いません。
#評価プログラムを利用した場合も公開は行われないとのことです。
#現在、サポートなしという条件の元、公開出来るかどうかの問い合わせ中です。
(1)時刻合わせ用のプログラムによりPC内部のクロックをを設定し、ntpdは、内部クロックにより調停する。
取得したデータによりdate設定するRubyスクリプトを作成しました。
必要に応じて、cronに登録し、自動実行します。
(2)ntpdプログラムのrefclock_jjyにkjt-100のデータハンドリングを追加する。
今回は、debian squeezeのソースパッケージを展開し、ntp-4.2.6.p2+dfsgに、kjt-100のデータハンドリングを追加しました。
今回手を入れたソースコードは、以下の2つになります。
ntpd/ntp_refclock.c
ntpd/refclock_jjy.c
今回実装したプログラムに関して、いくつかのメモを書いておきます。
1. 受信データは、本来のrefclock_jjyの仕組みでは、ntp_refclock内で一旦0x7fでマスクされてバッファ格納されますが、kjt-100は、STXが0xaa、予約領域もバイナリで不定、CRC16もバイナリ情報となるため、マスクを強制的に外す処理をしています。
そのため、もしこのntpdを1-4のモードの別の対応機器に繋いだ場合、結果が保証できません。
ntp-refclockに修正を行わない場合は、refclock_jjyでのCRC16チェックをあきらめる必要があります。
2. refclock_jjyプログラム内でのデータ整合性チェックは、
受信データ長
時刻および日付が正しい値かどうか ( ex: 0-59秒範囲内にあるかどうか )
チェックサム CRC-16による
受信ステータスのデータチェック
にて行いました。CRC-16は、0x0000スタートです。
3. ntp.confの設定と動作確認について
refclock_jjyプログラムは、デバイスを/dev/jjy* がデフォルトであるため、
1台目は/dev/jjy0となります。
kjt-100自体は/dev/ttyUSB0として認識されていますので、
ln -s /dev/ttyUSB0 /dev/jjy0
として、シンボリックリンクする必要があります。
また、Openblocksのディスク併用モードおよびinitrdの場合は、ファームウェア作成時に、このデバイスのリンクを
埋め込んでおく必要があります。(もしくは、rc.localで書いてもいい)
また、refclock_jjyのデバイスを/dev/ttyUSB*にすることでも回避出来ます。
今回追加した機器は、5番になるため、設定は以下の様になります。
server 127.127.40.0 mode 5
fudge 127.127.40.0 time1 0
以上、本プログラムにより、時刻調停が行われているかどうかは、以下のコマンドにて確認をしています。
root@obsa6:~/kjt-100# ntpq -p
remote refid st t when poll reach delay offset jitter
=============================================================
*JJY(0) .JJY. 0 l 41 64 111 0.000 211.632 146.798
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿