[flashrom] Voltage & form-factor spreadsheet
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Thu Mar 31 02:16:47 CEST 2011
Am 22.03.2011 01:22 schrieb Steven Zakulec:
> On Tue, Oct 12, 2010 at 8:51 PM, Carl-Daniel Hailfinger wrote:
>
>> Hi Steven,
>>
>> thanks a lot for this comprehensive list of flash chip voltages and form
>> factors..
>>
>> On 13.10.2010 01:49, Steven Zakulec wrote:
>>
>>> Hello, some weeks ago I asked carldani what I could do to help the
>>> flashrom project, and he mentioned that they could really use someone
>>> to go thru all the chips in flashchips.c and get the voltage range and
>>> form factor(s) for each chip listed there.
>>>
>>> This is the result of that project: a spreadsheet with the chip name,
>>> voltage range, form factors, connector type (pins, leads, etc). This
>>> covers all the chips as of v1143.
>>> If anyone else is interested, I also have a short text file with all
>>> of the form factor acronyms I came across and what they mean (I
>>> grabbed the definition from the datasheet).
>>>
>>> There's a few missing chips, and some values that I wasn't quite sure
>>> about. Comments would be greatly appreciated.
>>>
>>>
>> I thought I had seen some SPI chips which were available for disjoint
>> voltage ranges, e.g. 1.8-2.5V and 2.7-3.6V. Maybe the names were
>> different for the various versions with different voltages. I hope I'll
>> stumble over such a datasheet again.
>>
>> OK, now the next question is how we can store this info in struct
>> flashchip. Suggestion:
>>
>> struct voltage {
>> uint8_t minvoltage_decivolt;
>> uint8_t maxvoltage_decivolt;
>> };
>>
>> Values would be in 1/10 volts. I haven't seen any flash chip datasheets
>> with greater precision, and with such an encoding even 12V can be
>> expressed.
>>
>> For the form factor, I'd just use a large bitfield with one bit per
>> available form factor.
>> uint32_t formfactors;
>>
>> #define PLCC32 (1<< 0)
>> #define TSOP32 (1<< 1)
>> #define TSOP40 (1<< 2)
>> ...
>>
>> Example:
>>
>> {
>> .vendor = "SST",
>> .name = "SST49LF008A",
>> .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
>> .manufacture_id = SST_ID,
>> .model_id = SST_SST49LF008A,
>> .total_size = 1024,
>> .page_size = 64 * 1024,
>> .feature_bits = FEATURE_REGISTERMAP |
>> FEATURE_EITHER_RESET,
>> .tested = TEST_OK_PRE,
>> .probe = probe_jedec,
>> .probe_timing = 1, /* 150 ns */
>> .block_erasers =
>> {
>> {
>> .eraseblocks = { {4 * 1024, 256} },
>> .block_erase = erase_sector_jedec,
>> }, {
>> .eraseblocks = { {64 * 1024, 16} },
>> .block_erase = erase_block_jedec,
>> }, {
>> .eraseblocks = { {1024 * 1024, 1} },
>> .block_erase = NULL, /* AA 55 80 AA 55 10,
>> only in A/A mux mode */
>> }
>> },
>> .printlock = printlock_sst_fwhub,
>> .unlock = unlock_sst_fwhub,
>> .write = write_jedec_1,
>> .read = read_memmapped,
>> .voltages = { 30, 36 },
>> .formfactors = TSOP32|TSOP40|PLCC32,
>> },
>>
>> Regards,
>> Carl-Daniel
>>
>> --
>> http://www.hailfinger.org/
>>
>> I've included a patch (not working currently) that does pretty much what
>>
> you indicated above (just the voltage part). It fails to compile correctly,
> and has the struct called voltage instead of voltages, but should otherwise
> be identical to what you proposed. While filling in what I had, I did come
> across some chips that offered separate ranges (usually 5 V +-10% and a 12V
> fast erase or program). I've listed those in comments next to the voltage
> field.
>
Right. Please note that those chips usually can't handle 12V on
data/address pins, and have a separate pin for supplying 12V for
write/erase.
So it is correct to list them like other 5V chips, and add a comment
about separate 12V programming voltage (please be precise if you
describe when the chip needs 12V). So far I've seen the following ways
of using 12V:
- never/optional/always for erase
- never/optional/always for write
We could handle that either with feature bits or with separate voltage
feature bits. Not sure. A comment will suffice for now until we can
actually handle this.
> The form-factor half is more complicated- in my original spreadsheet,
> there's 29 form factors- I listed the pins/etc separate from the form
> factor, so there are a very large amount of form factors consequently.
> Ideas on how to handle this would be appreciated.
>
Can we postpone form factors and concentrate on voltages first?
> Index: flash.h
> ===================================================================
> --- flash.h (revision 1282)
> +++ flash.h (working copy)
> @@ -138,7 +138,12 @@
> int (*unlock) (struct flashchip *flash);
> int (*write) (struct flashchip *flash, uint8_t *buf, int start, int len);
> int (*read) (struct flashchip *flash, uint8_t *buf, int start, int len);
> + struct voltage {
> + uint8_t minvoltage_decivolt;
> + uint8_t maxvoltage_decivolt;
> + };
>
Please remove one tab above so the } is below s of struct voltage.
By the way, I'd prefer
+ struct {
+ uint8_t min;
+ uint8_t max;
+ } voltage;
We do not use long variable names elsewhere. And yes, I know that I
suggested this code some time ago. Since then I have learned a few
things about the usefulness of short code. And please move the word
"voltage" to the end of the struct declaration so it works.
>
> +
>
No additional empty line.
> /* Some flash devices have an additional register space. */
> chipaddr virtual_memory;
> chipaddr virtual_registers;
>
> Index: flashchips.c
> ===================================================================
> --- flashchips.c (revision 1282)
> +++ flashchips.c (working copy)
> @@ -54,6 +54,7 @@
> * .unlock = Chip unlock function
> * .write = Chip write function
> * .read = Chip read function
> + * .voltage = Voltage min and max range
>
Voltage min and max range in decivolt
> */
>
> {
> @@ -111,6 +113,7 @@
> },
> .write = write_jedec_1,
> .read = read_memmapped,
> + .voltage = { 50 },
>
If this chip indeed has zero tolerance, please write {50, 50} explicitly.
> },
>
> {
>
> @@ -1283,6 +1313,7 @@
> .unlock = spi_disable_blockprotect_at25df,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .voltage = { 23, 36 }, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
>
Another feature bit maybe? FEATURE_VOLTAGE_SUBRANGE or something like
that. You can postpone this.
> },
>
> {
> @@ -1320,6 +1351,7 @@
> .unlock = spi_disable_blockprotect_at25df,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .voltage = { 23, 36 }, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
>
Stylistic choice: All other data in curly brackets has no space after {
and no space before }.
> },
>
> {
> @@ -1357,6 +1389,7 @@
> .unlock = spi_disable_blockprotect_at25df,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .voltage = { 17, 19 }, /* Datasheet says range is 1.65-1.95 V */
>
Maybe use 16,20 instead?
> },
>
> {
>
> @@ -2144,6 +2204,7 @@
> },
> .write = write_jedec_1,
> .read = read_memmapped,
> + .voltage = { 5, 5 },
>
Really 0.5V or did you mean 5.0V here?
> },
>
> {
> @@ -2175,6 +2236,7 @@
> },
> .write = write_jedec_1,
> .read = read_memmapped,
> + .voltage = { 5, 5 },
>
Same.
> },
>
> {
> @@ -2206,6 +2268,7 @@
> },
> .write = write_jedec_1,
> .read = read_memmapped,
> + .voltage = { 5, 5 },
>
Same.
> },
>
> {
>
> @@ -3460,6 +3560,7 @@
> },
> .write = write_82802ab,
> .read = read_memmapped,
> + .voltage = { 114, 126 } /*Offers 5V read in addition, some chips offer 12V +-10% read/write */
>
Are you sure the chip is a pure 12V chip? Most "12V" chips I know are
actually 5V chips and the 12V is only required for write/erase and
sometimes special forms of ID.
> },
>
> {
> @@ -3483,6 +3584,7 @@
> .unlock = unlock_28f004s5,
> .write = write_82802ab,
> .read = read_memmapped,
> + .voltage = { 5, 5 }, /*Also offers 12V write */
>
Please use the same phrasing as for the other chips:
"Also has 12V fast program"
> },
>
> {
>
Looks good otherwise. Some of my comments apply to multiple lines, but I
picked only one line for each to keep the mail short.
Please resend this with the comments addressed and a Signed-off-by
statement. Then we just need someone to cross-check the voltage values
and we're good to go.
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
More information about the flashrom
mailing list