Back Next
IEEE 488 - external bus running asynchronously to CPU and internal bus.
  
IEEE 488 recognizes 3 types of devices :

Initiator or controller - arbitrator that tasks out jobs.

Talker - device given control of bus for current task.

Listeners - devices responding to talker.

******************
!DAV - data valid - true when set low.
!NRFD - not ready for data - true when set low.
!NDAC - not data accepted - true when set low.

Arbiter(user) selects an initiator and assigns it a task.

Initiator selects a talker (could be itself).
  Using a combination of control lines and device address data on data lines.

Talker begins 'conversation' with target by sending 'data'
  that selects listener. All subsequent data 'listened' to
  by targeted listener.

Each data transfer requires a sequence of handshake/status signals.

Transfers are of 1 byte.

No protocol limit to number of bytes transferred.

Talker will signal end of transfer with EOI status line.


******************

Prep.

* Controller selects a talker and initiates a task. 

* Talker selects a listener.

Begin data transmission.

  Talker indicates data invalid (new transaction) by bring DAV high.

  Listeners see DAV and finish last transaction. Each listener then brings 
    both !NRFD and !NDAC low indicating everyone in an idle state.

  Talker puts data on data lines. 

  Note that there is an implied time frame, after listeners have held
    both !NRFD and !NDAC low for a short time, each will allow !NRFD high.

  When Talker sees that all devices are listening, it indicates that 
    new data is valid by taking !DAV low.

  As each listener reads data, it indicates that it is busy processing the new 
    data by bringing !NRFD low. 

  Once read, each listener then indicates it has taken the new data it allows
    !NDAC to go high.

    Only addressed device will process it further and slowest device determines
    overall speed.
 
When all listeners indicate data accepted, talker indicates data invalid and 
  process starts over for next byte of data. (!DAV high)

While both !NRFD and !NDAC can be low at the same time, only one or the other 
  can be high at any time. If both are high for more than a short time, it is 
  an error condition which the controller must attempt to recover from.

******************

Notice controller or initiator can be independent of talker/listeners. 

Talker (once chosen) always drives loop and writes data, there is no data 
direction line.

Also, transaction is asynchronous, there is no clock and all timing handled 
  by handshake (control and status). 

Data transfers single byte along with handshaking, so fairly high overhead,
  although much of this is done in parallel.

Data rate determined by the slowest device.  But can mix fast and slow 
  devices on same bus.

The sequence described above is for the Commodore systems, other users of the 
  IEEE-488 bus may use a different hand-shaking sequence for their devices.