Hi, I'm prototyping ATMEGA128 + DM9000 hardware. I have run into strange problem, creating the driver for DM9000. I can read the registers, but cannot write them. More specifically: I cannot write the DATA (CMD pin = 1) location, although there is no problem with writing the INDEX (CMD pin = 0) location - I can read the default values of the registers and this requires succesful write operation to INDEX. Of course, I have checked with the oscilloscope all the signals, levels and timings of the DATA write cycle and they look OK. Of course the CMD pin is given high level, there is nIOW pulse, etc.
The code is based on the linux driver from the Davicom's site, and cross-verified by reading the app. note. Essentialy, I only add the implementation of the "atom" in, out operations. I have made the general I/O interface to the DM9000 bus, that means, the code controls every line of the bus separately - I don't use memory read/write instructions.
There is one hardware change with respect to the reference design. I have made a fixed connection of the nAEN pin to the ground (just saving one ATMEGA pin...), meaning, the DM9000 is chip-selected all the time. Maybe that's the problem? Maybe DM9000 possibly needs the falling edge on the nAEN pin to write the INDEX location? Any suggestions? Any kind of hint from you has a potential to cut down my suffering :)