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 | 長さ | 値 | 意味 |
0000h | 1バイト | 04h | bus_info_blockが0004hから0013hまでの4quadlet(=DWORD) |
0004h | 4バイト | "1394" | IEEE1394のConfiguration ROMである |
0008h | 4バイト | 00FF5000h | node options |
Root directory
offset | 長さ | 値 | 意味 |
0014h | 2バイト | 0006h | root_directoryは0018hから002Fhまでの6quadlet |
0018h | 1バイト | 0Ch | node_capabilitiesを表すキー |
0019h | 3バイト | 0083C0h | node_capabilities |
001Ch | 1バイト | 03h | module_vendor_IDを表すキー |
001Dh | 3バイト | 0030E0h | module_vendor_ID |
0020h | 1バイト | 81h | Text leaf offsetを表すキー |
0021h | 3バイト | 000014h | module_vendorを格納したText leaf(#1としておく)は0020h+0014h*4=0070hから |
0024h | 1バイト | 04h | hardware_version?を表すキー |
0025h | 3バイト | 00F911h | hardware_version? |
0028h | 1バイト | 81h | Text leaf offsetを表すキー |
0029h | 3バイト | 00001Dh | を格納したText leaf(#2としておく)は0028h+001Dh*4=009Chから |
002Ch | 1バイト | D1h | Unit directory offsetを表すキー |
002Dh | 3バイト | 000001h | Unit directory offsetは002Ch+0004h=0030hから |
Unit directory
offset | 長さ | 値 | 意味 |
0030h | 2バイト | 000Ch | Unit directory offsetは0034hから0Ch項目(34h+04h*0Ch-01h=0063hまで) |
0034h | 1バイト | 12h | unit_spec_IDを表すキー |
0035h | 3バイト | 00609Eh | unit_spec_ID SBP-2デバイスである条件の1/2 |
0038h | 1バイト | 13h | unit_sw_versionを表すキー |
0039h | 3バイト | 010483h | unit_sw_version SBP-2デバイスである条件の2/2 |
003Ch | 1バイト | 3Ch | を表すキー |
003Dh | 3バイト | 000025h | |
0040h | 1バイト | 54h | csr_offsetを表すキー |
0041h | 3バイト | 00C000h | csr_offset MANAGEMENT AGENTはFFFFF0000000h+C000h*4h=FFFFF0030000hにある |
0044h | 1バイト | 3Ah | Unit characteristicsを表すキー |
0045h | 3バイト | 003C08h | Unit characteristics |
0048h | 1バイト | 38h | command_set_spec_IDを表すキー |
0049h | 3バイト | 00609Eh | command_set_spec_ID SCSIコマンドセットを使用するものである条件の1/2 |
004Ch | 1バイト | 39h | command_setを表すキー |
004Dh | 3バイト | 0104D8h | command_set SCSIコマンドセットを使用するものである条件の2/2 |
0050h | 1バイト | 3Bh | を表すキー |
0051h | 3バイト | 000000h | |
0054h | 1バイト | 3Dh | を表すキー |
0055h | 3バイト | 000003h | |
0058h | 1バイト | 14h | Device type and LUNを表すキー |
0059h | 3バイト | 450000h | Device type=45h(5h=CD-ROM) and LUN=0000h |
005Ch | 1バイト | 17h | model_IDを表すキー |
005Dh | 3バイト | 000001h | model_ID |
0060h | 1バイト | 81h | Text leaf offsetを表すキー |
0061h | 3バイト | 000015h | model_IDを格納したText leaf(#3としておく)は0060h+0015h*4=00B4hから |
Text leaf #1
offset | 長さ | 値 | 意味 |
0070h | 1バイト | 000Ah | このText leafは0074hから0Ah*4=28hバイトで、9Bhまで |
0074h | 1バイト | 00h | spec_type |
0075h | 3バイト | 000000h | specifier_ID |
0078h | 4バイト | 00000000h | language_ID |
007Ch | 28バイト | "Oxford Semiconductor Ltd. " | module_vendorの文字列 |
0098h | 4バイト | 00000000h | 9Bhまで0で埋めてるだけ |
Text leaf #2
offset | 長さ | 値 | 意味 |
009Ch | 1バイト | 0005h | このText leafは00A0hから05h*4=14hバイトで、00B3hまで |
00A0h | 1バイト | 00h | spec_type |
00A1h | 3バイト | 000000h | specifier_ID |
00A4h | 4バイト | 00000000h | language_ID |
00A8h | 8バイト | "OXFW911 " | hardware_version?の文字列 |
00B0h | 4バイト | 00000000h | B3hまで0で埋めてるだけ |
Text leaf #3
offset | 長さ | 値 | 意味 |
00B4h | 1バイト | 0008h | このText leafは00B8hから08h*4=20hバイトで、00D7hまで |
00B8h | 1バイト | 00h | spec_type |
00B9h | 3バイト | 000000h | specifier_ID |
00BCh | 4バイト | 00000000h | language_ID |
00C0h | 20バイト | "OXFORD IDE Device " | model_IDの文字列 |
00D4h | 4バイト | 00000000h | D7hまで0で埋めてるだけ |