— linux-3.2.7.3/drivers/mtd/devices/m25p80.c 2013-12-19 13:52:01.102095098 +0800
+++ linux-3.2.7.ny3/drivers/mtd/devices/m25p80.c 2014-08-19 17:24:06.174005713 +0800
@@ -168,6 +168,7 @@
{
switch (JEDEC_MFR(jedec_id)) {
case CFI_MFR_MACRONIX:
+// case 0xEF: /* winbond */
flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B;
return spi_write(flash->spi, flash->command, 1);
default:
@@ -761,6 +762,7 @@
{ "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
{ "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
{ "w25q128",INFO(0xef4018, 0, 64 * 1024, 256, 0) },
+ { "w25q256",INFO(0xef4019, 0, 64 * 1024, 512, 0) },
/* Catalyst / On Semiconductor — non-JEDEC */
{ "cat25c11", CAT25_INFO( 16, 8, 16, 1) },
上面是winbond w25Q256的驱动,我发现了一个问题,就是上电启动的时候正常,重启或者按复位键就死掉了,后来发现是第一行patch引起的。CPU ROMCODE只支持3byte读的方式用逻辑分析仪得到的是 00 00 40,由于第一行patch的原因内核设置为4byte读 00 00 00 40。所以重启就死掉了。现在确定一点
1.ROMCODE只支持3byte的读不支持4byte的读
2.内核初始化的时候因为访问容量的问题必须设置为4byte的读。3byte 24位支持16M空间。而我们用的是256Mbit的是32M所以只能访问一半的空间
3.reboot和按重启键是由区别的经过验证.reboot执行/etc/inittabe shutdown脚本内容。但是重启键不支持。所以无法在启动后改为3byte读的方式
所以这个问题又陷入到一个圈子里面了,如果CPU不改ROMCODE支持256Mbit读的话那么这颗芯片就无法在am335x平台上使用。
Jian Zhou:
你们既要支持reboot重启也要支持按键重启吗?其实我觉得按键重启把reset同时连到SPI FLASH的VCC,让CPUwarm reset的时候,SPI FLASH也跟着reset就可以了
Jian Zhou:
回复 Jian Zhou:
更新一下这个帖子:
1.如果是硬件reset,可以将系统reset按键直接连到w25Q256的/reset引脚上。
2.如果是Linux软件reboot,可以参考下面的方法增加shutdown: http://blog.csdn.net/manfeel/article/details/43530817