操作系统 linux 3.2.0
文件系统: UBIFS
NANDFLASH: MT29F32G08ABAAA.
运行了一段时间后,偶尔系统会运行非常慢,CPU占用率达到100%. 经调试发现,系统变慢时, 是由于执行了数据删除操作后ubi_bgt0d 在后台执行NANDFLASH擦除引起的, 擦除操作本身很快,但擦除后会去有调用 ubi_check_all_ff(), 对于我们的NANDFLASH, 擦除块大小为1MB, 此函数需要用320毫秒才能完成 。
问题:
1. 有什么办法可以加快NANDFLASH的读速度
2. AM3352对NANDFLASH的读写是否可以用DMA方式? 我试着用NAND_OMAP_PREFETCH_DMA 和 NAND_OMAP_PREFETCH_IRQ, 但都无法工作:代码如下:
static void evm_nand_init(int evm_id, int profile)
{
struct omap_nand_platform_data *pdata;
struct gpmc_devices_info gpmc_device[2] = {
{ NULL, 0 },
{ NULL, 0 },
};
setup_pin_mux(nand_pin_mux);
pdata = omap_nand_init(am335x_nand_partitions_128k,
ARRAY_SIZE(am335x_nand_partitions_128k), 0, 0,
&am335x_nand_timings);
if (!pdata)
return;
pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW;
pdata->elm_used = true;
// pdata->xfer_type = NAND_OMAP_PREFETCH_IRQ;
gpmc_device[0].pdata = pdata;
gpmc_device[0].flag = GPMC_DEVICE_NAND;
omap_init_gpmc(gpmc_device, sizeof(gpmc_device));
omap_init_elm();
}