Arduino Uno and ATMEL memory chip using SPI

Why the extra transfers?

You didn't say which chip you are using this time, but based on the AT25DF641 data sheet, I would expect you to do something like this:

  digitalWrite(SlaveSelect,LOW);
  SPI.transfer(0x90);   // send "read manufacturer ID" command (or is it 0x9F?)
  delay(1);
  byte man_id = SPI.transfer(0);
  delay(1);
  byte device_id1 = SPI.transfer(0);
  delay(1);
  byte device_id2 = SPI.transfer(0);
  delay(1);
  byte extended_info = SPI.transfer(0);
  digitalWrite(SlaveSelect,HIGH);

The spec says the manufacturer's ID comes first (and it would be surprising if different chips put the manufacturer's ID in different places, that would kind-of defeat the point).

And are you sure that 0x90 is the correct command? The previous post mentioned 159 (0x9F) which is what the AT25DF641 uses. Again, it would be surprising if different manufacturers used a different "read manufacturer ID" command, because you need to know in advance then, which command to send (ie. need to know the manufacturer), in order to find out who the manufacturer is. In which case, again not much point.