F1C200s MX25L256、W25Q256按复位键系统不启动,可能是因为FLASH指针指向了后面那16M区域,这个问题怎么解决呢?
离线
reboot命令都可以重启,按reset按键都不能重启(直接进入FEL烧录状态),MX25L256,W25Q256都一样的现象。
MX25L128 reboot命令和reset按键都能正常重启。
离线
跟踪代码lichee/linux-3.10/drivers/mtd/devices/m25p80.c,发现 > 16M 地址,MX和Winbond就进入了4Bytes地址模式
/*
* Enable/disable 4-byte addressing mode.
*/
static inline int set_4byte(struct m25p *flash, u32 jedec_id, int enable)
{
printk("jedec_id=%x,JEDEC_MFR(jedec_id)=%x,CFI_MFR_MACRONIX=%x\n", jedec_id, JEDEC_MFR(jedec_id), CFI_MFR_MACRONIX);
switch (JEDEC_MFR(jedec_id)) {
case CFI_MFR_MACRONIX:
case 0xEF /* winbond */:
if(enable) {
printk("mx enter 4bytes mode\n");
} else {
printk("mx exit 4bytes mode\n");
}
flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B;
return spi_write(flash->spi, flash->command, 1);
default:
/* Spansion style */
flash->command[0] = OPCODE_BRWR;
flash->command[1] = enable << 7;
return spi_write(flash->spi, flash->command, 2);
}
}
static int m25p_probe(struct spi_device *spi)
{
....
if (info->addr_width)
flash->addr_width = info->addr_width;
else {
/* enable 4-byte addressing if the device exceeds 16MiB */
if (flash->mtd.size > 0x1000000) {
flash->addr_width = 4;
set_4byte(flash, info->jedec_id, 1);
} else
flash->addr_width = 3;
}
....
}
static void m25p_shutdown(struct spi_device *spi)
{
struct m25p *flash = dev_get_drvdata(&spi->dev);
pr_info("m25p: spinor shutdown\n");
if (flash->addr_width == 4) {
const struct spi_device_id *id = spi_get_device_id(spi);
struct flash_info *info = (void *)id->driver_data;
if (info->jedec_id) {
const struct spi_device_id *jid;
jid = jedec_probe(spi);
if (IS_ERR(jid)) {
pr_debug("IS_ERR(jid)\n");
return;
} else if (jid != id) {
id = jid;
info = (void *)id->driver_data;
}
}
set_4byte(flash, info->jedec_id, 0);
}
}
离线
弄了四块测试板
离线
4BYTES模式不退出,不支持RDSFDP,RES,REMS这三个命令,后面三个命令是读device id的。
4BYTES模式不退出,不支持RDSFDP,RES,REMS这三个命令,后面三个命令是读device id的。
离线
直接按reset按键,FLASH没有退出4-BYTES模式,导致BROM读不到FLASH DEVICE ID,所以进入了FEL也不能烧录。
据说全志新芯片BROM开机加了 FLASH rst 软复位命令,已经解决了这个问题,用T113-S3/H133的朋友们可以试一试。
离线
实践证明,V3S也是一样的问题。
实践证明,V3S也是一样的问题。
实践证明,V3S也是一样的问题。
离线