本日、開発中の新製品「AD360 データロガー」に火入れを行いました。
※18bitのADを20ch持つのでAD360という名前にしました
まず、現在の写真を掲載します。
表面には、SMAのコネクタやイーサのコネクタを取り付けました。

裏面も、足りなかった抵抗やコンデンサを取り付けました。

最初の電源ONのとき、スイッチング電源の1.2Vと3.3Vの電圧設定が逆になっていて、Spartan-3Aのコア電圧に3.3Vをかけてしまいました。電源電流もたくさん流れました、が大丈夫でした。結構丈夫なものですね・・
±2.5VをつくるLDOの選定を間違えていて、±2.5V出力のところに±3Vくらい出ていたりしました。
100Ωの半固定抵抗を発注すべきところを100kΩの半固定抵抗を50個発注してしまっていて、しかも1個600円くらいするので、結構ショック。
サイド取付型のSMAコネクタの寸法を間違えて、部品やネジ穴と干渉してしまった。
イーサネットPHYの水晶が発振しない(たぶん裏面のGNDパッドがちゃんとついていない)
Spartan-3AがなぜかSPI ROMを認識しない。
RX63Nにつないだ時計用水晶が発振しない。
MEMS発振器の取り付け方向が逆で、逆電圧をかけてしまった・・・
SDRAMの容量が異なっていたため、認識されるエリアが狭い
とりあえず、今日のところ出た問題はこのくらいです。①②⑧⑨は解決しました。























ではかいつまんで説明していきましょう。
まず、今回はRX63Nマイコンを使っているので、RXduinoというライブラリを使いました。RXduinoライブラリを使うとRXマイコンのプログラムを簡単に作れます。今回は、RXduinoの持つ、USB-UART、SPI、SDカード、SDRAM、RTCといった機能を使おうと思います。
まずはUSBで通信しないとはじまりません。RXduinoに、このAD360ボードのボード定義を追加して、サンプルプログラムのnahimon(なひたふモニタ)をコンパイルして書き込みます。
USBでつないでTeraTermで仮想COMポートとしてオープンできるようになりました。

こんな画面が出て、メモリのダンプができます。SDRAMは0x08000000番地から見えるようです。

SDRAMのテスト用に乱数を読み書きするプログラムを作りました。XorShiftとうアルゴリズムで作った疑似乱数をSDRAMに書いて、読んで、比較するという単純なものです。16MByteを検査するのに約3秒でした。rand()関数よりずっと速いです。

実は、SDRAMを使えるようにするには、結構苦労しました。RX63Nのピンはいろいろな機能で複雑にマトリクスされているのですが、SDRAMとして使うには
MPC.PFCSE.BYTE = 0x01; // CS0を許可
MPC.PFCSS0.BYTE = 0x01; // P60をCS0に
MPC.PFAOE0.BYTE = 0x3f; // A8~A13出力
MPC.PFBCR0.BYTE = 0x11; // PA0~PA7をアドレスバス、PE0~PE7をI/Oポート
MPC.PFBCR1.BYTE = 0xd4; // P54をALE端子 SDRAM端子許可 DQM1許可 SDCLK許可
という設定が必要でした。RX62Nと比べて変わっています。
また、非常に許しがたい仕様なのですが、RXマイコンはSDRAMのBAが、ADDRの上の方のビットとして出てきます。
- 例えば、A13までを通常のアドレスピンとして使ったら、BA0はA14、BA1はA15から出てきます。
- A12までを通常のアドレスピンとして使ったら、BA0はA13、BA1はA14から出てきます。
SDRAMのアドレスピンにあるNCのところにダミーのアドレス線をつないでおくことができないのです。わかりやすく言えば、「将来の拡張に備えて大きい容量のSDRAMを乗せられるような基板設計にしておくことができない」のです。

上の図でいえば、A12の端子はCPUのA13につながっている(16bit接続だから)のですが、ここは今回使用したSDRAMではNCなのですが、RXマイコンのSDRAMコントローラはNCのピンをスキップして次のA14からBAに使うという融通がききません。
※まあ、それでもジャンパを飛ばして、なんとか全16MByteを認識できるようにしました
それから、FPGAのほうも順調に進んでいます。コアに3.3VをかけてしまったSpartan-3Aですが、ちゃんとバウンダリスキャンで端子が見えました。書き込みもできます。

しかし、コンフィグ用のSDRAMが見えないのが困っています。
最近のコメント