This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x w25Q256

--- 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平台上使用。