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.

Startware AM335X的GPMC速度问题?



大家好!

   我现在使用startware的SDK,使用MX30LF1G18AC的nandflash,使用GPMC的异步模式进行读写,8位位宽, 现在遇到读写速度很慢的问题,现在理论算了下nandflash的读写速度应该有30MB/S, 实际测试速度只有900KB/S,  我尝试过了EDMA,开启nandflash的cache(页缓冲),开启GPMC的预读取引擎,cache也开启了,感觉速度还是上不去。。

   哪位大神帮忙看看。

  MX30LF1G18AC,通用的ONFI接口 , 时序有:

    

  

我配置的GPMC参数如下:

/* NAND related */
#define NAND_CS0_BASEADDR (0x00000000)
#define NAND_CS0_REGIONSIZE (GPMC_CS_SIZE_128MB)
#define NAND_DATA_XFER_MODE (NAND_XFER_MODE_CPU)
//#define NAND_DATA_XFER_MODE (NAND_XFER_MODE_DMA)
#define NAND_BUSWIDTH (NAND_BUSWIDTH_8BIT)
#define NAND_CHIP_SELECT (NAND_CHIP_SELECT_0)
#define NAND_BLOCK_SIZE_IN_BYTES (NAND_BLOCKSIZE_128KB)
#define NAND_NUMOF_BLK (2048)
#define NAND_MANUFATURER_MICRON_ID (0x2C)
#define NAND_DEVICE_ID (0xF1)

#define NAND_CSWROFFTIME (30)
#define NAND_CSRDOFFTIME (30) //修改 31- 30
#define NAND_CSONTIME (0)

#define NAND_ADVONTIME (0)
#define NAND_ADVAADMUXONTIME (0)
#define NAND_ADVRDOFFTIME (23) //修改 31- 30
#define NAND_ADVWROFFTIME (23) //修改 31- 30
#define NAND_ADVAADMUXRDOFFTIME (0)
#define NAND_ADVAADMUXWROFFTIME (0)

#define NAND_WEOFFTIME (22) // GPMC_CONFIG4_0 Bit24-bit28
#define NAND_WEONTIME (5) // GPMC_CONFIG4_0 Bit16-bit19
#define NAND_OEAADMUXOFFTIME (0) // GPMC_CONFIG4_0 Bit13-bit15
#define NAND_OEOFFTIME (24) // GPMC_CONFIG4_0 Bit8-bit12
#define NAND_OEAADMUXONTIME (0) // GPMC_CONFIG4_0 Bit4-bit6
#define NAND_OEONTIME (7) // GPMC_CONFIG4_0 Bit0-bit3

#define NAND_RDCYCLETIME (23) // GPMC_CONFIG5_0
#define NAND_WRCYCLETIME (23) // GPMC_CONFIG5_0
#define NAND_RDACCESSTIME (21) // GPMC_CONFIG5_0
#define NAND_PAGEBURSTACCESSTIME (0)

#define NAND_BUSTURNAROUND (0) // GPMC_CONFIG6_0 Bit0-bit3
#define NAND_CYCLE2CYCLEDIFFCSEN (0) // GPMC_CONFIG6_0 Bit6
#define NAND_CYCLE2CYCLESAMECSEN (1) // GPMC_CONFIG6_0 Bit7
#define NAND_CYCLE2CYCLEDELAY (0) // GPMC_CONFIG6_0 Bit8-bit11
#define NAND_WRDATAONADMUXBUS (10) // GPMC_CONFIG6_0 Bit16-bit19
#define NAND_WRACCESSTIME (22) // GPMC_CONFIG6_0 Bit24-bit28

相应的GPMC寄存器的值为:

预读取引擎:

GPMC_PREFETCH_CONTROL[0x00000001]
GPMC_PREFETCH_STATUS[0x40001fc0]
GPMC_PREFETCH_CONFIG1[0x18004084]
GPMC_PREFETCH_CONFIG2[0x00002000]
7个GPMC的寄存器:
GPMC_CONFIG1[0x00000810]
GPMC_CONFIG2[0x001e1e00]
GPMC_CONFIG3[0x00171700]
GPMC_CONFIG4[0x16051807]
GPMC_CONFIG5[0x00151717]
GPMC_CONFIG6[0x16050f80]
GPMC_CONFIG7[0x00000840]

=====================================================

另外在这个帖子上看到e2e.ti.com/.../1457937

需要开启MMU的GPMC部分,不可缓冲:

REGION regionDev1 = {
MMU_PGTYPE_SECTION, 0x50000000, 16,
MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,
MMU_CACHE_WB_WA),
MMU_REGION_NON_SECURE,
MMU_AP_PRV_RW_USR_RW,
(unsigned int*)pageTable
};

其中GPMC的地址是0x50000000.

但是会挂掉!!!

======================================================

有哪位大神整个GPMC的,支个招??

  • 没人啊,自己顶一下,现在是如果调整这里,相应的速度会有点点提升!

    #define NAND_CSWROFFTIME (30)
    #define NAND_CSRDOFFTIME (30) //修改 31- 30
    #define NAND_CSONTIME (0)

    #define NAND_ADVONTIME (0)
    #define NAND_ADVAADMUXONTIME (0)
    #define NAND_ADVRDOFFTIME (23) //修改 31- 30
    #define NAND_ADVWROFFTIME (23) //修改 31- 30
    #define NAND_ADVAADMUXRDOFFTIME (0)
    #define NAND_ADVAADMUXWROFFTIME (0)

    #define NAND_WEOFFTIME (22) // GPMC_CONFIG4_0 Bit24-bit28
    #define NAND_WEONTIME (5) // GPMC_CONFIG4_0 Bit16-bit19
    #define NAND_OEAADMUXOFFTIME (0) // GPMC_CONFIG4_0 Bit13-bit15
    #define NAND_OEOFFTIME (24) // GPMC_CONFIG4_0 Bit8-bit12
    #define NAND_OEAADMUXONTIME (0) // GPMC_CONFIG4_0 Bit4-bit6
    #define NAND_OEONTIME (7) // GPMC_CONFIG4_0 Bit0-bit3

    #define NAND_RDCYCLETIME (23) // GPMC_CONFIG5_0
    #define NAND_WRCYCLETIME (23) // GPMC_CONFIG5_0
    #define NAND_RDACCESSTIME (21) // GPMC_CONFIG5_0
    #define NAND_PAGEBURSTACCESSTIME (0)

    #define NAND_BUSTURNAROUND (0) // GPMC_CONFIG6_0 Bit0-bit3
    #define NAND_CYCLE2CYCLEDIFFCSEN (0) // GPMC_CONFIG6_0 Bit6
    #define NAND_CYCLE2CYCLESAMECSEN (1) // GPMC_CONFIG6_0 Bit7
    #define NAND_CYCLE2CYCLEDELAY (0) // GPMC_CONFIG6_0 Bit8-bit11
    #define NAND_WRDATAONADMUXBUS (10) // GPMC_CONFIG6_0 Bit16-bit19
    #define NAND_WRACCESSTIME (22) // GPMC_CONFIG6_0 Bit24-bit28