&size(24){&color(darkgreen){''ks5k-linux''};}; #navi(CVS) ~''CONTENTS'' #contents ---- ~''REFERENCES'' -[[CVS View>http://wiki.wivicom.co.jp/cgi-bin/viewcvs.cgi/ks5k-linux/]] ---- ** KS59xx device on Wireless Projector Adapter [#s112d488] *** 第3次接続試験 @WiViCom (2004/12/27〜2005/1/6) [#c9f68cb5] -[[このページ>http://www.renesas.com/jpn/products/mpumcu/32bit/sh/faq/cache_sh4/cache_a_3.html]]をみて、もしやdriverのPCIDMAのやり方がまずい?と思い始める。 --これが原因だった…。 --SH4プログラミングマニュアルより~ ~4.3.8 キャッシュと外部メモリとのコヒーレンシ~ キャッシュと外部メモリとのコヒーレンシはソフトウェアで保証してください。SH-4 ではキャッ~ シュを操作する命令として新たに次の4命令をサポートしています。各命令の詳細は「第9 章 各~ 命令の説明」を参照してください。~ |~命令|~CODE|~機能| |インバリデイト命令|OCBI @Rn|キャッシュの無効化(書き戻しなし)| |パージ命令|OCBP @Rn |キャッシュの無効化(書き戻しあり)| |ライトバック命令|OCBWB @Rn|キャッシュの書き戻し| |アロケート命令|MOVCA.L R0,@Rn |キャッシュの確保| --Linux ~LinuxでDMAをするときは、データのバッファをバス上にマッピングする必要がある。マッピングすると、カーネルは、バッファ中の全てのデータが実際にメモリに書き込まれることを保証しなければならない。~ SHなLinuxには、kernel configuration として、CONFIG_SH_PCIDMA_NONCOHERENT というオプションがある。これを指定すると、PCI-DMAマッピングの関数を呼び出すとキャッシュの操作をして、メモリに書き込むようにする。らしい… :) ~ なんでDOS/Vは動いていたんだ?謎… --とりあえず… ~とりあえずDMAの処理部分に暫定的にDMAmappingのコードを入れてみた。そーしたらWPAでKS5901が動作した。!! 一応通信できてる。 :) ~ でも、もうちょっと検証がいるね。でもよかった…。 --良かった、良かった。流石です。(金子) -動作検証して、KSCに提出。ひとまず完了(2005/1/6) *** 第2次接続試験 @WiViCom (2004/12/16〜2004/12/24) [#db0a9162] -方針 ~とりあえず、赤ボードで、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 setup ~RTS7751R2DのPCI slotは3.3V動作みたい。 一応PCIをDebugするので、NFSは使わずに、CFからBootすることにする。 (もう一つEtherが付いてるがこれは動くのか?こいつはPCIじゃないみたい…) [[RTS7751R2DHandlingManual>http://tree.celinuxforum.org/CelfPubWiki/RTS7751R2DHandlingManual]]ページには、なんかCFからのBootは適当に書いてあるな〜。 なかなか、CFからのBootに成功しない。IDEドライバがないとか言ってやがる。rootfsがマウントできない。 kernelのconfigurationをいろいろいじって、やっとBootするようになった。login出ないけどこれでいいのか? - でます。[[RTS7751R2D]] --ごめんなさい。↑ページちゃんと読んでませんでした…。rootfsの作り方がちょっとまずかったかな?適当にやったんで…。でも、まー動いてるしいいか? poweroffすると、このボード勝手に電源が落ちる。なんかちょっとすごい。 -KS59xx (違いに注意!!) |~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 :性能はいまいち?| -test tool のコンパイル --ks5kドライバ ~なんか結構 warning が出てるけど通ったし大丈夫でしょ。 --memory_dump application & driver ~上に同じ。 --hostsend application ~上に同じ。 -KS5930接続実験 ~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を取ってきている…。しかしなんか途中でこけてますから!残念!!。~ -KS5910接続実験 ~CardBus Card も動かしてみた。PCI-CardBus BrigeはTIのPCI1520。WPA Board に乗ってる奴の2slot版。 ~こちらも、PCI Cardのときとほぼ振る舞いは、一緒のようである。原因がブリッジにあるとは考えにくい。 -考察 ~なんかSHが原因な感じですね。レジスタの設定とか変えたりしたら動くのか?~ もしかして、プログラムで読み書きするわけではないので、キャッシュが悪さしてるとか…。じゃドライバ?~ でもPCだと動くしな〜??? -CACHE?? ~キャッシュかと思って、ドライバの受信バッファのアドレスを直接キャッシュ無効のアドレスからみてみた。 ダンプのデータと同じだった。キャッシュのせいでは、ないみたい。~ となると、やはり、メモリに書き込まれていないので、SHのPCIC?? -SH4-PCIC ~SH4のPCICの設定を少しいじってみたが、状態は相変わらず… -SE7751RでKS5930を動作させてみた ~やっぱ同じだね。 *** 第1次接続試験 @KSC (2004/12/13〜12/15) [#x02ef7d2] -現状 --register access や firm ware の upload は正常にできている。 --MACとHOST間の通信が正常にできない。MAC->HOST HOST->MAC どちらの方向も、正常に通信できるときもあれば、 通信できないこともある。症状としては、データが4Byte単位で書き込まれていないことがある。 --PCI-CardBus Brige と KS5901(SDK Board)間でのPCIトランザクションをロジックアナライザで計測したところ、計測した部分でのPCIトランザクションは正常に行われている。 --device driver を load した直後の通信は、HOST->MACの通信(MAC ADDRESS の取得のリクエスト)だが、この通信は毎回失敗する。 --データが正常に受け渡せないので、MAC-HOST間の通信が、どちらもIDLE状態となっている。 --下記の方法で、失敗した通信から、再開すると、正常な通信が行われた場合、MAC-HOST間のデータのやり取りが再開するが、データが誤っていると、そこでまた止まる。 -実験方法 --HOST->MAC ~hostsend プログラムを使用して、HOST->MACの転送を行う。このプログラムは、 ドライバのIOCTLの機能の一つである、DATA_SENDを使用している。~ hostsend interface datafile datafile は、送信するデータのバイナリデータ。 --MAC->HOST ~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の動作確認をする。 *** MAC-HOST 間の通信方式 [#ga363164] -レジスタアクセス --PCI共有メモリ空間アクセス --HOST側がイニシエータとなり、ターゲットであるデバイスにアクセスする。 --メモリ領域のREAD or WRITE。 -ファームウェアアップロード --レジスタアクセスと同様に、PCI共有メモリ空間にアクセスする --HOST側がイニシエータとなり、ターゲットであるデバイスにアクセスする。 --メモリ領域のREAD or WRITE --ファームウェアの書き込みでは、書き込んだ領域をREADし、書き込んだデータと一致しているか確認している -データの受け渡し (64Byte単位で行われる) --HOST->MAC +++ステータスがIDLE状態であることを確認 +++レジスタにデータのバッファのアドレス、及びデータサイズをセットし、転送開始する +++デバイスがイニシエータとなり、ターゲットのホストのメモリをREADする +++転送が終了したらMACからHOSTに対して割り込みが入る? --MAC->HOST +++MACから割り込みが入る。 +++データのバッファのアドレス等をレジスタにセットし、転送を開始する +++デバイスがイニシエータとなり、ターゲットのホストのメモリにWRITEする +++転送が終了後MACから割り込みが入る。