[flashrom] Voltage & form-factor spreadsheet
Steven Zakulec
spzakulec at gmail.com
Mon Apr 4 04:27:17 CEST 2011
On Wed, Mar 30, 2011 at 8:16 PM, Carl-Daniel Hailfinger <
c-d.hailfinger.devel.2006 at gmx.net> wrote:
> 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/
>
>
I believe I've addressed all the comments.
Signed-off-by: Steven Zakulec <spzakulec at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20110403/983ef409/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: voltage_patch-v2.patch
Type: application/octet-stream
Size: 35262 bytes
Desc: not available
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20110403/983ef409/attachment.obj>
More information about the flashrom
mailing list