Date: Oct 29, 1991 X3T9.2/91-176 Rev 0 To: X3T9.2 Committee (SCSI) From: George Penokie (IBM) Lee Cleveland Subject: SCSI Data Phase LRC Proposal Problem As SCSI buses are loaded down with more devices 8 - 16 - 32 and fast SCSI setup and hold times used, the SCSI bus needs to have more error detection available. This detection needs to be able to detect double clocking of Request and Acknowledge and even parity. Solution Implement a Longitudinal Redundancy Check (LRC) scheme were the data is segmented into blocks that are checked for longitudinal parity. This scheme would detect error caused by double clocking and even parity. Description A seed is agreed to by the initiator and target. The seed is 1 byte for an 8 bit bus, 2 bytes for a a 16 bit bus, or 4 bytes for a 32 bit bus. The 2 byte and 4 byte values are generated by duplicating the seed 2 and 4 times. The seed and data is XORed together at the initiator and the target as the data is sent across the bus. The last data byte transferred for the I/O process is the result of the XOR. This byte is compared to the XOR generated by the receiving device, if they match the data transferred was good. An example of a 3 byte data transfer with LRC follows: S E N D RECEIVE ------------------- --------------- --- B B B S B B B R S S Y Y Y S Y Y Y E T T T L E T T T L L E E E E R E E E E R R D 1 2 3 C D 1 2 3 C C ------------------------- ----------------------------- 7 XOR 7 XOR 7 XOR 7 = 7p 7 XOR 7 XOR 7 XOR 7 = 7 7p 6 XOR 6 XOR 6 XOR 6 = 6p 6 XOR 6 XOR 6 XOR 6 = 6 6p 5 XOR 5 XOR 5 XOR 5 = 5p 5 XOR 5 XOR 5 XOR 5 = 5 5p 4 XOR 4 XOR 4 XOR 4 = 4p 4 XOR 4 XOR 4 XOR 4 = 4 4p 3 XOR 3 XOR 3 XOR 3 = 3p 3 XOR 3 XOR 3 XOR 3 = 3 3p 2 XOR 2 XOR 2 XOR 2 = 2p 2 XOR 2 XOR 2 XOR 2 = 2 2p 1 XOR 1 XOR 1 XOR 1 = 1p 1 XOR 1 XOR 1 XOR 1 = 1 1p 0 XOR 0 XOR 0 XOR 0 = 0p 0 XOR 0 XOR 0 XOR 0 = 0 0p P XOR P XOR P XOR P = Pp P XOR P XOR P XOR P = P Pp ------------------------- ------------------------------ S LRC = The sending devices generated LRC R LRC = The receiving devices generated LRC If S LRC is not equal to R LRC then an error occurred in the data transfer. Implementation: A bit in the Standard Inquiry Data called LRC. A Longitudinal Redundancy Check (LRC) bit of one indicates that the device supports Longitudinal Redundancy Checking for this logical unit. A value of zero indicates the device does not support Longitudinal Redundancy checking for this logical unit. A bit called ACTLRC and an 8 bit field called LRCSEED in the Control Mode Page. An Activate Longitudinal Redundancy Checking (ACTLRC) bit of one specifies that the target shall use Longitudinal Redundancy Checking for all data phase transfers. An ACTLRC bit of zero specifies that the target shall not use Longitudinal Redundancy Checking. The Longitudinal Redundancy Checking Seed (LRCSEED) field is only valid if the ACTLRC bit is one. The target shall use this field as the seed for all transfers of data which use Longitudinal Redundancy Checking.