This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335X GPMC的片选问题



大家好,我的GPMC CS0用于NandFlash, GPMC CS1用于外围的NOR器件,CS0可以正常工作,CS1确始终无法输出信号。

以下是我的引脚配置:

static struct pinmux_config nand_pin_mux[] = {
{"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad8.gpmc_ad8", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad9.gpmc_ad9", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad10.gpmc_ad10", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad11.gpmc_ad11", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad12.gpmc_ad12", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad13.gpmc_ad13", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_ad14.gpmc_ad14", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
{"gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_csn1.gpmc_csn1", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
{NULL, 0},
};

//配置GPMC 寄存器
val = gpmc_cs_read_reg(ST16CX54_GPMC_CS, GPMC_CS_CONFIG7);
val &= ~GPMC_CONFIG7_CSVALID; /*disable chip-select*/
gpmc_cs_write_reg(ST16CX54_GPMC_CS, GPMC_CS_CONFIG7, val);

gpmc_cs_write_reg(ST16CX54_GPMC_CS,GPMC_CS_CONFIG1, GPMC_CONFIG1_READTYPE_ASYNC | /*set read type asynchronous*/
GPMC_CONFIG1_WRITETYPE_ASYNC | /*set write type asynchronous*/
GPMC_CONFIG1_DEVICETYPE_NOR | /*set device type NOR*/
GPMC_CONFIG1_MUXADDDATA | /*set device address and data multipleded attached device*/
GPMC_CONFIG1_FCLK_DIV3); /*GPMC_CLK frequency=GPMC_FCLK frequency/3*/

gpmc_cs_set_timings(ST16CX54_GPMC_CS, &st16cx54_gpmc_timings); /*set timing parameters*/

// 申請gpmc 片選空間並用ioremap 函數映射為內核虛擬地址
/*********** 為FIFO 申請GPMC chip-select 空間**********/
if ((ret = gpmc_cs_request(ST16CX54_GPMC_CS, SZ_32K, &gpmc_dev->phys_base))<0)
{
printk(KERN_ERR "gpmc_cs_request failed ret is %d.\n",ret);
return -1;
}

/*********** 為FIFO 申請虛擬內存空間**********/
if (!request_mem_region(gpmc_dev->phys_base, ST16CX54_GPMC_FIFO_SIZE, ST16CX54_NAME))
{
printk(KERN_ERR "request_mem_region failed.\n");
gpmc_cs_free(ST16CX54_GPMC_CS);
return -1;
}

以下是寄存器配置的打印信息:

phys_base 0x1000000
GPMC_CS_CONFIG1 = 0x28000200
GPMC_CS_CONFIG2 = 0x50500
GPMC_CS_CONFIG3 = 0x22000010
GPMC_CS_CONFIG4 = 0x5026512
GPMC_CS_CONFIG5 = 0x40909
GPMC_CS_CONFIG6 = 0x80000000
GPMC_CS_CONFIG7 = 0xf41

谁能帮我看下是什么地方出了问题?