SCSI interface information
(C) 1997-2010 André Fachat
CSI means "Small Computer System Interface". It is an interface that connectes computers with peripheral devices, like disks, scanners, CD-ROMs etc. As such it is very flexible.
The first SCSI interfaces were using asynchronous I/O mode. Each transfered byte was requested and acknowledged with a special handshake. Nowadays synchronous modes with up to 80 or more MByte/s are supported. Yet, all devices still know the asynchronous mode and can be used with this interface (at least I did not encounter one, but I also did not test that many).
The SCSI-II standard defines a number of command sets for a variety of devices. Disks are accessed as "direct access devices", and commands for CD-ROM devices, Printers, coprocessors etc are defined. The commands are transferred in a standard way, which makes the transport level flexible. And once you know how to send one command, you can easily send any other. To send a command you can have a look at the software from this site, that includes SCSI drivers for the 6502 in the GeckOS operating system.
The SCSI-II standard is refered to as ANSI X3.131-1990 Small Computer Systems Interface-2 (SCSI-II). The SCSI-I standard is X3.131-1986. The SCSI-III standard still specifies the asynchronous mode for parallel cable transfer, which is used in my current designs. In the resources section below are links to the standards and to a very good article on SCSI.
A good source (although a bit hard to read) is the linux kernel source
code. Recommended reading are the comments at the beginning of
drivers/scsi/aha152x.c
, the defines in include/scsi/*
,
especially the SCSI command opcodes. grep
ing for them in the code
will give you an idea
how to use them. One example is the function scan_scsis_single()
in drivers/scsi/scsi.c
.
All code references relative to the main source directory, usually under
/usr/src/linux/
, of linux kernel version 2.0.36 (although
the linux version should not matter that much here).
SCSI was derived from the "Shugart Associates System Interface". Commodore used a SASI board as disk controller for its 9060 and 9090 harddisk drives for the PET.
Wikipedia states: "SASI, which was used in mini- and early microcomputers, defined the interface as using a 50-pin flat ribbon connector which was adopted as the SCSI-1 connector. SASI is a fully compliant subset of SCSI-1 so that many, if not all, of the then-existing SASI controllers were SCSI-1 compatible."
One caveat with old SASI and/or SCSI drives is the TERMPWR line. It provides a power supply for the interface part of devices that are switched off, so that bus terminators for example could be powered. Only if more that one drive drives this line, short circuit problems could appear.
Installing a SCSI drive instead of the SASI-to-MFM controller board in the Commodore disk drive has been reported to melt the TERMPWR line in the cable (yuck!). Also the 9060/9090 drives us 256 byte sectors as opposed to the 512 byte sectors commonly in use today (before the advent of the 4k sectors).
The SCSI standard is now managed by the Technical Committee T10, that unfortunately have decided to give access to the standards only after registration as I understand. Here are some links anyway.
- The SCSI Standards The T10 web site
- SCSI introduction A very good IBM developerworks article on SCSI
- Wikipedia on SCSI
- SCSI FAQ
Return to Homepage
Last modified: 2013-05-02