SSブログ

beagleboard を触ろう - xloader 概要 [組み込みソフト]

これから OMAP3530 を少しずつ触ってみたいと思います。
x-loader に手を入れて、各種デバイスにアクセスしてみようと思います。

その前に・・・

x-loader が何をやっているか、ざっと眺めておきます。


MMU, キャッシュ初期設定
命令キャッシュ有効、データキャッシュ無効、分岐予測有効、MMU 無効という設定にしています。
ARM って MMU を有効にしないとキャッシュが効かないと思うんですが、それってデータキャッシュだけですかね?
命令キャッシュは MMU 無効でも効くのかなあ?
ちょっと謎です。


プロテクション解除
OMAP3530 の内部バスは、Sonics という会社の、Open Core Protocol (OCP) ベースの SonicsMX なるものが使われているようです。
OCP については、↓が非常に参考になります。

http://www.kumikomi.net/archives/2007/05/30ocp0.php

SonicsMX の概要についてはこちら↓

http://www.sonicsinc.com/uploads/pdfs/SMX_121007J.pdf

SoncisMX は、バスに繋がったデバイス間でアクセス制御をすることができるらしく、使いようによってはセキュリティーを高めることができる、ということですかね。
x-loader では、すべてのプロテクションを解除して、すべてのデバイスをアクセス OK にしています。
x-loader に制御が渡ってきた時点でプロテクション設定がされているとは思えませんが、念のためやっておくということなんですかね。


Pad multiplexing 設定
OMAP3530 チップからは、外部に信号線が百数十本出ていますが、これが内部でどのデバイスに繋がっているのか、あらかじめ決まっているわけではありません。
S/W で、コンフィギュレーションが可能になっています。

ただ、なんでもかんでも自由に設定できるわけではありません。
例えば、DSS_D0 という信号には、DSS_DATA0, DSI_DX0, UART1_CTS, DSSVENC656_DATA0, GPIO_70 のどれかを割り当てることができます。
ここでいう DSS_DATA0 とか、DSI_DX0 とか、UART1_CTS とかは、内部デバイスから出ている信号線です。

pad_multiplexing.png

どのように設定するかは、ボードに何が搭載されているかに依存します。
beagleboard には SDRC, NAND flash, USB コネクタ、S-Video コネクタ、オーディオコネクタ等々載っていますが、これらを正しく機能させるには pad multiplexing を適切に行う必要があります。
上の例の DSS_D0 の場合、DSS_D0 信号線は DVI-D インターフェースに結線されていて、DSS モジュールの DSS_DATA0 によって制御するので、それらをちゃんと結びつけるように設定する必要があるわけです。

ただ、x-loader は beagleboard 上のすべてのデバイスの pad multiplexing 設定をしているわけではありません。
SDRC, NAND flash, SD カード、UART, I2C, JTAG, その他 GPIO の設定だけです。
自分の使うデバイスだけですね。

割り当てを変更する機能の他に、信号線を (CPU から見て) 入出力両方とも可能にするか、出力のみ可能にするかの設定機能、各信号線をプルアップ/プルダウンするかどうか設定する機能、プルアップ/プルダウンするならば、プルアップにするかプルダウンにするか設定する機能もあります。
プルアップ/プルダウンは、プルアップ抵抗とかプルダウン抵抗とか使って、電圧不定値を避ける仕組みです。


クロック設定
OMAP3530 は各内部デバイスに対して、クロックを供給する/しないをコンフィギュレーションすることができます。
使用する内部デバイスに対しては、クロックを供給しないといけないので、それをやっています。
というか、使用しない内部デバイスも含めてほとんどすべての内部デバイスに対してクロック供給するような設定をしています。
クロックゲーティング(デバイスへのクロック供給停止)を行うと、省エネに効いてきますが、x-loader は次段のイメージをロードしたらすぐに終わりなので、省エネもくそもないですもんね。
なので、適当なんだと思います。
また、各デバイスに供給するクロック周波数を、CPU は 500MHz, DSP は 360MHz, バスクロックは 166/83 MHz となるように設定しています。
datasheet を見てみると、CPU クロックは 720MHz, DSP クロックは 520MHz, バスクロックは 166/83 MHz が最大値みたいなので、CPU クロックと DSP クロックは余裕がありますね。
これも、次段が適切に設定することを期待して、ある程度適当にやっているのかもしれません。


SDRAM コントローラ初期化
SDRAM コントローラリセット、CAS Latency 設定、AC タイミング設定、リフレッシュ設定、SDRAM に対する初期化シーケンスの発行等々をやっています。
SDRAM なのに AC タイミングを設定してやらないといけないんですねえ。
ここで SDRAM コントローラを初期化することによって、初めて SDRAM にアクセスできるようになります。

設定するパラメータは、搭載されている DDR-SDRAM に依存するものであり、適切な値を設定するには DDR-SDRAM の datasheet が必要です。
beagleboard の System Reference Manual を見てみると、DDR-SDRAM は POP memory という実装方法で、OMAP3530 の上に NAND flash と一緒に搭載されています。
この POP memory は Micron 製であり、MT29C2G48MAKLCJI-6 という型番のようです。また、その中の SDRAM の型番は、MT46H32M32LFJG-6 IT のようです。

pop_memory.png


UART 初期化
UART3 を初期化してボーレート 115200bps, 8N1 に設定します。
x-loader のブート時に、シリアルコンソールに "Texas Instruments X-Loader 1.4.4ss (Jul 27 2011 - 22:17:10)" のようなメッセージが出ますが、UART 初期化を行った直後にこのメッセージを出しています。
Windows 側のシリアルコンソールを 115200bps, 8N1 にしなければいけないのは、ここでの設定に合わせなければいけないからですね。


NAND 初期化
NAND flash ROM は、General Purpose Memory Controller (GPMC) というモジュールの先に繋がっています。
ここでは、NAND flash を初期化しているわけではなくて、GPMC の初期化を行っています。
NAND flash は、SDRAM のような初期化シーケンスは必要ないんですね。
GPMC の初期化をするだけで使えちゃいます。
設定パラメータは、搭載されている NAND flash に依存します。
しかし、こちらも DDR-SDRAM 同様、型番不明ですかねー。
System Reference Manual には、SDRAM ともども Micron 製だとは書いてあります。


I2C 初期化
I2C1 をクロック 12MHz で初期化します。
なぜ I2C の初期化をするかというと、SD カードに電力を供給するためです。
SD カードは電源モジュール TPS65950 から電力を供給されています。
TPS65950 は、I2C1 に繋がっているので、TPS65950 制御のために I2C1 を初期化しておくんですね。


SD カード初期化
SD カードコントローラおよび SD カードに対する初期化を行っています。
SD カードに 3.0V を供給するための設定、SD カードコントローラに対する初期化シーケンスの実行、SD カードか MMC かの判別、SD カードの初期化の実行、アドレス設定、クロック設定、読み書きブロック長設定、SD カードの容量取得を行っています。
SD カードは、MMC のアッパーコンパチで、S/W 的には MMC と全く同じように扱えるらしいですが、ここではちゃんと扱いを分けてますね。
データ転送幅は、SD カードは最大 4ビット、MMC は最大 8ビットいけるはずですが、ここではどちらのケースでも 1ビットに設定しています。
4ビットなり 8ビットなりに設定すれば、それだけ速くなるはずです。


u-boot のロード
SD カードからのロードをまず試みます。
それが失敗したら(=カードが刺さってなかった、u-boot.bin が見つからなかった)、NAND からのロードを試みます。
ロードアドレスは 0x80008000 です。
なぜ 0x80008000 かというと、u-boot が 0x80008000 が開始アドレスになるようにビルドされているからです。
ちなみに、SDRAM は 0x80000000 - 0x90000000 にマップされているので、0x80008000 は SDRAM の最初の方のアドレスです。
ロードが完了したら、0x80008000 にジャンプして、u-boot 実行です。


・・・

というのが、x-loader の概要でした。

nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

Lesprealm

Keflex And 3rd Trimester http://abuycialisb.com - Cialis Indications For Zithromax <a href=http://abuycialisb.com>п»їcialis</a> What Is Cephalexin Used For
by Lesprealm (2020-02-08 10:33) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。