February 03, 2010Super Sylphide 進捗状況(28) -- DSPのROMブートでmain()前にPLLを有効にオートパイロットシステム Super Sylphideですが、ちょっとした佳境を迎えつつあります。そのデバック作業中において遭遇した問題について、今回は記事にしてみようと思います。内容はタイトルのとおり、ブートコードでPLLの設定を完了しなければせならなかったという話です。 Super Sylphideで利用しているDSPはTIのTMS320C6713Bという浮動小数点DSPです。このDSPはROMからブートする場合、以下の2段階の過程を経て行われます。
この1KBのブートコードは、なんといってもレジスタ設定やコード配置に関することですから非常に重要です。ということでTIのDSKに付属していたブートコードをベースに、RAMのリフレッシュレートの定数などを少し変更しただけのブートコードをこれまで使ってきました。 しかしながら時たまブートしなくなるという、不安定な症状が発生しました。原因を色々と探ってみたのですが、コードのサイズが少しばかり大きくなると問題が発生するということがわかりました。どうやら外部RAMであるSDRAM上に配置したプログラムコードが時たま予期しないものに書き換わってしまっているようでした。 色々考えてみた結果、タイトルの通りのこと、つまりPLLの初期化をmain()ではなくブートコード上で行うと不安定な状態が解消されることがわかりました。SDRAMのリフレッシュが不足し、データの一部が改変されていたようです。 元にしたDSKのサンプルコードですが、これはこれで正当な方法でブートが行われている、と見ることができることもわかりました。というのも、DSPは高速な演算をさせるために、プログラムコードは外部RAMにおかず、内部RAMにおくというのが有る意味作法となっているからです。内蔵RAMはSRAMでありリフレッシュは必要ないので、PLLによってクロックが変化しようが問題ない、つまりPLLの設定はどこで行っても問題がないということなのでしょう。 最後に現在のブートコード(boot6713.asm)と、PLL初期化がない古いブートコード(boot6713.asm.r3660)を置いておきます。直接参考になるコードがなかった(C672xのブートに関する資料(jaja100.pdf)は参考になった)ので、ニーモニックを調べたりCコンパイラが吐くアセンブラを見ながら、なんとかハンドコーディングできました。 ※進捗状況とはちょっと異なりますが、新たな関連文章をリリースしたのでお知らせします。『システム同定による小型無人航空機の飛行特性の取得』。Super Sylphideが計測装置として活躍しています。 ※※新システム Tiny Featherを開発しはじめました。 February 12, 2010ローカルに流れるTCPパケットを見るちょっとした事情がありまして、以前記事を書いた『Amontec JTAGkey-Tiny (FT2232) を Xilinx iMPACTから使う』のメンテナンスをしています。これはXIlinxの純正書き込みツールでFT2232を使ったFPGAやPROMへの書き込みを可能にしようというツールなのですが、メンテナンスを行うにあたって表題のローカルを流れるTCPパケットを直接調べたいという要望が発生しました。 持ち出したるはTCPのパケットを監視するフリーウェアNirSoftのSmartSniffなのですが、これが困ったことにNICを通ったパケットしか拾ってくれないようでした。このフリーウェアはパケットをキャプチャしてくれるという単機能なので、非常に使い勝手が良く愛用しているので、できれば今回の目的にも使いたいところです。 ということで方法を考えてみました。方法は2つ考えたのですが、結局のところ他のマシンを経由してNICを強制的に通すというアイデアに変わりはありません。1つはsshでどこか手元にあるサーバに接続する際、ポートフォワーディングを行うという方法(ssh hoge@server -L some_port:local_ip:local_target_port)。もう一つはどこか別のコンピュータでstoneを使ってポートフォワーディングを行う方法(stone local_ip:local_target_port some_port)。どちらともうまくいきました。 どなたか1台のPCで済む良い方法をご存じないでしょうか。仮想PCとか使えばうまくいきそうな気もしていますが、ちょっと面倒くさいです。 February 24, 2010アレの小型化以前、実体配線図を紹介したアレですが、その後自分が欲しかった機能を組み込んだ基板を設計してみました。もちろん小型化してあります。
追加された仕様は、振動モータのドライバ回路を1ch組み込んだこと、LiPoの充電回路(bq24022)を組み込んだこと、USBとの接続を直挿しからminiBコネクタに変更したこと、これら3点です。もう少し回路をチェックした後、pcbcartに投げてみようと思います。 ※その後、実装完了しました。 |
かれんだ~
スポンサード リンク
|