home *** CD-ROM | disk | FTP | other *** search
-
- Someone sent me this - use it if it's useful.
-
- ================= Begin forwarded message =================
-
- From: fontana@di.epfl.ch (" ")
- To: aa457@freenet.carleton.ca
- Subject: AM33C93/A
- Date: Tue, 03 Aug
-
-
- Hi !
-
- I'm programing a driver for Smaky (ever heard about?) which rely on the
- AM33C93/A chip. A friend of mine told me you spoke with him about the bugs
- of that controller. Could you tell me in few words what's the problem and
- how it can be avoided ? I mailed to the guys whose names were mentionned
- in the README files of the BSD source, but none of them knew about the bug
- or the workaround. Also, do you know people using the B/C release ?
-
- While working with the AM33C93/A, I found out that the internal state machine
- is NOT updated properly, which causes the controller to generate interrupt
- that give WRONG informations about what's happening. Here are a few examples
- and how I solved the problem.
-
- 1) An Unexpected Status In phase interrupt is generated after a data in phase.
- This happened after the synchronous negociation, during an Inquiry command.
- I checked out and found no error (5 byte to transfer, 5 bytes transfered,
- 0 byte left in the Transfer Count Registers), and therefore simpy get the
- status as normally.
-
- 2) During synchronous negociation, the AM3393/A went wild... When the first
- byte of the negociation occured, a Terminated interrupt was generated,
- which is correct since there was a SelectAndTransfer command executing.
- In answer, I get the first byte of the message. A Pause/Aborted interrupt
- is generated to allow the driver to read the message before accepting it,
- which is still correct according to the specifications. Knowing now it's
- an extended message, I start another Transfer Info (single byte) to get
- the size of the tail of the extended message. Then, instead of generating
- another Pause/Aborted interrupt after the second byte (as for the first),
- a Service Required Interrupt is generated !!! Then, the 33C93/A used to
- generate some Pause/Aborted Interrupt and some Service Required Ints. I
- guess it's a problem of timing
-
- To solve this problem, I get the byte only when they are requested on the
- bus. In aswer to the Pause/Aborted Interrupt generated on the last byte
- of a Transfer Info during a Message In phase, I only negate Acknowledge,
- and wait for the next Service Required Interrupt to get the next byte.
-
- 3) I modified the driver to support the TARGET role of the SCSI protocole.
- In answer to a selection with ATN, I tried to get the Message Out, which
- always failed with an ATN asserted. Though it's perfectly normal that ATN
- is asserted during a Selection... with ATN, the AM33C93/A acts as if it
- was an error.
- To get around that problem, I re-program the Control Register at each
- phase change, so that ATN is ignored during Message Out phase, and
- considered in any other phase.
-
- 4) The same kind of problems happened with the DMA transfers. According to
- the specifications, the DMA mode is used ONLY for DATA phases, but the
- chip does it different and use that DMA mode in some other phases.
- To solve this, I go for the same way as for the ATN problem: I re-program
- the Control Register according to the current phase (DMA only during
- Data In/Out).
-
-
- Thanks for answering my request
-
- Pierre Fontana
-
- " Sometimes I think the surest sign that intelligent life exists somewhere in
- the Universe is that none of it ever tried to contact us (Calvin & Hobbes). "
-
-
-
-
- --
- David Jones FreeNet: (preferred) aa457@freenet.carleton.ca
- 6730 Tooney Drive NotSoFreeNet: dej@qpoint.ocunix.on.ca
- Orleans, Ontario Fidonet: 1:163/109.8
- K1C 6R4, Canada Phone: 1-613-830-1437
-
-