SBP-2デバイスのConfiguration ROM


Configuration ROMの実例

BLOCK READ REQUESTでは読めないみたい

まずは読みこんでみようとしたんですが、何でか知りませんが、BLOCK READ REQUESTで400hバイト読み出せと送ると以下のようなパケットがAR RSP BUFFERに返ってきます。6バイト目に60hというのが返ってきていて、上位4BITがrcodeで6hです。rcode=6hは「rcoderesp_type_error A field in the request packet header was set to an unsupported or incorrect value, or an invalid transaction was attempted (e.g., a write to a read-only address).」とあるので、この条件でのBlock Read Requestは駄目と言う事みたいです。

70 01 C1 FF;tcode=7h Block read response
00 60 C0 FF;rcode=6h
00 00 00 00
00 00 00 00
00 00 11 84

QUADLET READ REQUESTでは読めた

すぐ下のはQUADLET READ REQUESTでVT6306がnodeID=0でOXFW911がnodeID=1で、OXFW911のメモリアドレスFFFFF0000404h(Configuration ROMのオフセット004h)を読みこんだところ帰ってきたパケットです。オフセット0Chから読み出した値が返ってきていますね。

60 05 C1 FF;tcode=6h Quadlet read response
00 00 C0 FF;rcode=0h resp_complete The node has successfully completed the command.
00 00 00 00
31 33 39 34;1394
00 00 11 84

Configuration ROMを全部読んでみた

以下はQUADLET READ REQUESTで読みこんだところ帰ってきた返り値を並べてみたものです。400hバイト読みこんでみたところ、0100hからは0000hからと同じ内容が繰り返し読み出されました。

0000  04 39 25 24 31 33 39 34 00 FF 50 00 00 30 E0 00       1394
0010  00 00 01 FA 00 06 F1 B3 0C 00 83 C0 03 00 30 E0
0020  81 00 00 14 04 00 F9 11 81 00 00 1D D1 00 00 01
0030  00 0C 82 9D 12 00 60 9E 13 01 04 83 3C 00 00 25
0040  54 00 C0 00 3A 00 3C 08 38 00 60 9E 39 01 04 D8
0050  3B 00 00 00 3D 00 00 03 14 45 00 00 17 00 00 01
0060  81 00 00 15 00 00 00 00 00 00 00 00 00 00 00 00
0070  00 0A AD C5 00 00 00 00 00 00 00 00 4F 78 66 6F                Oxfo
0080  72 64 20 53 65 6D 69 63 6F 6E 64 75 63 74 6F 72   rd Semiconductor
0090  20 4C 74 64 2E 20 20 20 00 00 00 00 00 05 5D 4D    Ltd.   
00A0  00 00 00 00 00 00 00 00 4F 58 46 57 39 31 31 20            OXFW911 
00B0  00 00 00 00 00 08 84 E5 00 00 00 00 00 00 00 00
00C0  4F 58 46 4F 52 44 20 49 44 45 20 44 65 76 69 63   OXFORD IDE Devic
00D0  65 20 20 20 00 00 00 00 00 03 00 00 00 00 00 00   e   
00E0  00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00
00F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

ASCIIで記述されたところだけ右側に対応させて書いています。まあ、以下の表を見たら大体分かるんじゃないでしょうかね。例によってエンディアンに注意しておくと。ちなみに、EPSON S1R72805F00A1は14hのキーがありません。つまり、デバイス種別はInquiryを送って取得しないと駄目なんです。

読み値とその内容

Bus information block
offset長さ意味
0000h1バイト04hbus_info_blockが0004hから0013hまでの4quadlet(=DWORD)
0004h4バイト"1394"IEEE1394のConfiguration ROMである
0008h4バイト00FF5000hnode options
Root directory
offset長さ意味
0014h2バイト0006hroot_directoryは0018hから002Fhまでの6quadlet
0018h1バイト0Chnode_capabilitiesを表すキー
0019h3バイト0083C0hnode_capabilities
001Ch1バイト03hmodule_vendor_IDを表すキー
001Dh3バイト0030E0hmodule_vendor_ID
0020h1バイト81hText leaf offsetを表すキー
0021h3バイト000014hmodule_vendorを格納したText leaf(#1としておく)は0020h+0014h*4=0070hから
0024h1バイト04hhardware_version?を表すキー
0025h3バイト00F911hhardware_version?
0028h1バイト81hText leaf offsetを表すキー
0029h3バイト00001Dhを格納したText leaf(#2としておく)は0028h+001Dh*4=009Chから
002Ch1バイトD1hUnit directory offsetを表すキー
002Dh3バイト000001hUnit directory offsetは002Ch+0004h=0030hから
Unit directory
offset長さ意味
0030h2バイト000ChUnit directory offsetは0034hから0Ch項目(34h+04h*0Ch-01h=0063hまで)
0034h1バイト12hunit_spec_IDを表すキー
0035h3バイト00609Ehunit_spec_ID SBP-2デバイスである条件の1/2
0038h1バイト13hunit_sw_versionを表すキー
0039h3バイト010483hunit_sw_version SBP-2デバイスである条件の2/2
003Ch1バイト3Chを表すキー
003Dh3バイト000025h
0040h1バイト54hcsr_offsetを表すキー
0041h3バイト00C000hcsr_offset MANAGEMENT AGENTはFFFFF0000000h+C000h*4h=FFFFF0030000hにある
0044h1バイト3AhUnit characteristicsを表すキー
0045h3バイト003C08hUnit characteristics
0048h1バイト38hcommand_set_spec_IDを表すキー
0049h3バイト00609Ehcommand_set_spec_ID SCSIコマンドセットを使用するものである条件の1/2
004Ch1バイト39hcommand_setを表すキー
004Dh3バイト0104D8hcommand_set SCSIコマンドセットを使用するものである条件の2/2
0050h1バイト3Bhを表すキー
0051h3バイト000000h
0054h1バイト3Dhを表すキー
0055h3バイト000003h
0058h1バイト14hDevice type and LUNを表すキー
0059h3バイト450000hDevice type=45h(5h=CD-ROM) and LUN=0000h
005Ch1バイト17hmodel_IDを表すキー
005Dh3バイト000001hmodel_ID
0060h1バイト81hText leaf offsetを表すキー
0061h3バイト000015hmodel_IDを格納したText leaf(#3としておく)は0060h+0015h*4=00B4hから
Text leaf #1
offset長さ意味
0070h1バイト000AhこのText leafは0074hから0Ah*4=28hバイトで、9Bhまで
0074h1バイト00hspec_type
0075h3バイト000000hspecifier_ID
0078h4バイト00000000hlanguage_ID
007Ch28バイト"Oxford Semiconductor Ltd. "module_vendorの文字列
0098h4バイト00000000h9Bhまで0で埋めてるだけ
Text leaf #2
offset長さ意味
009Ch1バイト0005hこのText leafは00A0hから05h*4=14hバイトで、00B3hまで
00A0h1バイト00hspec_type
00A1h3バイト000000hspecifier_ID
00A4h4バイト00000000hlanguage_ID
00A8h8バイト"OXFW911 "hardware_version?の文字列
00B0h4バイト00000000hB3hまで0で埋めてるだけ
Text leaf #3
offset長さ意味
00B4h1バイト0008hこのText leafは00B8hから08h*4=20hバイトで、00D7hまで
00B8h1バイト00hspec_type
00B9h3バイト000000hspecifier_ID
00BCh4バイト00000000hlanguage_ID
00C0h20バイト"OXFORD IDE Device "model_IDの文字列
00D4h4バイト00000000hD7hまで0で埋めてるだけ

Valid HTML 4.01 Strict