Part Number:AM3352
操作系统 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();
}
Nancy Wang:
可以使用DMA, 利用DMA是可以降低cpu负载和提高性能,具体可阅读以下NAND章节Transfer Modes部分的内容。
http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components/Kernel/Kernel_Drivers/Storage/NAND.html
DMA使能部分晚一些再给您回复。
,
Nancy Wang:
DMA部分的配置我帮您升级到了英文论坛,请查看回复并跟进。
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1035731/am3352-gpmc-dma-configuration
,
johnson lu:
我看了相关文档,说是用DMA方式后,CPU占用率会降低,但读写速度会降低10%~20%, 这点无法接受。决定代码时还是不启用ubi_check_all_ff 来解决此问题
,
Nancy Wang:
好的,感谢分享!
TI中文支持网