On Mon, 4 Jul 2011 22:27:59 -0400 Steven Zakulec spzakulec@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@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. :)
On Tue, Jul 5, 2011 at 12:37 AM, Stefan Tauner < stefan.tauner@student.tuwien.ac.at> wrote:
On Mon, 4 Jul 2011 22:27:59 -0400 Steven Zakulec spzakulec@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@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
I believe I've addressed all of your issues. What's the correct datasheet for M25PX16 ? There seem to be several of them , by different companies.