USB Mass Storage 是 USB host侧遇到最多的场景,基于 Bulk传输,使用 SCSI协议进行资源交互。当然 UFS也用到 SCSI协议,在使用 UFS的系统,我们插入 U盘经常生成的 dev节点是 /dev/sdb或者是 /dev/sde 。前面的如 /dev/sda、/dev/sdc这些节点可能就被 UFS占用了,识别 log可能就变成 “sd 1:0:0:0: [sde] …”。 在读写有坏块的 U盘时,不免会打印下面的 log。通过 opcode,就可以清楚是什么操作报的错。这里 opcode=0x28,即 READ(10)。 - sd 0:0:0:0: [sda] tag#0 CDB: opcode=0x28 28 00 00 00 2b 09 00 00 1d 00
複製代碼
我们还可以阅读 SCSI的 manual,确定这次的 READ(10) 想从 LBA 0x2b0900 读多 0x1d * block size的数据回来。
SCSI Operation Codes
READ10
USB Mass Storage 常用的 SCSI Operation Codes 包括下面这些: 指令代码 | 指令名称 | 指令说明 | 0x00 | Test Unit Ready | 查询设备是否ready | 0x03 | Request Sense | 主机请求设备返回执行结果,及获取状态信息 | 0x12 | Inquiry | 获取设备信息 | 0x1A | Mode Sense(6) | 向host传输参数 | 0x5A | Mode Sense(10) | 向host传输参数 | 0x25 | Read Capacity(10) | 读取设备容量 | 0x28 | Read(10) | Host从设备读取数据 | 0x2A | Write(10) | Host写数据到存储设备 | 0x23 | Read Format Capacity | 查询当前容量及可用空间 | 0x15 | Mode Select(6) | 允许Host对外部设备设置参数 | 0x55 | Mode Select(10) | 允许Host对外部设备设置参数 | 0x1E | Prevent/Allow Medium Removal | 禁止/允许存储介质移动 | 0x1B | Start/Stop Uint | 启动/停止存储单元电源(写保护) | 0xA0 | Report LUNs | 索取设备的LUN数和LUN清单 | 0x2F | Verify | 在存储中验证数据 |
下面是全部的 SCSI Operation Codes: Code | Command | 00 | | 01 | RECALIBRATE or REWIND | 03 | | 04 | | 05 | READ BLOCK LIMITS | 07 | REASSIGN BLOCKS | 07 | INITIALIZE ELEMENT STATUS | 08 | | 0A | | 0B | SEEK (6) | 0F | READ REVERSE (6) | 10 | WRITE FILEMARKS (6) | 11 | SPACE (6) | 12 | | 13 | VERIFY(6) | 14 | RECOVER BUFFERED DATA | 15 | | 16 | RESERVE (6) | 17 | RELEASE (6) | 18 | COPY | 19 | ERASE (6) | 1A | | 1B | | 1B | LOAD UNLOAD | 1C | | 1D | | 1E | PREVENT/ALLOW MEDIUM REMOVAL | 23 | READ FORMAT CAPACITIES (MMC) | 24 | SET WINDOW | 25 | | 28 | | 29 | READ GENERATION | 2A | | 2B | SEEK (10) | 2C | ERASE (10) | 2D | READ UPDATED BLOCK | 2E | WRITE AND VERIFY (10) | 2F | VERIFY (10) | 30 | SEARCH DATA HIGH (10) | 31 | SEARCH DATA EQUAL (10) | 32 | SEARCH DATA LOW (10) | 33 | SET LIMITS (10) | 34 | PRE-FETCH (10) | 35 | SYNCHRONIZE CACHE (10) | 36 | LOCK/UNLOCK CACHE (10) | 37 | READ DEFECT DATA (10) | 37 | INITIALIZE ELEMENT STATUS WITH RANGE | 38 | MEDIUM SCAN | 39 | COMPARE | 3A | COPY AND VERIFY | 3B | WRITE BUFFER | 3C | READ BUFFER | 3D | UPDATE BLOCK | 3E | | 3F | | 40 | CHANGE DEFINITION | 41 | WRITE SAME (10) | 44 | REPORT DENSITY SUPPORT | 45 | PLAY AUDIO (10) | 46 | GET CONFIGURATION | 47 | PLAY AUDIO MSF | 48 | AUDIO TRACK INDEX (not mentioned in T10 overview) | 49 | AUDIO TRACK RELATIVE 10 (not mentioned in T10 overview) | 4A | GET EVENT STATUS NOTIFICATION | 4B | PAUSE / RESUME | 4C | | 4D | | 50 | XDWRITE (10) | 51 | XPWRITE (10) /READ DISC INFORMATION CDB (in mmc5r02c 6.22.2)/ | 52 | XDREAD (10) | 53 | XDWRITEREAD (10) | 54 | SEND OPC INFORMATION | 55 | | 56 | RESERVE (10) | 57 | RELEASE (10) | 58 | REPAIR TRACK | 5A | | 5B | CLOSE TRACK / SESSION | 5C | READ BUFFER CAPACITY | 5D | SEND CUE SHEET | 5E | PERSISTENT RESERVE IN | 5F | PERSISTENT RESERVE OUT | 7E | EXTENDED CDB | 7F | VARIABLE LENGTH CDB | 80 | XDWRITE EXTENDED (16) | 80 | WRITE FILEMARKS (16) | 81 | REBUILD (16) | 81 | READ REVERSE (16) | 82 | REGENERATE (16) | 83 | EXTENDED COPY | 84 | RECEIVE COPY RESULTS | 85 | ATA COMMAND PASS THROUGH (16) | 86 | ACCESS CONTROL IN | 87 | ACCESS CONTROL OUT | 88 | | 89 | COMPARE AND WRITE | 8A | | 8B | ORWRITE | 8C | READ ATTRIBUTE | 8D | WRITE ATTRIBUTE | 8E | WRITE AND VERIFY (16) | 8F | VERIFY (16) | 90 | PRE-FETCH (16) | 91 | SYNCHRONIZE CACHE (16) | 91 | SPACE (16) | 92 | LOCK UNLOCK CACHE (16) | 93 | WRITE SAME (16) | 9E | SERVICE ACTION IN (16) | 9F | SERVICE ACTION OUT (16) | A0 | | A1 | ATA COMMAND PASS THROUGH (12) | A2 | SECURITY PROTOCOL IN | A2 | SEND EVENT (not mentioned in T10 overview) | A3 | MAINTENANCE IN | A4 | MAINTENANCE OUT (REPORT_KEY) | A5 | MOVE MEDIUM | A5 | PLAY AUDIO 12 (not mentioned in T10 overview) | A6 | EXCHANGE MEDIUM | A7 | MOVE MEDIUM ATTACHED | A8 | | A9 | SERVICE ACTION OUT (12) | A9 | AUDIO TRACK RELATIVE 12 (not mentioned in T10 overview) | AA | | AB | SERVICE ACTION IN (12) | AC | ERASE (12) | AD | READ DVD STRUCTURE | AE | WRITE AND VERIFY (12) | AF | VERIFY (12) | B0 | SEARCH DATA HIGH (12) | B1 | SEARCH DATA EQUAL (12) | B2 | SEARCH DATA LOW (12) | B3 | SET LIMITS (12) | B4 | READ ELEMENT STATUS ATTACHED | B5 | SECURITY PROTOCOL OUT | B6 | SEND VOLUME TAG | B7 | READ DEFECT DATA (12) | B8 | READ ELEMENT STATUS | B9 | READ CD MSF | BA | REDUNDANCY GROUP (IN) | BB | REDUNDANCY GROUP (OUT) | BC | SPARE (IN) | BC | PLAY CD (not mentioned in T10 overview) | BD | SPARE (OUT) | BE | VOLUME SET (IN) | BF | VOLUME SET (OUT) |
http://xxxdk.xyz/xxx/2020/03/SCSI-Operation-Codes/ |