September 07, 2007

GPSチップアンテナ 実装済み

sparkfunで購入したGPSチップアンテナを基板に載せてみました。試験はこれからです。

gps_chip_antenna_board.jpg
コンデンサあり版となし版

このアンテナはLow Noise Amplifier (LNA)がないパッシブアンテナ(Passive Antenna)というタイプで、あまり受信機から放して使うのは好ましくないようです。ケーブルでどこまで放して使えるか興味があるところですが、あまり性能がよくない場合はLNAを組合わせたActive Antennaバージョンも作成する予定です。

※その後、LNA付きバージョンが作成されました、が…。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (4) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/590

September 10, 2007

USB Composite DeviceでCDCが動作しない

少し前にWindowsでUSBのMSD+CDCのComposite Deviceが認識されて良かったです、という記事を書きましたが、実は後日談としてタイトルのような現象にやられています。認識されたくらいでうまくいったと早合点していた自分が情けないです。

肝心の現象ですが、USBデバイスを接続直後(開始後1秒未満)はCDCでデータのやり取りが正常にできるのですが、それ以降はまったく反応がなくなります。USBソフトウェアアナライザのSnoopyProで調べてみたところ、CDCのCommunication InterfaceのInterrupt IN Endpoint 0x81とData InterfaceのBulk IN Endpoint 0x82が0xc000005(メモリ関連のエラー)で落ちてしまっているようです。なお、SnoopyProの機能を利用してCDCの部分だけリセットをかけると以後CDCによる通信が正常に行えました。

composite_fail.gif
赤丸が問題の箇所。

おそらくCDCの機能を提供しているusbser.sys、あるいはその親ドライバusbccgp.sysが怪しいのではないかと疑っていますが、なかなか情報が出てこず困っております。関連するHotfixもあたってみましたが、最新のusbser.sysを提供するHotfix 918365(2007/08/29)も効果なしでした。
解決方法について色々と調査中ですが、どうやらusbser.sysはソースコードが公開されていないなど不利な状況で困っています。これぞM$クオリティ(笑)。

※自分のコードには多少バグがあることがわかりましたが、状況は改善しておりません。『Super Sylphide 進捗状況(16) -- Windows XPでMSD+CDCのUSB compositeが相変わらず動かない』をどうぞ。

23:18 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/591

September 14, 2007

Super Sylphide 進捗状況(9) -- McBSPでmulti-words SPI

オートパイロットシステム Super Sylphideの前回の記事『DSP/BIOSを利用した割込みMcBSP(SPI Slave)』で、DSPはMcBSPモジュールによるSPI通信(Slave)でマイコン(Master)からのデータをやり取りしています、ということを書きました。今回の記事は前回記事の拡張で、複数の塊で意味を持つデータ通信をどのように行えばいいかというお話です。

※今回のお話は長いので、トップページから来られた方は続きをどうぞ。

続きを読む "Super Sylphide 進捗状況(9) -- McBSPでmulti-words SPI"
09:08 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/592

September 21, 2007

2007 富士山

昨日、富士山に登ってきました。天候は最高でご来光もよく見えました。しかし、写真を選ぶならこの写真。

2007fuji.jpg
最高の形、お鉢の西側から。

これで2度目の富士山ですが、本来登るべきでない観賞用の山にもたまには登ってみるものです。影の形がこんな美しいとは。

18:15 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (2) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/593

September 29, 2007

Super Sylphide 進捗状況(10) -- C6700用行列ライブラリ 再び

オートパイロットシステム Super Sylphideの開発をしている過程で、以前、TIのDSP TMS320C6713用のC++行列ライブラリを作ったよ、という記事を書きました。しかし最近になって検証をまじめにしたところ、メモリが漏れていたり(汗)、条件によっては無限ループにハマってしまったり(汗)、と大変な状況であることが判明したので、バグフィックスをしました。

現時点での最新版をここにおいておきます。(更新履歴は記事の一番後ろにあります)

修正点は以下2つです。

まず一点は、メモリが漏れていました。すいません。参照カウンタという仕組みを利用して行列成分を保存する領域の管理をしているのですが、行列成分(ソース内:Array2D_Dense::m_Values)自体は管理ができていたものの、それのお目付け役である参照カウンタ(ソース内:Array2D_Dense::ref)のdeleteをし忘れていました。

もう一点は行列積を高速化するためにTI純正のライブラリ TMS320C67x DSP Library (dsp67x.lib)のDSPF_dp_mat_mul / DSPF_sp_mat_mul 関数を使っていたのですが、行数あるいは列数が奇数のときに無限ループに落ち込んで呼び出し元に復帰しない現象が確認されました。
これはドキュメントに、行数あるいは列数が奇数のときには偶数分だけメモリを読むので注意しなさい、ということが書いてあるのでずか、その解釈を誤っていたことが原因でした。ライブラリの元ソース(dsp67x.src)を確認してみると行、列成分は偶数分メモリが確保されていることが高速化のために前提となっており、2 x 2の小行列単位で処理を行うようになっていました。
そこで行列をクラス階層的にラップして、例えば7 x 7といった奇数個成分の行列でもメモリは8 x 8分確保する、という構造にしました。これにはC++の機能である仮想関数やテンプレート特殊化が大活躍しています。
ちなみにですがdsp67x.libを使うと、例えば10 x 10の行列積が2490サイクル(200MHz動作時だと約1.3 usec)、とかなり速いのでお勧めです。

今後のこのライブラリの予定ですが、ある行列と転置行列の積が若干オーバヘッド気味なことをしている(転置行列の成分をディープコピーして並べ替えたあと、積算)なので、アセンブラでDSPF_dp_mat_mul / DSPF_sp_mat_mul 関数に似た専用関数を作ろうかと考えています。また参照カウンタ自体のメモリをnewで確保する(アロケータの性質にもよるが、小さい領域をヒープから取るのはあまり得策でないよう)のが微妙なので、placement newあたりでDSP/BIOSのBUFモジュールと組み合わせたカスタムアロケータから、メモリを確保するようにしようかと考えています。

※その後、GPSが使用不能の場合でも時刻を保持するためのTime Keeperモジュールを作成しました。

※※2009/05/30 コードを更新しました。転置行列との積などが高速化されるようにしました。

10:17 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/594