[PROBLEM] buffer write error (status timeout) due to unexpected behavior of P30 Micron flashes during state change "erase -> erase suspend"
BRUNMAYR Peter
Peter.BRUNMAYR at frequentis.com
Fri Jan 31 09:58:47 EST 2014
We are using two Micron P30 PC28F00AP30EFA flashes in parallel connected to a P1022 PowerPC with Linux 3.4.61. During extensive erase/suspend/resume cycles,
one of the flashes sometimes sends seemingly random data instead of the expected content of the status register. Due to a misinterpretation of the received data,
the flash driver may issue the next command before the flash is actually ready. In our setup this lead to buffer write errors.
The problem concerns the chip_ready() function in drivers/mtd/chips/cfi_cmdset_0001.c. In the case the flashes are currently erasing, the driver sends 0xB0 to
suspend the current operation and 0x70 to ensure "read status" mode. After that the driver polls the flashes until bit 7 in the status register is set (device ready).
Our observations showed, that sometimes one of the flashes sends seemingly random data (e.g. 0x3ff0) right before it has finished suspending the erase operation.
If bit 7 is accidentally set, the driver misinterprets this as the status "device ready" and aborts the loop to issue the next command. In our system, the following buffer
write command was not recognized by the concerned flash, which further lead to the aforementioned buffer write error.
(01) write: 0x00b000b0 @0xd1d800 erase suspend command
(02) write: 0x00700070 @0xd1d800 read status register command
(03) read: @0xd1d800: 0x00000000 flash1: device busy flash2: device busy
(04) read: @0xd1d800: 0x00000000 flash1: device busy flash2: device busy
(05) read: @0xd1d800: 0x00000000 flash1: device busy flash2: device busy
(06) read: @0xd1d800: 0x00000000 flash1: device busy flash2: device busy
(07) read: @0xd1d800: 0x00400000 flash1: device busy, erase suspend in effect, flash2: device busy
(08) read: @0xd1d800: 0x00400040 flash1: device busy, erase suspend in effect, flash2: device busy, erase suspend in effect
(09) read: @0xd1d800: 0x00400040 flash1: device busy, erase suspend in effect, flash2: device busy, erase suspend in effect
(10) read: @0xd1d800: 0x00400040 flash1: device busy, erase suspend in effect, flash2: device busy, erase suspend in effect
(11) read: @0xd1d800: 0x00400040 flash1: device busy, erase suspend in effect, flash2: device busy, erase suspend in effect
(12) read: @0xd1d800: 0x00400040 flash1: device busy, erase suspend in effect, flash2: device busy, erase suspend in effect
(13) read: @0xd1d800: 0x00c03ff0 flash1: device ready, erase suspend in effect, flash2: not ready and sends garbage
(14) read: @0xd1d800: 0x00c03ff0 flash1: device ready, erase suspend in effect, flash2: not ready and sends garbage
(15) read: @0xd1d800: 0x00c000c0 flash1: device ready, erase suspend in effect, flash2: device ready, erase suspend in effect
Did anyone observe a similar behavior with Micron flashes respectively does anyone have an explanation for this behavior?
Thanks & best regards,
Peter
_____________________________________
Peter Brunmayr
FREQUENTIS AG
Innovationsstrasse 1, 1100 Vienna, Austria
Web www.frequentis.com
Handelsgericht Wien (Vienna Commercial Court): FN 72115 b
DVR 0364797, ATU 14715600
______________________________________
More information about the linux-mtd
mailing list