I regularly have to sort through a fair number of memory modules (DIMMs, SO-DIMMs, etc.). All (?) of these have serial ROMs that indicate applicable parameters for the module. Most are cryptically marked -- at best. And, reading part numbers off components is tedious (easier to just discard the little beasts!)
Is it possible to design a little to query these devices and extract the parameters -- mapping them to a human readable form (i.e., as a peripheral to a PC)? Is this "ID" circuitry powered independent of the rest of the module? Or, do you, in fact, have to be able to support every possible memory module (pinout, voltage, etc.)
*just* to gain access to this data?
Or, are they sufficiently non-standardized (e.g., across DIMM types) to make that effort worthless? (i.e., would you already have had to narrow down the range of choices sufficiently so the "software" could know how to interpret the data that it extracts)
Really old ones (before maybe about 2000) don't have the little serial EEPROM, but everything that's still big enough to care about seems to.
I have gotten in the habit of writing the size of the module on it, in Sharpie permanent marker, either when I buy the module, or when I pull one from a running computer. This doesn't help with new-to-you computers, or ones that don't run, etc.
I think it shares power and ground with the main RAM chips on the module. There is a separate pin or two for I2C to talk to the little serial EEPROM.
I *think* the content of the EEPROM is fairly standardized. On Linux, you can install the i2c-tools package, insert the eeprom module, and run decode-dimms to print the EEPROM contents in human-readable format. By default, decode-dimms talks via I2C to the modules that are installed in the PC it's running on, but it can also accept a hex dump of the EEPROM contents that was obtained by other means.
I know people have gone the other way - they wanted to hook some I2C peripheral (like an accelerometer) to their PC, so they took an old memory module, unsoldered all the chips, tacked I2C and ground wires to the right spots, and then plugged the module into a free slot. I think Analog Devices may have even shipped a "dummy" DIMM with one of their dev kits for this purpose.
You might be able to do something like that, but since you are connecting directly to the motherboard, some kind of buffer chip might be in order. Or, use an old PC that you don't care about. :)
You have to at least be able to give the EEPROM power, ground, and I2C. The little 8-pin serial EEPROMs seem to be kind of standard; if somebody makes a "chip clip" that fits them, that might be easier than trying to collect RAM sockets and wire up just a few pins.
Real official PC shops have dedicated hardware to test modules. It looks kind of like an old EPROM burner, with a bunch of sockets on it (or one socket and some adapter sockets) and an LCD. Put in module, press button, get ID; press button again and it tests the RAM.
Yeah, I have 72pin SIMMs that use the "four jumper" solution. Virtually impossible to verify that you have the right "flavor" device installed -- without an elaborate tester (or, "try it and see")
Exactly. I use a white "paint pen" (easily visible ON the black plastic of the component IC's). And, store them segregated by type/speed (in plastic "freezer bags").
Yes, but only within a particular type of device, IIRC. I.e., RAMBUS vs. SDRAM vs. ...
Decoding the content(s) would be relatively easy -- *knowing* what sort of device it is to begin with!
What I would like (ideally) is a device with instructions similar to:
- find the memory slot into which the DUT fits
- press the TEST button
- remove the DUT and place it in the "bin" indicated
(Printing a label to be affixed to the device would be problematic as I have found many labels don't adhere well -- depending on the arrangement of the devices on the DUT. Asking someone to scribble on the DUT prior to "storing it" would be a nightmare.)
I was thinking of just harvesting one of each type of module connector (or, some *other* scheme that could mate with a variety of different devices -- module connectors tend not to have high insertion ratings!) and installing them on a piece of phenolic with *just* the SPD pins wired up (no desire to test the actual memory; just classify it!).
Then, connect that to a PC/laptop that drives the interface (I think just a serial port with level translators would suffice) and presents results on the screen -- or, illuminates individual lights above the intended "bins".
[Think: trained monkey]
I'd be nervous about "poorly motivated" folks being charged with "probing" a device *on* the memory module -- by anything other than a clean "connector interface".
I'm not as worried about testing the memory as I am trying to get devices sorted *correctly* and efficiently -- by trained monkeys. So, someone can just take a pile of DIMMs and *accurately* sort them so that someone pulling "sorted" parts from those bins won't be wondering why this memory module has the wrong number of pins; is NOT ECC; is only 128MB; etc.
Yes, but is it *always* unique? E.g., 72pin EDO & FPM SIMMs had the same physical shape. Without probing the actual MEMORY devices, you couldn't tell whether you had an EDO or FPM device.
I.e., does the size of board, number of pins and placement of keys TOGETHER WITH THE SPD DATA *uniquely* identify EVERY type of memory module? (think about the variety of different memory types that have been available in "recent years"!)
My goal is to let a human make the "shape selection" choice (i.e., which socket does it fit into). Then, by noting which (of many different) socket is occupied, query the SPD data and UNIQUELY know everything about the device that matters from a system's standpoint.
I tried it with i2c-parport. Botched the circuit(transistors instead of diodes? ...not sure, something was inverted), so had to use userspace ppdev access , but it worked. The power pin for the eeprom is separate, so could be powered from a linreg... 3V, I think.. decode-dimms can be used to decode the contents... I only tried on an old DDR ram that had died... If you have some really old/exotic modules it may not work... If you happen to have the DIMM installed in your box, you can directly read it out somewhere at /sys/module/eeprom/drivers/i2c:eeprom
OK. So, no need for a real power supply (as the memory, itself, is not powered up).
(sigh) Yes, it looks like its possible to electrically design such a device -- and, make it reasonably fool proof. The *real* problem seems to lie in the module connectors: most are only rated at a handful of mating cycles (e.g., 5-25).
While this may be plenty for a "typical application" (and, I suspect often *exceeded* by folks!), I can't imagine hundreds and thousands of cycles *weekly* would leave the connector's reliability unaltered.
I will have to find another way of interfacing to the modules...
I do believe that was the intent of the standards, that the physical interlocks were to keep dangerously incompatible parts separated (as well as some just not working variations) and the serial rom provided details to allow the system to configure itself (or reject if not compatible).
Since to build such a device, you are going to need to obtain standards documentation of all of the sockets and serial data formats, you will have an opportunity to verify that the information is sufficient and unique.
This of course will only help you with parts made to the standards. It wouldn't surprise me that someone made a proprietary memory module that went into their proprietary socket (that uses a regular connector, just not by the standard), and such a module could confuse your system (or even be damaged). I know I have a CPU module on my desk that uses a standard memory connector and whose pin out is nothing like the standard memory module. At least it is significantly longer than a standard memory module so unlikely to fit into the memory connector of a real system.
Unless you're doing really old stuff, probably all you need to care about these days is 1) SDRAM, in PC and laptop shapes and 2) whatever weird variants of SDRAM modules that Macs use.
The Rambus modules can go in the recycle bin with the Itanics, Winmodems, Microchannel cards, and other bad ideas. :)
It used to be pretty common that the modules had one or two small holes in the ends of the PC board... you could print a "dog tag" for it. Now a lot of the ones in my stock don't have those holes.
If you can get the user to keep their fingers out of the way, maybe laser-etch the result on the DIMM. :)
You might be able to roll your own connectors by machining a chunk of flat nylon or polycarbonate or something. Make a deep "well" for the chips on the back side to fit into, and a "ledge" where the edge connector goes. Notches on the "ledge" match the notches on the DIMM. Pogo pins in the nylon for contact... if all the pins you need are on one side of the DIMM, great, otherwise you put a nylon bar over the top with more pogo pins in there. Either continuously poll all the sockets for one that's live, or put a microswitch on the top bar... when the user presses it down, that starts the test, and tells you which socket they used.
My point was that somebody has already done the engineering on this, with sockets that work, etc. I think on most of them, the ID and test steps are separate; if all you want to do is ID, that's OK. The LCD readout on the tester might be kind of cryptic; testers exist that have a USB port to report results to a PC. The first one I found on Google still plays the 1000% obsolete "please ask for price quote" BS, so it's probably too expensive for your application. Aha... I found a distributor that quotes a bargain price of $4,450.
This is a non-profit that recycles/repurposes machines. E.g., send 500 of them to GodKnowsWhere (that probably doesn't even have ELECTRICITY! :< ). I.e., *anything* is better than the current "nothing".
[Though I haven't seen a machine with SIMMs in quite a while!]
The problem lies in lack of "skilled" staff -- folks who can look at memory modules, processors (chips), etc. and make an effective decision as to how it should be "processed". (i.e., you want to keep those folks busy *building* machines, not sorting/stripping them!)
As with most non-profits, you take whatever help is *offered*. And, hope, on balance, they do more good than harm!
Even a simple task like sorting DIMMs based on physical characteristics (dimensions, number of pins, number of memory chips, etc.) is fraught with error. Go to pull a pair of 512M PC3200's out of a *sorted* bin and, later, discover one was a 256M part. Or, registered. Or, ECC. ...
After a while, you just throw up your hands!
I (personally) started using the "white paint pen" many years ago to label my own SIMMs -- back when 16 "DIPs" on a 72pin module left you no room to write on the PCB. Granted, there's not much room on the back of *a* chip... but, I could write "8M" on the first device, "32b" on the second, "60ns" on the third and "EDO" on the fourth.
And, still have at least 4 devices with legible part numbers if I ever had to reconsider my labeling! (I've never tried to "erase" the paint; I imagine it would come off with alcohol -- which shouldn't compromise the legends on the chips themselves!)
This would be broken in a matter of weeks! Did I mention "trained monkey"? :< I thought about elastomeric connectors and similar. But, the same problem: the environment is too harsh, users too unskilled/unappreciative.
I thought about trying to just build a small database that they could directly query: type in ANY number printed on a label affixed to the component. If it had been "seen" previously, tell them what type of device they have.
But, this would inevitably lead to a fair bit of "data entry" work -- by someone capable of understanding the device geometries and specifications. I.e., you'd end up with a big pile of "unknown" devices awaiting that "expert's" review.
[And, I sure as hell don't want myself nominated for that "expert" role! I'm at a point where I want to work on what *I* want, not what someone ELSE wants! :> ]
Yeah, non-profits aren't big on spending money -- unless they ABSOLUTELY have to! E.g., want to test an LCD monitor? Set up a PC and just let it run for a few hours! Want to clone disk drives (i.e., to build several systems with identical hardware)? Add a second disk controller to a PC and run the cables out through a hole you cut in the side! Want to "bulk erase" disk drives? Set up ANOTHER PC that just fills the volume with pseudo random data. (i.e., never BUY something to do any of these things -- *better*!)
Just identifying memory modules *should* be a simple project. The real issue is doing it with a device that can handle lots of abuse by *unskilled* workers (who have no incentive to do things right... they aren't being paid, can't really be fired, etc.)
This can be a false economy. E.g., why power an entire PC to exercise
*one* LCD monitor? Why not "split" the signal and drive a dozen monitors from one "video source"? After all, you are just interested in putting an image on the screen so you can check for dead pixels, flakey backlights, etc.! I.e., just because you have hundreds of surplus PC's to choose from, doesn't mean that a better solution might lie elsewhere (i.e., electricity isn't free -- it costs less to drive a distribution amplifier/splitter than power an entire PC!)
Because most non-profits/charities rely on VOLUNTEER labor -- people who, in effect, tell themselves: "Gee, this sounds like such a GOOD CAUSE! I would like to help..." (for the moment, ignore the fact that many of these folks are retirees -- the sorts of people with "time on their hands")
But, just wanting to help doesn't mean you are *able* to help! (of course, the fallback position of "just donate money" is always possible -- but often people don't have "surplus funds" that they can devote to such use... especially "retirees").
The organization is then stuck having to decide whether to *refuse* the offered labor (deeming it "inappropriately skilled" for the tasks at hand) *or* accept it and try to find a good "fit" -- where some value can be extracted from it.
Turning away volunteers has other downsides -- word gets around that you're "selective" about who can help you in your Mission. Other folks hesitate to offer *their* services -- for fear you will turn them away as well!
"Oh, like you, I don't know anything about computers, either! I won't bother offering my time, there..."
(Yes, but you are intimately familiar with import/export regulations so *those* skills might be useful -- if you had only taken the opportunity to *ask*!)
The trick, then, becomes one of trying to find ways of lowering the skill level required for a particular activity -- so that LESS skilled folks can perform it. E.g., if you need an engineer/technician to research every DIMM/SIMM encountered, then that engineer/technician's time is "wasted" on this task instead of building/refurbishing equipment -- a skill that is much harder to "simplify".
Also, it is pretty hard to come up with a list of do's/don'ts that covers even the most basic *assumptions* to which a technician/engineer wouldn't give a second thought! Static sensitive devices, removing power before inserting/removing components, making sure metal hardware isn't lying on exposed circuitry, etc.
For example, one of the places I visited today had *piles*/stacks of LCD monitors organized neatly. Of course, most are now TRASH as they were all stacked with their screen faces leaning on (or, being leaned on by!) the next monitor *above*/below in the stack!
"Oh! I didn't realize that was something that should be avoided..."
Do you "fire" this person for the mess they've caused? Wasn't it
*your* responsibility to ensure they knew EVERYTHING related to WHATEVER they were tasked with doing ON THAT DAY? Remember, you aren't paying them for their time... and, if you aren't grateful for their efforts (i.e., if, instead, you are overly critical of or dismissive in their failures), you risk them feeling unappreciated (or worse) and, possibly, this attitude being conveyed to their other friends, etc.
Most non-profits/charities are understaffed (paid or unpaid). Here, I think the only one that has an abundance of staff (volunteers) is the food pantry. And, the tasks there are all essentially menial ones -- filling boxes with foodstuffs, keeping the floors clean, etc. So, virtually every volunteered hour can be effectively used.
At the opposite extreme, I know of a group that provides free dental care. Hard to imagine them needing many people that are NOT dentists!