H8,SH,マイコン,ぼやき川柳,ダウンロード

USB Mass Storage Class

いきなり細かいところからですいません。本来はパケットだの、フレームだのSETUPがどうのと、始めるのでしょうが・・・
データトレースを見てデバッグ中の参照頻度の多い順です。エンディアンが(どっちか忘れましたが)通常と逆なので注意が必要です

 

CBW Command Block Wrapper


フィールド説 明
dCBWSignatureCBWのEyeキャッチ
ASCIIコードで"USBC"、 なかなかお茶目ですよね   
dCBWTagコマンドブロックタグ。CBWとCSWを関連付けるための任意の値らしい
並行動作出来るってことですよね  
dCBWDataTransferLengthデータトランスポートの推定データ長(バイト数)。
ここが0 の場合データトランスポートは存在しません 
bmCBWFlagsビット7 が0 の場合、データトランスポートはバルクアウト転送で行われ、   
1 の場合、バルクイン転送で行われます。ビット6〜0 は0 固定
bCBWLUN論理ユニット番号(Logical Unit Number)
 
bCBWCBLength次のCBWCB フィールドの有効バイト数
 
CBWCB実行されるコマンドブロック(Read、Writeなど)を格納するフィールド
SCSIコマンドに準拠しているみたい  
 
ふぅーっ。。。
CBWだけで疲れました。表組みではなくExcellで説明作れば楽なのですが、見栄えが・・
本当はUSBの仕様書を見るべきなのでしょうが、ポチは日本語しか分かりません。ターゲットとして書かれていますが、この辺のルネサスのドキュメントは役に立ちます。ポチへの影響大きく(他に適当なドキュメントが見当たらないので)、UFIだと思い込んでいる大きな要因です
 
 

CSW Command Status Wrapper


フィールド説 明
dCSWSignatureCSWのEyeキャッチ
ASCIIコードで"USBS"   
dCSWTagCBWとCSWを結びつけるためのID。関連するCBWのdCBWTagが返却されると想定されるが、
今の処使っていない(とりあえず今は0固定)
dCSWDataResidueCBW のdCBWDataTransferLength 値と実際にファンクションが処理したデータ量の相違を報告します
 
bCSWStatusコマンドの実行結果。コマンドが正常に完了した場合、ターゲットは0x00を返却します。
ゼロ以外の値は次の通りとし、コマンド実行時の不具合を示します
コマンドフェイルは0x01、フェーズエラーは0x02。
 
 

シーケンス

 


パクリました(オリジナルは仕様書にあったような)。パクっておいて言うことではないですが、絵にする程では無いですよね・・。
要はCBWとCSWでバルク転送をサンドウィッチってことですね
CBWの後半には下記のSCSIコマンドが続いており、それでBulk INかBulk OUTが決まる。送信方向は
CBW : HOST → Target
CSW : Target → HOST

ここまで簡単そうなのですが、CSWが却って来なかったりで結構苦労します
 
 

Universal Serial Bus Mass Storage Specification For Bootability


信用しないでください。そもそも見ているドキュメントを間違っているような・・・。Bootabilityが怪しいです。WRITE(10)もない
 
3.1 INQUIRY Command
 
3.2 READ(10) Command
 
3.3 REQUEST SENSE Command
 
     Additional Sense Code
  
3.4 TEST UNIT READY Command
 
4.1 MODE SENSE(10) Command
 
4.2 READ CAPACITY

 

3 Device Required Command Support

3.1 INQUIRY Command

 
(1)CBW+INQUIRYコマンド形式

 
(2)INQUIRY Data形式(BULK INで受信、その後、CSWを受信) 

 
Vendor Identification、Product Identification、Product Revision LevelはASCIIコードです
アクセス上の重要な情報は含まれません
トレース上はCBWとSCSIコマンドは連続しているのですが、既存ドキュメントはなぜか別々で説明されています。トレースが読み辛いので一緒にしました

 
 

3.2 READ(10) Command

 
(1)CBW+READコマンド形式

 
フィールド説 明
Logical Block AddressThe logical block at which the read operation begins.
と、言っても何のことか??、セクタの通し番号です   
Transfer LengthThe number of contiguous logical blocks of data that are transferred.
転送セクタ数です。通常、(Transfer Length)×512Bytesが転送されます
尚、dCBWDataTransferLengthにはバイト数を指定します  
 
上記は両方ともエンディアンには注意が必要です
 
No転送データ
 1 BULK OUT  CBW+READコマンド          
 2 BULK IN (実際の)READデータ   
 3 BULK IN CSW    

と、いう感じです。簡単ですよね、動けば・・。
しかし、SCSI準拠か何か知りませんがワード境界を無視したり、予備領域が多かったり、よく分かりません

なお、READにはREAD(10)以外にも沢山の種類があります。DISK容量の増加に対応したのだと思います
 
  

3.3 REQUEST SENSE Command

 

 

 
 

Additional Sense Code

 
 英語が分からないので、よく分かりませんが、権威のありそうなページです
 SCSI Common Codes & Values
 
 手近かにはここでも
 Key Code Qualifier Wikipedia
 
センスの意味が分かれば、バグの原因が分かる訳ではないですが、分からないと気になります
 

 

3.4 TEST UNIT READY Command



 
Operation Codeしかない単純なコマンドですが、ハマりました。「アキバオー」で買ったUSBメモリは電源ON直後だけ、TEST UNIT READYに対してCSWでエラーを返します。REQUEST SENSEでSENSEを調べると28hで"Not Ready to Ready"(文字通りの解釈で良いのか?)でした。単純にTEST UNIT READYを繰り返しましたが何度送っても、CSWはエラーのままです。(SH-2AをRESETして(電源OFFしないで)実行し直すと、正常に立ち上がります)
 
途方に暮れていたのですが、ATTACHEDから処理をし直すと立ち上がりました
フ−ッ!
 
本来のリトライの仕方は分かりません
 
 

4 Read/Write Media Device Required Commands  

4.1 MODE SENSE(10) Command

(ポチは)使ってません
 
 

4.2 READ CAPACITY

 
ディレクトリの更新(ファイルの追加など)にはDISK容量が必要なようです
この章にあるということは、READ-ONLYでアクセスする場合は不要です

 
 

5 CD/DVD Device Required Commands

 
すいません。CDのアクセスやブート動作には興味がないので、省略します。原本を参照ください 
 
Mass Storageのドキュメント
 
 

6 SCSI Commands To Support Optional INT 13 Functions

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Menu

管理人/副管理人のみ編集できます