You can use the SD driver from SdFat to read and write blocks on an SD without a file system.
Here is example code that writes a block then reads it back.
#include <SdFat.h>
const uint8_t CS_PIN = 10;
Sd2Card card;
uint8_t block[512];
uint32_t address = 12345L;
void setup() {
Serial.begin(9600);
if (!card.begin(CS_PIN)) Serial.println("begin error");
if (!card.writeBlock(address, block)) Serial.println("write error");
if (!card.readBlock(address, block)) Serial.println("read error");
Serial.println("Done!");
}
void loop() {}
The total size of this sketch is about 3,900 bytes, about 2,000 extra bytes for card read/write.
Binary sketch size: 3,888 bytes (of a 32,256 byte maximum)