world leader in high performance signal processing
Trace:

Differences

This shows you the differences between two versions of the page.

hw:cards:cf-ide-nand [2009/03/18 11:35]
hennerich CF Common Memory Example using PATA Platform driver
hw:cards:cf-ide-nand [2010/09/09 22:02] (current)
Line 36: Line 36:
  
 The card uses Bi-directional BUS switches (IDT QS316245) to perform Bus isolation and 5V to 3.3V logic level translation. In most of the applications a CPLD (Xilinx XC9572XL-7VQ64) as present in the reference design is not necessary. Please refer to the CPLD schematics. The CPLD is mainly used to perform address decoding, and to insert three additional bus setup cycles, to met the lower IDE ATA PIO Mode and CF I/O Mode specifications, to achieve SCLK running up to 80 MHz. The card uses Bi-directional BUS switches (IDT QS316245) to perform Bus isolation and 5V to 3.3V logic level translation. In most of the applications a CPLD (Xilinx XC9572XL-7VQ64) as present in the reference design is not necessary. Please refer to the CPLD schematics. The CPLD is mainly used to perform address decoding, and to insert three additional bus setup cycles, to met the lower IDE ATA PIO Mode and CF I/O Mode specifications, to achieve SCLK running up to 80 MHz.
 +
 +
 +===== Known Issues =====
 + 
 +Recent Linux libata assumes the IDE Interrupt INTRQ staying inactive low the time between the IRQ is requested and the device is configured. 
 +The problem here is that the INTRQ signal output line has high impedance when no devices are selected or interruption is disabled.
 +
 +The CF-IDE-NAND Card however has 10kOhm Pull-Up on INTRQ - which will then cause a 
 +"**irq XX: nobody cared**" error during libata driver initialization.
 +
 +Workaround is to add a stronger (1kOhm) Pull-Down to INTRQ.\\
 +See picture below:\\ 
 +
 + {{:hw:cards:ide_intrq_pull_down.jpg?640|}}
 +
 +On the CF Card socket there is also a pull-up – but there we had no choice since in PC-Card IO mode the Interrupt is asserted Low. So this was a tradeoff, and at the time doing the card – it worked without errors, in all modes.
 +
 +Assuming you are going to use the CF Card Interface in TRUE IDE MODE with interrupt, you need to add this workaround there too. As an alternative use either TRUE IDE MODE without interrupt, the PCMCIA driver with IDE Card Service Drivers or better the CF Common Memory Mode Interface without IDE Interrupt.
 +
  
 ===== Hardware Setup ===== ===== Hardware Setup =====
Line 84: Line 103:
 ===== CF Common Memory Example using PATA Platform driver ===== ===== CF Common Memory Example using PATA Platform driver =====
    
-If you like to use the CF Card in common memory mode (fastest), you need to use following PATA Platfrom configuration.+If you like to use the CF Card in common memory mode (fastest), you need to use following [[linux-kernel:drivers:pata_platform | PATA Platfrom]] configuration.
  
-<code c> +<source trunk/arch/blackfin/mach-bf537/boards/stamp.c:/CF_IDE_NAND_CARD_USE_CF_IN_COMMON_MEMORY_MODE/2-2/^$/ c linux-kernel>
-#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)+
  
-static struct pata_platform_info bfin_pata_platform_data = { +<note tip> 
- .ioport_shift = 0+Since we’re interfacing to an CF cardwe don’t need the interrupt. If the interrupt is left unspecified the new PATA driver defaults to polling. Which is absolutely fine – because there are almost no delays. 
-};+</note>;
  
-static struct resource bfin_pata_resources[] = { +&lt;note warning&gt;You have the choice in the ''boards'' directoryto use ''CF_IDE_NAND_CARD_USE_CF_IN_COMMON_MEMORY_MODE'' or ''CF_IDE_NAND_CARD_USE_HDD_INTERFACE''The default may not be the one you think it is: 
-+<source trunk/arch/blackfin/mach-bf537/boards/stamp.c:/CF_IDE_NAND_CARD_USE_HDD_INTERFACE/1-/^$/ c linux-kernel>
- .start = 0x20211820, +
- .end = 0x2021183F, +
- .flags = IORESOURCE_MEM, +
- }, +
-+
- .start = 0x2021181C, +
- .end = 0x2021181F, +
- .flags = IORESOURCE_MEM, +
- }, +
-}; +
- +
-static struct platform_device bfin_pata_device = { +
- .name = &quot;pata_platform&quot;, +
- .id = -1, +
- .num_resources = ARRAY_SIZE(bfin_pata_resources), +
- .resource = bfin_pata_resources, +
- .dev = { +
- .platform_data = &bfin_pata_platform_data, +
-+
-}; +
-#endif +
-</code> +
- +
-<note tip> +
-Since we’re interfacing to an CF card, we don’t need the interrupt. If the interrupt is left unspecified the new PATA driver defaults to polling. Which is absolutely fine – because there are almost none delays.+
 </note> </note>
  
Line 128: Line 121:
 <xterm> <xterm>
 scsi0 : pata_platform scsi0 : pata_platform
-ata1: PATA max PIO0 no IRQ, using PIO polling mmio cmd 0x20211820 ctl 0x2021181c+ata1: PATA max PIO0 no IRQ, using PIO polling mmio cmd 0x20211800 ctl 0x2021180E
 ata1.00: CFA: SanDisk SDCFX-1024, HDX 4.03, max PIO6 ata1.00: CFA: SanDisk SDCFX-1024, HDX 4.03, max PIO6
 ata1.00: 2001888 sectors, multi 0: LBA ata1.00: 2001888 sectors, multi 0: LBA
Line 364: Line 357:
 ====== NAND Flash Introduction ====== ====== NAND Flash Introduction ======
  
-<note> +For information about the NAND Flash mtd Blackfin Driver and Interface, please follow this link:
-The NAND chip itself is not currently supported, please see [[http://blackfin.uclinux.org/pm/task.php?func=detailtask&project_task_id=520&group_id=17&group_project_id=74|this task]]) +
-</note> +
- +
- +
-For information about the NAND Flash mtd Blackfin Driver and Interface, +
-please follow this link:+
  
 [[linux-kernel:drivers:bfin_async_nand]] [[linux-kernel:drivers:bfin_async_nand]]