执行对S25FL128前1M 空间的前128k flash擦除时,报如下错误
spi_general_wait_ready(85): Error: SPI nor wait ready timeout, status[0x3]
hifmc100_reg_erase_one_block(333): Error: Erase wait ready fail! reg:0x1
在S25FL128器件中 有4k sector 扇区分布,共 128k byte 置于top 或bottom位置。这128k 擦除典型擦除速度为30k byte每秒,以64k为一个扇区操作擦除时,会因为内核等待擦除超时而造成失败。
海思内核的超时时间定义为2秒,这对于这种特殊的spi nor flash 来说这时间定的太短了。
linux-3.10.y\drivers\mtd\hifmc_common.h中
#define FMC_MAX_READY_WAIT_JIFFIES (2 * HZ)
修改方法:
1.直接将此值修改为(40*HZ)与Hi3536平台一致
2.对S25FL128前128k, 在if (ioctl(g_devFd, MEMERASE, &erase) < 0)后,不管成功与否均加上个把秒的sleep延迟。