色々問題が残っていますが、USBメモリに対してBULK-IN READ(28h)出来るようになりました
問題
(1)UFIで良いの?
ドキュメントが少なくUFI(bInterfaceSubClass=0x4)のREAD(10)コマンドを使用しました。UFIはFloppy Disk用のインタフェースみたいです
本来はbInterfaceSubClass=0x6 (SCSI transparent command set)を使用すべきですがドキュメントが見つかりません
(2)READ(12)の動かし方が分からない
READ(10)で小容量のUSBメモリ(512MB)にアクセスしています。大容量の場合、READ(12)を使うのだと思うのですが、0A-24エラーになります
つまらない他人のデバッグログですいません。やってる本人は記録として価値があると錯覚しているのです・・。
BULK IN[READ(10)]、に続いて、BULK OUT[WRITE(10)]が出来るようになりました
FatFsとの連動の日が近づいていますが、そうなるとだんだん興味がなくなるような変な気分になります。未完成が良いのかも
Cのstructとunionは好きになれない。変数を参照するのに修飾子が多くなり、恰好悪すぎ
FatFsとの連動の日が近づいていますが、そうなるとだんだん興味がなくなるような変な気分になります。未完成が良いのかも
Cのstructとunionは好きになれない。変数を参照するのに修飾子が多くなり、恰好悪すぎ
SH-2Aのタイマーは好きになれない。なぜならCMTが16bitしかないから。贅沢かもしれないけど64bit欲しい。元々、非力なマイコンでそんなに頻繁に割込み掛けてどうするのだろう? RTCも持ってるけど、16ms程度の分解能しかない。関係ないけど水晶の精度も悪く時計としては使用できない
サンプルプログラムもLEDを点滅させるような使い方しか紹介されていない。だから、使ってなかった
何でタイマーを使う気になったかと言うと、内部トレースを出すため。内部トレースの出力はメインループの中で行っている。(本来は暇な時)
勿論、正常な場合は問題ない。ところが、偶にstageを進む時、PIPEのステータスがDONEになるのを無限ループで待つような場合がある。バグがあると永久にメインループには戻らず、内部トレースの最新部分が出力されない。つまり、一番大事な時に一番大事な部分のトレースが出力されない場合がある。
(やむを得ずRESETしてTinyMonのDLコマンドで内部トレース領域をダンプしていたが、これは結構面倒くさいし、見辛い)
そこで、タイマー割込みルーチンから溜まっている内部トレースを出力しようと考えた
CMTタイマーについては付属基板が付いていた6月号に解説がある。6月号を参考にソースを追加したが動かない・・
intprg.c
調べてみると、intprg.cに修正が必要ようだ
きっと、方言だと思うけど、INT_CMT0_CMI0[0あり]とINT_CMT_CMI0(0なし)があるのでますます混乱する。
サンプルプログラムもLEDを点滅させるような使い方しか紹介されていない。だから、使ってなかった
何でタイマーを使う気になったかと言うと、内部トレースを出すため。内部トレースの出力はメインループの中で行っている。(本来は暇な時)
勿論、正常な場合は問題ない。ところが、偶にstageを進む時、PIPEのステータスがDONEになるのを無限ループで待つような場合がある。バグがあると永久にメインループには戻らず、内部トレースの最新部分が出力されない。つまり、一番大事な時に一番大事な部分のトレースが出力されない場合がある。
(やむを得ずRESETしてTinyMonのDLコマンドで内部トレース領域をダンプしていたが、これは結構面倒くさいし、見辛い)
そこで、タイマー割込みルーチンから溜まっている内部トレースを出力しようと考えた
CMTタイマーについては付属基板が付いていた6月号に解説がある。6月号を参考にソースを追加したが動かない・・
intprg.c
調べてみると、intprg.cに修正が必要ようだ
きっと、方言だと思うけど、INT_CMT0_CMI0[0あり]とINT_CMT_CMI0(0なし)があるのでますます混乱する。
なんとFatFsはSDカード対応のSH7262用のサンプルPJを提供しています
適当にソースをマージしてコンパイルエラーが出た行をコメントアウトしました。当然動きません
最初にツマイズイタのがシリアルのIO
FatFsは独自に書式付きIO関数群を持って居ます。エレガント過ぎて、理解出来ず・・・。しばらく遊ばれそうです
「この道はいつか来た道・・・」
そうそう、SDカードで昔、お世話になりました。あの頃はドライバまで提供されていた(作者はFATだけでなくSDカード、電子工作、アニメにも精通していらっしゃる。どういう人?)のですが、今回ドライバ部分は使えないので接続が大変(それ故楽しめそう)です
ソースをマージして、フラグが立ったところをコメントアウトしただけでは動かないのは分かっています。でも、それなりに見直して#DEFINEのオプションを色々変えてみたり、USBメモリをフォーマットしなおしたり、試行錯誤しました
USBメモリのデータの内容はDDコマンドでダンプ出来るので、当面の目標はFL(ディレクトリのメンバ表示)コマンドです
昨日あたりから、少し動き出したのですが、表示終了まで10分ぐらい掛かります。10分ぐらいダンマリ、待っていると突然一気に表示される。どこで時間食ってるのだろう・・、正直FatFsのソースは何をやっているのかサッパリ分かりません。洗練され過ぎていて(コメントも少ないのですが)訳が分からず、でもバカはバカ(ポチのことです)なりに時間を掛けて、それこそ全部のサブルーチン呼出しの前後にデバッグメッセージを入れました
そしたら、FatFsとのAPIルーチン(disk_status()とか)にわざわざ仕込んだprintf()が悪さをしていることが分かりました。printf()をSerial_Puts()に置き換えたらスイスイ動きますた。本当の原因はよく分かりません。ネストが深すぎるのでしょうか?
明日(2011.3.25)はRX62Nマイコン付属のInterface誌の発売の日です。SH-2Aに遊ばれ始めて、かれこれ1年経ちます
RX62NマイコンはDRAMとも接続できるみたいで、相当遊べそうです
私はやり残したことが色々あるので、もう暫くSH-2Aに遊ばれます
だって、最近やっとUSB関係の用語には慣れてきましたが、プロトコルは全く理解できていませんから、
USBが好きになった訳ではないです!!
タグ
コメントをかく