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