What is SCSI? Small Computer System Interface SCSI is: • a Specification • a Bus • a Protocol SCSI Terms Initiator: A SCSI device that requests an operation to be performed by another SCSI device. Host Adapter: A Controller Board that translates host I/O requests into SCSI requests. Target: A SCSI device that performs an operation as requested by an initiator. Logical Unit: A Physical or Virtual device addressable through a target. LUN: Logical Unit Number. An encoded three-bit identifier for the logical unit. SCSI Terms SCSI Device: A Host Adapter or Intelligent Peripheral which can be attached to a SCSI bus. SCSI Address: The hex representation (0-7 or 0-F) of the unique address assigned to a SCSI device. Connect: The function which occurs when an initiator selects a target to begin an operation. Disconnect: The function which occurs when a target releases control of the SCSI bus, allowing it to go Bus Free. Reconnect: The function which occurs when a targets selects an initiator to continue an operation after a disconnect. SCSI Configuration Single Initiator, Single Target LUN0 Initiator Target SCSI Bus LUN1 LUN2 SCSI Configuration Single Initiator, Multiple Targets T Target 0 Initiator 7 SCSI Bus Target 1 Target n T SCSI Bus Terminator SCSI Configuration Multiple Initiators, Multiple Targets T Target 0 Initiator 7 SCSI Bus Target 1 Initiator 6 Target n T SCSI Parallel Bus Types Single-Ended 5V -SIG - Single Signal Level FALSE - 6m max. bus length - No Fast Timings TRUE - Uses Even bus pins only 0V Differential TRUE = -SIG < 1.5V - Dual Signal Level 5V - 25m max. bus length -SIG - Fast Timings - Uses all pins on bus TRUE FALSE LVDS (SCSI-3+) - 3VDC Diff Bus +SIG 0V TRUE = +SIG > -SIG SCSI Parallel Bus Protocol Bus Phases and their Sequencing MSG, C/D, I/O collectively known as Bus Phase Initiator and Target Roles • Initiator Begins an Operation • Target controls operation via Bus Phase and REQ • Initiator can disrupt sequence with ATN and RST SCSI Parallel Bus Signals 50 Pin Bus (Narrow), 68 Pin Bus (Wide) DB(0-7,P1) I/T DB(8-15, P2) I/T 8 Bit Data Bus with Odd Parity 2nd 8 Bit Data Bus with Odd Parity (Wide Only) REQuest T ACKnowledge I Asking for data byte to be sent/on bus Indicates data byte on bus/read byte ATtentionN SELect BuSY ReSeT I I/T I/T I Indicates pending message for target Indicates Selection/Reselection in progress Indicates SCSI Bus in use Resets all SCSI devices MeSsaGe Cmd/Data In/Out T T T Indicates Message Byte Indicates Command/Msg or Data Indicates Data Direction SCSI Bus Phases BSY 0 SEL x MSG C/D x x 1 1 1 1 x x 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 I/O x Definition Bus Free (Idle) x x 0 1 Selection Reselection 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Data Out Data In Command Status (Reserved) (Reserved) Message Out Message In I -> T I <- T I -> T I <- T I -> T I <- T Asynchronous Bus Conditions Attention Condition - Initiator asserts ATN to indicate pending message for target - Next Bus Phase change will be to Message Out phase Reset Condition - Initiator asserts RESET for 25 usec - Devices currently on the SCSI bus will immediately release - All devices are reset - All outstanding commands are cleared SCSI Bus Phase Sequencing Bus Free Arbitration Selection Reselection Msg Out Msg In any phase Data/Msg phases RESET Command Status Msg In Bus Free SCSI Parallel Bus Protocol REQ/ACK Handshakes for Information Transfer In phases: REQ (Target) sends byte ACK (Initiator) indicates byte has been read Out phases: REQ (Target) asks for byte ACK (Initiator) sends byte Two Transfer Modes Asynchronous Synchronous Information Transfer: Asynchronous Operations In: REQ ACK Data Out: REQ ACK Data Default Transfer Mode for all phases Information Transfer: Synchronous Operations In: REQ ACK Data Out: REQ ACK Data Data Phases Only, MUST be negotiated (speed and offset) SCSI Operational Burst Speeds Specification SCSI-1, Async SCSI-1, Sync Xfer Period Bus Size Burst Speed narrow 1.5 MB/sec 200 ns narrow 5 MB/sec SCSI-2, Async SCSI-2, Sync - narrow, wide 3, 6 MB/sec 200 ns narrow, wide 5, 10 MB/sec SCSI-2, “Fast SCSI” 100 ns narrow, wide 10, 20 MB/sec SCSI-3, “Ultra SCSI” 50 ns narrow, wide 20, 40 MB/sec SCSI-3+, “Fast 40” SCSI-3+, “Fast 80” 25 ns 12 ns narrow, wide 40, 80 MB/sec narrow, wide 80, 160 MB/sec SCSI Message System Performs the following functions: - Unit Selection and Identification - Bus Operations Management - Data Checkpointing & Error Recovery - Command Termination (Initiator) - Command Termination (Target) - Multiple Command Management SCSI Message System Unit Selection & Identification Identify - First message sent after Selection/Reselection - Selects LUN on target for connection - Establishes the connection (“nexus”) between the Initiator and the Target LUN (“I_T_L nexus”) - Disconnect Privilege granted here, by Initiator 7 6 Identify (1) 5 Disconnect LUNTAR Privilege (0) 4 Reserved 3 2 Reserved 1 0 LUN LUN SCSI-3 definition has support for 32 LUNs) SCSI-2 SCSI-3 SCSI Message System Bus Operational Management Synchronous Data Transfer Request (SDTR) - Starts negotiation for Sync Data Transfer Agreement - Init sends packet [0x01, 0x03, 0x01, {period}, {offset}], Targets responds with values that it supports - Good until Reset or WDTR Wide Data Transfer Request (WDTR) - Starts negotiation for Wide Data Transfers, similar to above - Initiator sends packet [0x01, 0x02, 0x03, {width}] Ignore Wide Residue [0x23, {size}] - Sent to indicate odd byte data transfer on Wide bus Disconnect [0x04] - Sent to indicate a temporary release of the bus SCSI Message System Data Checkpointing & Error Recovery Error Recovery - Initiator Detected Error [0x05] - Message Parity Error [0x09] - Message Reject [0x07] - NOP [0x08] Data Checkpointing - Save Data Pointers [0x02] - Restore Pointers [0x03] - Modify Data Pointers [0x01, 0x05, 0x00, {arg[4]}] SCSI Pointers All pointers stored within the Initiator Two sets of pointers (active and saved) for Command, Data, Status for each Logical Unit Save Data Pointers Active -> Saved Restore Data Pointers Saved -> Active Modify Data Pointers Active += arg[4] SCSI Message System Command Termination (Target) Command Complete [0x00] - Indicates current command is done, with or without error - Also terminates connection: Target goes Bus Free next Linked Command Complete [0x0A] - Used for Linked Commands (multiple commands per connection) - Target goes to Command phase for next CDB, instead of Bus Free Linked Command Complete w/Flag [0x0B] - Sent on Linked Commands with “Flag” bit set in CDB - Generally unused SCSI Message System Command Termination (Initiator) Abort [0x06] - Clears current connection Abort Tag [0x0D] - Clears current tagged connection Clear Queue [0x0E] - Clears all outstanding tagged commands for this Initiator Bus Device Reset [0x0C] - Clears all outstanding commands for all Initiators (Bus Reset) - Clears all commands for all Initiators on all targets SCSI Message System Multiple Command Sequencing Command Queuing - Allows multiple commands to be processed by a Target - I_T_L_Q nexus requires extended connection sequence: Identify Queue Tag, one of the following Simple Queue Tag [0x20] Head of Queue Tag [0x21] Ordered Queue Tag [0x22] Queue ID Unique single byte value - Reselection uses Simple Queue Tag Message only SCSI Message System Multiple Command Sequencing Simple Queue Tag [0x20] - Target may execute commands in any order Ordered Queue Tag [0x22] - Delimits any order sets - Finish all commands before starting this - If multiple cmds, execution is FIFO Head of Queue Tag [0x21] - This command to be executed next - If multiple cmds, execution is LIFO SCSI Status Byte Sent during Status Phase, prior to Command Complete Message, to indicate success or failure of the command sequence. GOOD [0x00] - Cmd completed without error CHECK CONDITION [0x02] - Cmd complete with error, see Sense Data for details BUSY [0x08] - Unable to process command at present time (Try again later) SCSI Status Byte INTERMEDIATE [0x10] - Linked command complete without error RESERVATION CONFLICT [0x18] - Device reserved by another initiator QUEUE FULL [0x28] - Maximum number of Queued Cmds in use SCSI Sense Data • A special data packet specifying error status and location(s) • Separate copy maintained by Target for each Initiator • Retrieved by Request Sense command • Must be retrieved immediately after a CHECK CONDITION, or sense data is lost • All queued commands are suspended after CHECK CONDITION, until Sense Data is retrieved (Contingent Allegiance) SCSI Sense Data Format 0 1 2 3-6 7 8-11 12 13 14 15-17 18-xx Valid Error Code (0x70 or 0x71) Segment Number FM EOM ILI (R) Sense Key Information Bytes Additional Sense Length Command Specific Information Additional Sense Code Additional Sense Code Qualifier Field Replaceable Unit Code Sense Key Specific Additional Sense Bytes SCSI Sense Keys 0x0: No Sense 0x1: Recovered Error 0x2: Not Ready 0x3: Medium Error 0x4: Hardware Error 0x5: Illegal Request 0x6: Unit Attention 0x7: Data Protect 0x8: Blank Check 0x9: Vendor Specific 0xA: Copy Aborted 0xB: Aborted Command 0xC: Equal 0xD: Volume Overflow 0xE: Miscompare 0xF: Reserved Sense Data Shorthand: SKey/ASC/ASCQ 3/11/01: Medium Error, Read Retries Exhausted 5/20/00: Illegal Command, Invalid Operation Code D/47/00: Aborted Command, SCSI Parity Error Unit Attention Condition First sense packet after any of the following: - Power-on - Reset - Mode/Inquiry parameters changed - Runtime firmware change - Commands cleared by another initiator Reports to initiator that operating mode of the Target has changed from the last command sent to the Target. Reported on all SCSI Commands except Inquiry. Command it is reported with is not executed. SCSI Commands Divided into categories based on device type: - All Device Types - Direct Access Devices (disks) - Sequential Access Devices (tapes) - Processor Devices (Sauna SPs) Standardized command set and structure Some commands mandatory, others optional SCSI CDB: Byte 0 7 6 5 Group Code Group Code 0 1 2 3-4 5 6-7 4 3 2 1 Command Code Command Description 6 Byte Commands 10 Byte Commands 10 Byte Commands Reserved 12 Byte commands Vendor Specific 0 SCSI CDB Format 0 1 2 3 4 5 0 1 2-5 6 7-8 9 0 1 2-5 6-9 10 11 Operation Code [LUN] LBA (MSB) LBA LBA (LSB) Transfer/Parameter/Allocation Length Control Byte Operation Code [LUN] Reserved LBA Reserved Transfer/Parameter/Allocation Length Reserved Control Byte SCSI CDB: Control byte 7 6 Vendor Unique 5 4 3 Reserved 2 1 0 Flag Link Flag Indicates Target should return Linked CCw/Flag Msg Link Used to continue I/O process across multiple commands SCSI Commands: All Device Types Change Definition [0x40] - Sets target in SCSI-1, CCS or SCSI-2 mode Inquiry [0x12] - Returns Target ID packet (Device Type, Vendor, Model, etc.) Log Sense/Select [0x4D/0x4C] - Sets/Reports Logged Statistical Information (soft error rates) Mode Sense(6,10)/Select(6,10) [0x1A,0x5A/0x15,0x55] - Sets/Reports Configuration and Runtime Parameters SCSI Disk Mode Sense Pages Page 0x01: Error Recovery Page - Error Recovery Strategies Page 0x03: Format Device Page - Disk Format Parameters (Zoning, Tracks/Zone, etc.) Page 0x04: Rigid Disk Drive Geometry Page - Disk Physical Geometry (# Cyls, # Heads, etc.) Page 0x08: Caching Mode Page - Read/Write Caching control Page 0x0A: Control Mode Page - Exception Handing & Queue Handling parameters SCSI Commands: All Device Types Request Sense [0x03] - Returns Sense Data to Initiator Test Unit Ready [0x00] - Returns Target readiness to accept I/O commands Write Buffer [0x3B] - Used to update Target run-time firmware SCSI Disk Commands Force Reserve [0xE4] - Force Reservation, overriding normal SCSI protocol Format Unit [0x04] - Formats disk, according to Mode Parameters Prefetch [0x34] - Read disk, place data into cache Read (6,10) [0x08, 0x28] - Read disk, transfer data to Initiator Read Capacity [0x25] - Returns size of disk, in # LBAs SCSI Disk Commands Reassign Blocks [0x07] - Remaps specified LBA(s) Reserve, Release [0x16, 0x17] - Locks Disk for exclusive access by this Initiator Rezero Unit [0x01] - Seeks to LBA 0 Start/Stop Unit [0x1B] - Command to spin up/down disk Synchronize Cache [0x35] - Flush cache to disk, cache remains enabled SCSI Disk Commands Verify [0x2F] - Verify LBA(s) on disk with passed data Write (6,10) [0x0A, 0x2A] - Write specified LBA(s) with passed data Write and Verify [0x2E] - Treated the same as a Write command Write Same [0x41] - Writes passed sector to multiple LBA(s) on disk Sample SCSI Command Bus Free Arbitration/80 (7) Select w/ATN/81 (7,0) Message Out/80 (Identify) Command/08 (Read) 00 34 22 01 00 Data In/00 01 02 03 04 05 06 07... Status/00 (Good) Message In/00 (Command Complete) Bus Free Sample SCSI Command with Disconnect Bus Free Arbitration/80 (7) Select w/ATN/81 (7,0) Message Out/C0 (Identify) Command/08 (Read) 00 34 22 01 00 Message In/04 (Disconnect) Bus Free Arbitration/01 (0) Reselection/81 (7,0) Message In/80 (Identify) Data In/00 01 02 03 04 05 06 07... Status/00 (Good) Message In/00 (Command Complete) Bus Free Sample SCSI Command with Parity Error Bus Free Arbitration/80 (7) Select w/ATN/81 (7,0) Message Out/C0 (Identify) Command/08 (Read) 00 34 22 01 00 Message In/04 (Disconnect) Bus Free Arbitration/01 (0) Reselection/81 (7,0) Message In/80 (Identify) Data In/00 01 02 03 04* 05+ 06+ 07+... Message Out/05 (Initiator Detected Error) Message In/03 (Restore Pointers) Data In/00 01 02 03 04 05 06 07... Status/00 (Good) Message In/00 (Command Complete) Bus Free Sample SCSI Queued Command Bus Free Arbitration/80 (7) Select w/ATN/81 (7,0) Message Out w/ATN /C0 (Identify) Message Out w/ATN /20 (Simple Tag) Message Out/00 (Tag ID) Command/08 (Read) 00 34 22 01 00 Message In/04 (Disconnect) Bus Free Arbitration/01 (0) Reselection/81 (7,0) Message In/80 (Identify) Message In/20 (Simple Tag) Message In/00 (Tag ID) Data In/00 01 02 03 04 05 06 07... Status/00 (Good) Message In/00 (Command Complete) Bus Free Sample SCSI Linked Command Bus Free Arbitration/80 (7) Select w/ATN/81 (7,0) Message Out/80 (Identify) Command/08 (Read) 00 34 22 01 01 Data In/00 01 02 03 04 05 06 07... Status/10 (Intermediate/Good) Message In/0A (Linked Command Complete) Command/08 (Read) 03 22 68 01 00 Data In/00 01 02 03 04 05 06 07... Status/00 (Good) Message In/00 (Command Complete) Bus Free Processor SCSI Commands Send [0x0A] - Send data packet Test Unit Ready [0x00] - Test readiness to send/receive data Used by SP when acting as an Initiator to send Unsolicited Errors Also used by SP for communication to the peer SP The Future of SCSI SCSI-1 14 Chapters, 212 pages Narrow Parallel Bus, 5 Device Types (sketchy) SCSI-2 18 Chapters, 438 Pages Wide/Fast Parallel Bus, 10 Device Types SCSI-3 Family of ~20 Specifications, ~1400 Pages Faster Parallel Buses Low Voltage Parallel Bus (LVDS) Serial Bus Protocols SCSI-3 Common Access Method (CAM-3) Block Commands (SBC) Stream Commands (SSC) Graphic Commands (SGC) Medium Changer Commands (SMC) Controller Commands (SCC) Multi-Media Commands (MMC) SCSI-3 Primary Commands (SPC) SCSI-3 Architecture Model (SAM) Fast-20 Parallel I/F (Fast-20) Interlocked Protocol (SIP) Fiber Channel Protocol (FCP) Serial Bus Protocol (SBP) SSA SCSI-3 Protocol (SSA-S3P) Parallel Interface (SPI, SPI-2) Fibre Channel (FC-PH) High Perf. Serial Bus (P1394) SSA-TL1/2 SSA-PH1/2 Generic Packetized Protocol (GPP) Almost any Packet Interface