name | address | value | description |
---|---|---|---|
BCR1 | 0xFF800000 | 0x00200008 | Area 1 ByteControl Mode, Area 3 SDRAM |
BCR2 | 0xFF800004 | 0x2DFC | Area 1:32bit Area 2:32bit Area 3:32bit Area 4:8bit Area 5:32bit Area 6:16bit |
BCR3 | 0xFF800050 | 0x0001 | SDRAM Burst length setting 4 |
BCR4 | 0xFE0A00F0 | 0x00000000 | Ansync settings |
WCR1 | 0xFF800008 | 0x02770731 | Device-inter-cycle: 2-wait A6:2 A5:15 A4:15 A3:0 A2:15 A1:1 A0:1 |
WCR2 | 0xFF80000C | 0x7FFE4EE7 | A6:15 A6B:7 A5:15 A5B:7 A4:15 A3:2 A2:1 A1:15 A0:9 A0B:7 |
WCR3 | 0xFF800010 | 0x01777711 | A6: 0-1 A5: 1-3 A4: 1-3 A3: 1-3 A2: 1-3 A1: 1-3 A0: 0-1 |
RTCNT | 0xFF800020 | 0xA500 | RTCNT Write Code A5h Data 00h |
RTCOR | 0xFF800024 | 0xA50D | Write code A5, data 0D (~15us)? |
RTCSR | 0xFF80001C | 0xA518 | RTCSR Write Code A5h Data 18h |
SDMR2 | 0xFF940088 | any | SDMR2 address on 32-bit bus Area3 CAS2 |
MCR | 0xFF800014 | 0x101101B4 | RASD:'0' MRSET:'0' TRC=6 TCAS=1 TPC=3 RCD=2 TRWL=0 TRAS=4+TRC SZ=32 AMXEXT:'0' AMX=6 RFSH:'0' RMODE:'0' |
0x501101B4 | RASD:'0' MRSET:'1' TRC=6 TCAS=1 TPC=3 RCD=2 TRWL=0 TRAS=4+TRC SZ=32 AMXEXT:'0' AMX=6 RFSH:'0' RMODE:'0' | ||
RFCR | 0xFF800028 | 0xA400 | RFCR Write Code A4h Data 00h |
Symbol | Parameter | CL | Min. | Max. | Units |
---|---|---|---|---|---|
t_CK3 | CLK Cycle time | CL=3 | 7.5 | ns | |
t_CK2 | CL=2 | 10 | ns | ||
t_AC3 | CLK to valid output delay | CL=3 | 5.4 | ns | |
t_AC2 | CL=2 | 6 | ns | ||
t_CH | CLK high pulse time | 2.5 | ns | ||
t_CL | CLK low pulse time | 2.5 | ns | ||
t_CKE | CKE setup time | 1.5 | ns | ||
t_CKH | CKE hold time | 0.8 | ns | ||
t_AS | Address setup time | 1.5 | ns | ||
t_AH | Address hold time | 0.8 | ns | ||
t_CMS | Comamnd setup time | 1.5 | ns | ||
t_CMH | Command hold time | 0.8 | ns | ||
t_DS | Data input setup time | 1.5 | ns | ||
t_DH | Data input hold time | 0.8 | ns | ||
t_OH3 | Output data hold time | CL=3 | 2.7 | ns | |
t_OH2 | CL=2 | 3 | ns | ||
t_LZ | CLK to output in low-Z | 0 | ns | ||
t_HZ | CLK to output in H-Z | 2.7 | 5.4 | ns | |
t_RC | ROW cycle time | 67.5 | ns | ||
t_RAS | ROW active time | 45 | 100K | ns | |
t_RCD | RAS to CAS deley | 20 | ns | ||
t_RP | Row precharge time | 20 | ns | ||
t_RRD | Row active to active deley | 15 | ns | ||
t_T | Transition time | 1 | 10 | ns | |
t_RSC | Mode reg. set cycle | 15 | ns | ||
t_PDE | Power down exit setup time | 7.5 | ns | ||
t_SRX | Self refresh exit time | 7.5 | ns | ||
t_DPL | Data in to Precharge | 15 | ns | ||
t_DAL | Data in to Active/Refresh Deley time | 35 | ns | ||
t_REF | Refresh Time | 64 | ms |
4.3.8 キャッシュと外部メモリとのコヒーレンシ
キャッシュと外部メモリとのコヒーレンシはソフトウェアで保証してください。SH-4 ではキャッ
シュを操作する命令として新たに次の4命令をサポートしています。各命令の詳細は「第9 章 各
命令の説明」を参照してください。
命令 | CODE | 機能 |
---|---|---|
インバリデイト命令 | OCBI @Rn | キャッシュの無効化(書き戻しなし) |
パージ命令 | OCBP @Rn | キャッシュの無効化(書き戻しあり) |
ライトバック命令 | OCBWB @Rn | キャッシュの書き戻し |
アロケート命令 | MOVCA.L R0,@Rn | キャッシュの確保 |
LinuxでDMAをするときは、データのバッファをバス上にマッピングする必要がある。マッピングすると、カーネルは、バッファ中の全てのデータが実際にメモリに書き込まれることを保証しなければならない。
SHなLinuxには、kernel configuretion として、CONFIG_SH_PCIDMA_NONCOHERENT というオプションがある。これを指定すると、PCI-DMAマッピングの関数を呼び出すとキャッシュの操作をして、メモリに書き込むようにする。らしい…
なんでDOS/Vは動いていたんだ?謎…
とりあえずDMAの処理部分に暫定的にDMAmappingのコードを入れてみた。そーしたらWPAでKS5901が動作した。!! 一応通信できてる。
でも、もうちょっと検証がいるね。でもよかった…。
とりあえず、赤ボードで、KS5930、KS5901、KS5910を動作させてみる。
DELL INSPIRON 8000 に debian 3.1 Sarge (testing)をinstall。
しかも、kernel 2.6.8-1 (2.4系は、何故かインストールに失敗した )
tool-chains は、CELINUXのサイトのSH用RPMをalienで変換し、install。
ライブラリは、変換できなかったので、無理やりいれた。
celinux-040503 release をもってきてコンパイル。一応コンパイルできるみたいなので、
とりあえず開発環境は、これでよしとする。
解像度1400x1050のSXGA+でX動作します。いや〜画面でかいといいね。
RTS7751R2DのPCI slotは3.3V動作みたい。 一応PCIをDebugするので、NFSは使わずに、CFからBootすることにする。 (もう一つEtherが付いてるがこれは動くのか?こいつはPCIじゃないみたい…) RTS7751R2DHandlingManualページには、なんかCFからのBootは適当に書いてあるな〜。 なかなか、CFからのBootに成功しない。IDEドライバがないとか言ってやがる。rootfsがマウントできない。 kernelのconfigurationをいろいろいじって、やっとBootするようになった。login出ないけどこれでいいのか?
poweroffすると、このボード勝手に電源が落ちる。なんかちょっとすごい。
name | vender_id | device_id | firmware | linux_driver | description |
---|---|---|---|---|---|
KS5901 | 0x18BE | 0x5910 | KS5910-5920 1.07 [Aug 25 2004 12:01:37] | beta 0.2 | SDK Board :なんかRFがタコらしい |
KS5910 | 0x18BE | 0x5910 | KS5910-5920 1.10 RSSI [Dec 01 2004 20:23:52] | beta 0.2 | 11a Reference Card :antenna をケースで覆うと、とたんに… |
KS5930 | 0x18BE | 0x5910 | KS5910-5920 1.10 RSSI [Dec 01 2004 20:23:52] | beta 0.2 | PCI Board :性能はいまいち? |
なんか結構 warning が出てるけど通ったし大丈夫でしょ。
上に同じ。
上に同じ。
KS5930を3.3V動作に設定し、PCI slot に挿入。PCIのconfig registerは見えてる。/proc/pciで確認。
test tool を install。 ks5k_cb.o loadする。なんか動いていない模様…
ん!iwconfig やioctlがきかない。そーいえばkernelでwireless device のサポートをいれていなかった…。
kernelをrebuild後、今一度気を取り直して、ドライバをロード。
お!MACADDRESを取ってきている…。しかしなんか途中でこけてますから!残念!!。
CardBus Card も動かしてみた。PCI-CardBus BrigeはTIのPCI1520。WPA Board に乗ってる奴の2slot版。
こちらも、PCI Cardのときとほぼ振る舞いは、一緒のようである。原因がブリッジにあるとは考えにくい。
なんかSHが原因な感じですね。レジスタの設定とか変えたりしたら動くのか?
もしかして、プログラムで読み書きするわけではないので、キャッシュが悪さしてるとか…。じゃドライバ?
でもPCだと動くしな〜???
キャッシュかと思って、ドライバの受信バッファのアドレスを直接キャッシュ無効のアドレスからみてみた。
ダンプのデータと同じだった。キャッシュのせいでは、ないみたい。
となると、やはり、メモリに書き込まれていないので、SHのPCIC??
SH4のPCICの設定を少しいじってみたが、状態は相変わらず…
やっぱ同じだね。
hostsend プログラムを使用して、HOST->MACの転送を行う。このプログラムは、
ドライバのIOCTLの機能の一つである、DATA_SENDを使用している。
hostsend interface datafiledatafile は、送信するデータのバイナリデータ。
Debug用のコマンドである、"zzs"コマンドを使用。 通信データのLOGは、"hostt"または、"hosttx"コマンドで参照可能。 host側で、MACからの受信データを表示するように、ドライバを修正。
上記のことより、デバイスがイニシエータになっているときに、問題がある。 PCI-CardBus Brige と KS5901(SDK Board)間でのPCIトランザクションは正常に行われているので、 WPA Board 側に問題があると思われる。 原因と考えられるのは、PCI-CardBus Brige(TI PCI1510) または、SH7751R内臓のPCI-Controller が考えられる。あと、その他ボード上の他の原因かもしれない。 KSCより、KS5930 PCI Card を借りた。(現在2枚しかない、貴重品らしい) 原因が、PCI-CardBus Brige(TI PCI1510)にあるのか、CPUにあるのか、切り分ける為、 RTS7751R2Dのボードで、KS5930、KS5901、KS5910の動作確認をする。