SST 39VF1601
Thayne Harbaugh
tharbaugh at lnxi.com
Mon Apr 5 11:31:57 EDT 2004
On Fri, 2004-04-02 at 16:30, Jamie Guinan wrote:
> Hello,
>
> I've been struggling to get a pair of these chips working, under Linux
> 2.6.4, on a custom ARM board based on the Sharp/LogicPD LPD7A404. I have
> two 1Mbx16 chips side-by-side for 32-bit data access.
>
> The chip is not CFI compliant, as is the case with a similar chip
> mentioned in this thread,
>
> http://lists.infradead.org/pipermail/linux-mtd/2002-May/005059.html
>
> but unfortunately that thread kind of petered out without a clear
> solution.
I read the thread - it sounds interesting re. the three write sequence
rather than the typical two. Sick. SST seems to be quite creative in
thinking up ways to make their parts non-standard. I could go on about
some of their other parts that they claim have particular *features*
that are better know to me as *bugs* and lack of attention to details,
but this is a family mailing list and my comments wouldn't be
appropriate.
> I made some progress by adding a few bits to jedec_probe.c[1], and I got
> as far as this:
>
> Search for id:(bf 234b) interleave(2) type(2)
I was a bit confused, but then I realized that the thread mentioned
above is an SST39VF160 and your part is an SST39VF1601.
> MTD jedec_match(): Check fit 0x00000000 + 0x00020000 = 0x00020000
> MTD jedec_match(): check unlock addrs 0xaaaa 0x5554
> MTD jedec_match(): check ID's disappear when not in ID mode
> MTD jedec_match(): return to ID mode
> MTD jedec_probe_chip(): matched device 0xbf,0x234b unlock_addrs: 0xaaaa 0x5554
> Found: SST 39VF1601
> Things get a bit weird after that (Probe at addr_unlock1 ... past the
> end), but I wanted to start with the basics.
I hesitate to say that's broken in some respects. Some chips take
addresses outside of their address space. I guess that if such a chip
is in use then it needs to have more space than just the read size
mapped. I can think of a few cases where this should be fixed.
> Questions:
>
> 1) What are "unlock addrs"?
The unlock addrs are the special sequences that are written for starting
a destructive operation such as an erase or a write. The name could
possibly be confused with locking/unlocking regions of the flash for
read/write, but that's what they have been historically called.
> The chip does not have an "unlock bypass"
> mode like I've seen in other chips, if that is what it means. Will not
> having this cause problems later on? I'm using MTD_UADDR_UNNECESSARY for
> all 3 .uaddr[] elements.
Shouldn't cause problems later on. If you want to erase and program
then the unlock addrs are necessary - they're even necessary for
entering ID mode. How you get the above sequence of DEBUG messages when
the unlock addrs are set to MTD_UADDR_UNNECESSARY is confusing.
>
> 2) The .DevSize field is per-chip or for the pair of devices?
> I obviously haven't set that right yet.
Per chip - it is multiplied for interleaved chips.
>
> -Jamie
>
> [1]
>
> #define SST39VF1601 0x234b
>
> ...
>
> }, {
> .mfr_id = MANUFACTURER_SST,
> .dev_id = SST39VF1601,
> .name = "SST 39VF1601",
> /* I don't think this is supported.*/
> .uaddr = {
> [0] = MTD_UADDR_UNNECESSARY,
> [1] = MTD_UADDR_UNNECESSARY,
Shouldn't this be MTD_UADDR_0x5555_0x2AAA?
> [2] = MTD_UADDR_UNNECESSARY,
> },
> .DevSize = SIZE_128KiB,
> .CmdSet = P_ID_AMD_STD,
> .NumEraseRegions= 1,
> .regions = {
> ERASEINFO(0x01000,64),
Shouldn't this be ERASEINFO(0x00800, 64)?
> }
--
Thayne Harbaugh
Linux Networx
More information about the linux-mtd
mailing list