[flashrom] Additional voltages

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Tue Jul 5 06:37:02 CEST 2011


On Mon, 4 Jul 2011 22:27:59 -0400
Steven Zakulec <spzakulec at gmail.com> wrote:

> Hello, I've attached some additional voltages for a number of the remaining
> chips in flashchips.c.  

thanks for your continuous contributions :)

> I have some questions about some of the remaining
> chips:
> 
> Should the voltage range always be the most restrictive one offered, with
> others mentioned in the comments?

that's most probably what we want for now, yes.
i dont know what we are gonna do with the values, but a possible use
case could be to tell an external programmer what voltage it should
supply. we would have to choose a safe value from a number of choices
that the programmer supports. since we are not able to differentiate
between different speed grades (or whatever the distinction of chips
with different voltage ranges are), we have to choose one of the most
conservative range in our database.
later this could be extended to allow the user to set a voltage outside
of the safe range, but inside the extended ranges.

> Where can I find the datasheet for the Sanyo LF25FW203A?

good question, i cant find one either.
the guy who has added this (Sean Nelson <audiohacked at gmail.com>)
is currently unavailable afaik.

> Can I ignore the .REMS/etc text after a chip name when looking for the
> datasheet? Is it something I need to be aware of?

yes. the suffix corresponds with the opcode used to identify the chip.
some chips do support multiple such opcodes and are added multiple
times (for now) in flashchips.c
supply voltage is independent and so should be equal for such
variations.

> Is there a difference for M25P40 and P40-old?

similar to above the old version seems to use a different probing
method. i have not looked at the datasheet(s) so i can't say if the
supply voltages are different.
http://www.coreboot.org/pipermail/coreboot/2008-May/034640.html and the
preceding discussion may shed some light on this.
if i were you i would just leave it out for now.

> For the W25Q64, it seems to be on the same datasheet as the Q80, Q16, and
> Q32, but it's only referenced once in the sheet, and makes me wonder if this
> is the correct sheet then.

there are multiple versions of the W25Q64 (and maybe also of the other
chips in the 25Q series, i have not looked into it).
http://www.winbond.com/hq/enu/ProductAndSales/ProductSearch/?partno=w25q64
V: 3V (no datasheet, probably predecessor of BV.
BV: 3V (deprecated)
CV: 3V (successor of BV)
DW: 1.8V (not supported by flashrom yet, has a different id (0x6017)

the difference between BV and CV regarding the supply voltage is, that
the BV specs a supply voltage of at least 3.0V for "Octal Word Read
Quad I/O (E3h)" when used with a clock of 50MHz.
this can be ignored for now, just use 2.7-3.3 imho.

> Index: flashchips.c
> ===================================================================
> --- flashchips.c	(revision 1364)
> +++ flashchips.c	(working copy)

i have not looked into it in detail yet, just a few comments...

> @@ -145,6 +145,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4750, 5250}, /* -55 speed is +-5%, all others +-10% */
>  	},
>  
>  	{
> @@ -256,6 +257,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -45R speed is 3.0-3.6V regulated, others 2.7-3.6V */
>  	},

i think you can drop "regulated" in those entries. its use in the
datasheet is already a bit odd imho, but in the comments it is even
less clear without the context of the datasheet.

>  	{
> @@ -286,6 +288,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -45R speed is 3.0-3.6V regulated, others 2.7-3.6V */
>  	},
>  
>  	{
> @@ -317,6 +320,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -55 speed is 3.0-3.6V regulated, others 2.7-3.6V */
>  	},
>  
>  	{
> @@ -348,6 +352,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -55 speed is 3.0-3.6V regulated, others 2.7-3.6V */
>  	},
>  
>  	{
> @@ -379,6 +384,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -410,6 +416,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -441,6 +448,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600} /* 3.0-3.6V  regulated(-70R), 2.7-3.6V for others */
>  	},
>  
>  	{
> @@ -472,6 +480,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600} /* 3.0-3.6V  regulated(-70R), 2.7-3.6V for others */
>  	},
>  
>  	{
> @@ -498,7 +507,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> -		.voltage	= {2700, 3600},
> +		.voltage	= {3000, 3600}, /* regulated voltage range- full range is 2.7-3.6V */
>  	},

NB: that's the diff for Am29LV040B

>3.0V for the -60R speedgrade only, so essentially the line should be similar to the ones above.

when reading that datasheet i noticed the following paragraph:
"The device requires only a single power supply (2.7
V–3.6V) for both read and write functions. Internally
generated and regulated voltages are provided for the
program and erase operations."

this indicates to me that at least for these "regulated" means that
they have an internal voltage regulator to guarantee stable supply for
write/erase operations. such regulators need a minimum difference
between input (vcc) and output (some internal voltage rail), hence the
0.3V higher vcc requirement. i am not sure if the other chips we have
encountered also have internal regulators, but they may have.

these are implementation-specific details which are not necessarily
interesting to flashrom or its users. i think just naming the speed
grades for the noted ranges is the best way to deal with such chips
for now.

>  	{
> @@ -525,7 +534,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> -		.voltage	= {2700, 3600},
> +		.voltage	= {3000, 3600}, /* regulated voltage range- full range is 2.7-3.6V */
>  	},
>  
>  	{
> @@ -591,6 +600,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -1446,6 +1456,7 @@
>  		.unlock		= spi_disable_blockprotect_at25df_sec,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -2317,6 +2328,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
> @@ -3501,6 +3513,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
> @@ -4052,6 +4065,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -4344,6 +4358,7 @@
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
> @@ -4775,6 +4790,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -4900,6 +4916,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -5201,6 +5218,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -5281,6 +5299,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -5307,6 +5326,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
> @@ -6780,6 +6800,7 @@
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{

to ease review you could post diffs with more context so that the chip
models are included in each hunk. i cant remember the correct svn diff
parameters right now for this though. i personally don't need it, but
if you can figure it out quickly it may be nice to have. :)

-- 
Kind regards/Mit freundlichen Grüßen, Stefan Tauner




More information about the flashrom mailing list