I'm currently trying to get a microdrive (and indeed any compact flash/ide card) to work in memory mapped mode. The reasons for this are a bit long winded - but according to some of the datasheets it *should* provide a faster way to read/write data from a CF card (especially if you can use a memory to memory DMA block).
I've progressed quite well - the card is brought up and recognised by the IDE library and I can get data off it etc.
The problem is that interrupts are not working as I would hope. In memory mapped mode the IRQ line turns into the 'Ready' status line (just to make life harder!). However, I was hoping that if I registered CS_EVENT_READY_CHANGE as a handled event I would get interrupts when the ready signal changed, these I can then pass onto the IDE system.
However, in my current dev. system (x86 with TI1410) I never get any of these events. Indeed, looking into it a bit further the Ready Interrupt enable bit (bit 2 ExCA CSC Int register) is not set.
What is more, I cannot even see anywhere in the i82365 code where this bit might get set. (And, setting it manually seems to cause a kernel panic!).
Should it be possible to attach to this event? Is there anything subtle I should know?
pcmcia-cs version: 3.2.7
Here's the output of dump_exca:
Identification and revision = 0x84
Interface status = 0x6f
[bvd1/stschg] [bvd2/spkr] [detect] [ready] [poweron]
Power control = 0x98
[output] [resetdrv] [Vcc=3.3v] [Vpp off]
Interrupt and general control = 0x50
[intr ena] [irq=0]
Card status change interrupt control = 0x08
Card detect and general control = 0x80
memory 0: 0x0000-0x0fff @ 0xa0000000 [on] [8bit] [ws1] [reg]
memory 1: 0x0000-0x0fff @ 0xa0001000 [on] [16bit]
memory 2: 0x0000-0x0fff @ 0x00000000 [off] [8bit]
memory 3: 0x0000-0x0fff @ 0x00000000 [off] [8bit]
memory 4: 0x0000-0x0fff @ 0x00000000 [off] [8bit]
io 0: 0x0000-0x0001 [off] [8bit]
io 1: 0x0000-0x0001 [off] [8bit]
Socket 0 function 0:
Config register base = 0x0200, mask = 0x000f
Configuration option register = 00
[index = 00]
Card configuration and status register = 0x80
Pin replacement register = 0x2e
[ready] [bvd2] [bvd1] [ready_event]
Socket and copy register = 00
[socket = 0] [copy = 0]
Hmmm, you are correct that just saying that you want to receive these events does not enable them in the socket controller.
The iflash2+_mtd driver does use READY events. It uses MTDHelperEntry(MTDRDYMask, ...) to enable them. I believe that you can also use this call even though your driver is not an "MTD".
Log in to post a comment.
Sign up for the SourceForge newsletter:
You seem to have CSS turned off.
Please don't fill out this field.