インテリジェントなJTAGコントローラ
SH4を使ってインテリジェントなJTAGコントローラを作っています。
上の写真の右側のボードは市販のSH-4評価ボードで、SH7750Rが240MHzで動きます。
そのSH7750RのIOポートからJTAG信号を出して、FPGAボードなどをコンフィギュレーションしたり、バウンダリスキャンを行おうといものです。
とはいっても、全部ゼロから作るのではなく、MITOUJTAGで培ったライブラリをそのまま移植する感じにします。
いわば、パソコンレスのMITOUJTAGボックスという感じです。
ただし、お客様からの要求仕様で電源投入後0.1秒で起動しなければなりません。
そのため、組み込みCPUに移植しているという感じです。
パワーがあって使いやすい32bit RISC CPUといったら、やっぱり日本製がベストでしょう。
MITOUJTAGのライブラリはCで書かれていて、中でmallocやfree、fopenなどを使っています。
今回のシステムは電源投入で即起動させなければならないので、OSは載せません。
あるのは自前のブートコードと割り込みハンドラだけです。
mallocやfopenを組み込みプログラムでどうやって使えばよいか、数日前まで全く知りませんでした。そういうわけなので苦労はしましたが、その分ノウハウが得られたのでいずれブログに書こうと思います。
さて、SH用のコンパイラにはGNUWINGのGCCを使うのですが、mallocやprintf、fopenなどが使えるようにしてやらねればなりません。こういったmallocやprintf、fopenみたいな関数がnewlibというライブラリの中に入っていることがわかってきたので、昨日1日かけてnewlibのmallocやprintfを自分のプログラムで使えるようにカスタマイズする方法を探りました。
どうやらnewlibに長ったらしいオプションをつけて再コンパイルしたり、アンダーバーだらけの妙な名前の関数をいじる必要はないということがわかってきました。
SHの場合、newlibはファイル書き込みなどのシステムコールをしたい場合__trap34というソフトウェア例外を発生させます。この例外をうまく捕捉して自分のプログラムに導いてやればよいのです。malloc,freeに関してもグローバル変数を一つ設定すればよいだけでした。
このやり方はまた後ほど詳しく書きます。
さて、そのような苦労の末、mallocやfree、fopenが自分のプログラムから自由に使えるようになりました。
驚くべきことは、MITOUJTAGのライブラリはほとんど何も変更しないままGCCでSH4用にコンパイルできて、うごいてしまったということです。エンディアンも違うのに大丈夫なようです。32bit CPUであれば、どんなCPUにも移植できそうな気がしてきます。
起動画面はこんな感じになりました。
RS232C経由でつないでコマンドで操作します。
スタンドアローンのJTAGコントローラなので、中にはBSDLファイルやら、JTAGチェーンの構成などをファイルを入れられるようにしなければなりません。
もちろん、RS232C経由でファイルをアップロードできるようにして、フィールド書き換えができるようにすることも必要です。
なので、簡単なファイルシステムを作って、基板上のフラッシュROMに保存できるようにしました。
fopenとかfreadやると、そのメモリ上に展開されたファイルが読み出されるようになっています。とても粗末なファイルシステムですが、C標準ライブラリから自分で作ったファイルシステムが呼び出されるのを見ると嬉しいですね。
まだ個々のファイルを個別に消したり更新することはできませんが、全消去と新規作成はできるので、「運用でカバー」できる範囲になりました。
detectと打つと、JTAGチェーンを操作して、つながっているデバイスを発見してくれるようになりました。
ここまでくれば、JTAGライブラリは完全に動いていると考えてよいでしょう。
あとはいろんなコマンドを実装(移植)していくだけですね。
間に合うようであれば、IPAXで展示するかもしれません。
金曜日に評価ボードが届いてから、mallocで少しハマッたけど、土日の2日間でゼロからここまでできたのは自分でも驚きです。
このシステムを載せる基板をP板に特急で発注していたのですがコネクタの向きと位置を間違えたため、基板設計はやりなおしです。とほほ。
| 固定リンク
コメント