SerialProject解析(難航中)
前回は、サンプルプログラムで画像を無線転送してみました。
今日は自作プログラムで無線機能(SilentLink)を使うための解析をしています。これが大変難航しているわけですが。
SilentLinkを使う一番簡単な方法は、SilentCを使うことかと思われます。
SS-1には、Cのインタプリタ(SilnetC)が搭載されておりテキストでCのソースを送ることで実行出来ます(SilentCのマニュアル(PDF)。これ以外の資料は見つからなかった)。
SilentLinkを利用する関数も用意されています。
これは便利だとは思うのですが、プロジェクトが大きくなってくるとデバッガがないとか、毎回シリアルで送らないといけないという点で開発効率に不安があります。
いままで通りCodeWariior+デバッガでBDM接続して開発したいものです。
CodeWarriorのサンプルプロジェクトとして「SerialProject」が公開されています。
→ワイアレスシリアルケーブルのCodeWarrior用のプロジェクトファイルとソース
これはSS-1を2台使い無線シリアルケーブルにするサンプルプログラムです(CW用プロジェクトファイル+ソース)。
ちょっと気になるのはバージョンがver.1.00ってことで、バイナリのみで提供されているサンプル(この前実験に使ったバージョン、ver.1.03)より古いってことです(うーむ)。
ファイル構成はこんな感じ。
【ソース】 Start.C main関数を呼ぶのみのスタートアップ Main.C メインルーチン モデム、シリアル制御も混じっている Init.C CPU , モデムを初期化 Modem.C モデム関連コード Sci.C シリアル通信関連コード Library.C Frash読み書きコード(SkyBoot内のルーチンを利用) 【ヘッダ】 Struct.H 構造体定義 ・汎用 ・割り込みジャンプテーブル、レジストリ ・モデム PortDef.H 周辺制御(I/O)用便利マクロ ProtoType.H 全ソースのプロトタイプ宣言(ごっちゃ) ModemReg.H RFモデム側のレジスタ定義 MC13213.H マイコンの定義(CWで提供)
ソールは読みづらい・・・
・Main.Cでは関数やマクロがごっちゃにつかわれているので、わかりづらい。
・RFモデムとシリアルは用語が似てるから紛らわしいなあ
・何をする関数なのかコメントが入ってない
関連項目ごとにプレフィックスつけるかなあ。(RF_ とか COM_とか)
・Eclipse + CDTで、リファクタリングした。
・RFモデム関連→RFM_〜
・シリアル通信関連→Sci〜
・設定グローバル変数→CFG_〜
・格段に見やすくなった
Library.Cのコードは、SkyBoot内のエントリーを利用しているようだ。
(マイコン内のFlash書き換え。設定ファイルの保存に利用)
SkyBoot(E000H-FFFFHにあるモニタプログラム。SilentCもここにあるはず)は、BDMでプログラムを書き込むと消えてしまうので利用できない。
Library.C関連は利用しないように削った。
このプロジェクトは、モトローラ形式のHEXファイルを作るためのもの(シリアルで転送する)で、BDMで書き込むためのものではない。
そのため、コードがSkyBoot前提になっている。
割り込みベクタも、SkyBootの割り込みフックを書き換えることで設定している。
フックは以下の配列。
tJumpTable HookTable[25] @0x1035;
今回はこれを廃止し、割り込みベクタをプロジェクトで直接指定した。
新しくプロジェクトを作成し、必要なソースをインポート。
デバッガで実行するも、起動中に止まる。
modem.cの中でSPI通信する関数 RFM_drv_write_spi_1 で止まっていた。
RFM_WaitSPI_transfer_doneマクロでSPIの送信バッファが空になるのを延々と待っている(SPI1S_SPRFが1になるのを待っている)。
どうやらSPIが有効になってないらしい。
ソースをみたらSPIを初期化する部分が無い!
ひょっとして、SkyBootで初期化されることを前提に組まれているのか・・・うひゃー
SMACのソースなどを参考に以下のコードを追加したら先に進むようにはなった。これで正しいかどうかはわからない。
SPI1C1 = 0b01010000; SPI1C2 = 0b00000000; SPI1BR = 0x00;
次は、SetupPll関数の中で止まった。
ICGC1 = 0x78; // Clock source is PLL ICGC2 = 0x30; // 20Mhz (2MHz * 10) while (!ICGS1_LOCK); // Wait for external reference to be stable.
CPUのクロックを設定している箇所っぽい。
ICGは、特に他に設定する必要がないからこれで通りそうだけどなあ・・・データシートのexampleもこんな感じだったし。
とりあえず、ICGS1_LOCK街の部分をコメントアウトして先に進めるようにした。
無線はおいておいて、PCとのシリアル通信を試してみた。
まったく応答が無い。
SS-1側から、57600bpsで延々文字列を送信するようにしてみたが、ターミナルになにも表示されない(同じ接続で純正サンプルはちゃんと通信出来てる)。
やっぱ、クロック設定ぽいところを適当やってるから周波数が正しく設定されていないのだろう。そうするとボーレートにも直接影響してくるので通信出来なくなる。
マイコンのクロック設定周りはまだよく理解してなくて、いったい何MHzで動いているのか把握できていない。
なんかよくわからないからSilentLinkやめて、SMACにしようかなあ。
SMACはFreeScale提供のライブラリ(簡易的な無線通信が出来る。ZigBeeではない)。
でも、これもファイルがいっぱいあって、CodeWarrior SpecialEditionのファイル数制限を圧迫しそう。とか、結局マイコンは何MHzで動くこと前提になってるのか謎。とか、不安がいっぱい。←いまここ
● 関連資料(URL)
・SS-1
2.4GHz帯無線モジュール SS-1
http://www.silentsystem.jp/ss-1.htm
SS-1は、マイコン+無線モデムの複合チップMC13213やFlashROM M25P80、3軸加速度センサーMMA7260などから構成されるモジュール
・MC13213
MC13213 : ZigBeeアプリケーション向け2.4GHz RFトランシーバと60K Flash内蔵
http://www.freescale.co.jp/products/ZigBee/sip/mc13213.html
http://www.freescale.com/files/rf_if/doc/ref_manual/MC1321xRM.pdf
内蔵マイコンはMC9S08GT60A。無線モデムはMC13213。
両者は内部的にSPIで接続されている。そのため、MC9S08GT60AのSPIピンは外に出ていない。
・MC13213のマイコン部分(MC9S08GT60A)
MC9S08GB60A/GB32A/GT60A/GT32Aのデータシート
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC9S08GB60A.pdf?fsrch=1&WT_TYPE=Data%20Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation
・MC13213の無線モデム部分(MC13201)
MC13201のデータシート
http://www.freescale.com/files/rf_if/doc/data_sheet/MC13201.pdf?fsrch=1&WT_TYPE=Data%20Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation
・フラッシュROM
M25P80のデータシート(M25P80: 8-Mbit, serial Flash memory)
http://www.numonyx.com/Documents/Datasheets/M25P80.pdf
(プレスリリース)
STマイクロエレクトロニクスは、世界初の小型SO8Nパッケージに封止したコード格納用8Mbitおよび16MbitシリアルFlashメモリを出荷
http://www.st-japan.co.jp/data/press/p2059m.html
I/FはSPI。SS-1では、汎用IOに接続してソフトでSPI通信しているようだ。
・SMAC関連
SMAC_4.2.zip
https://www.freescale.com/webapp/Download?colCode=SMAC%204.2&location=null&fsrch=1&WT_TYPE=Board%20Support%20Packages&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=zip&WT_ASSET=Downloads
※ 1319x, 1320x and 1321x Simple MAC (SMAC) Application Source Code for the HCS08 1319x, 1320x and...
k_tさんがすでにSMACを使って制作をしているので参考にさせてもらおう。
ZigBee評価ボードを使った無線集計システム試作 3/3/2006
http://micon.arrow.jp/uploads/files/electronics_wireless_statistics.htm
BBSの過去ログ(No.1986〜1994)
http://micon.arrow.jp/uploads/files/old_bbs_hc(s)08_4.htm
・追記
SMACサンプル(Wireless Uart.mcp)をCW6.1でビルド仕様とするとエラーになる。
Error : C4437: Error-directive found: mslGlobals . h could not include prefix file
mslGlobals.h line 58
:
:
なんで、C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.1\ColdFire_Support\msl\MSL_C\MSL_Common\Include なんてフォルダ見に行ってるんだろう・・・
プロジェクト作り直して試してみるか・・・
シーリングライト、注文後20時間で届きました
壊れた〜直らない〜と騒いでいた部屋の蛍光灯ですが、どうにもならないので新しく買い直すことにしました。下手に直して火事になっても怖いですしね。
買ったのは、ナショナル HHLZ402(リモコン付インバーターシーリングライト) (税込 5,985 円) 。コレは結構安いですね。
昨日のお昼にMurauchi楽天市場店で注文したら今朝9時前にもう届きました。
あまりの早さにびっくりしました。ムラウチ侮れん。
楽天で最安値で検索すると、よくムラウチになるし。この前はビーズクッション買ったばかり。
ムラウチってもともと醤油屋さんなんだそうです(「村内醤油店」)。それが、「村内テレビ」になって「村内家具」になったそうな。大変歴史のあるお店のようです(mixiでいただいたちゃがまさんのコメントから受け売りw)。
こんな感じです。
リモコン式だから紐通す穴はないよ!あと、中央部分にセンサーがあります。
裏にはスポンジがついてて天井に密着するようになってます。
やっぱりちゃんと照明器具つけると明るいですね(あたりまえだ!)。
全体的に樹脂製で大変軽いです。さわるとちょっと安っぽい感がありますが、天井に設置してしまうと気にならなくなりますね。
インバーター式で目に優しい。大変満足です。
あと、リモコン
赤外線LEDが3つもるいてる。
どこ向けてボタン押しても(反射するのか)反応します。
見た目は大変しょぼいですが間違えて踏んづけても罪悪感を感じないからいいか(よかった探し)。
しかし6畳しかないのに照明器具3つ、計250W相当の照明ってのはかもーw
作業中はガンガンに明るくしてますが、プログラミングは照明落としてやってたほうが集中できるかも。
プロジェクターで地球の写真を映して、軌道上プログラミングごっこ^^;
高解像度な動画がほしいな。