AlaudaProject : XdMedia

HomePage :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register

XD Media Specification


Looks like I'm the first poor sod to implement XD in software. It seems to be a closed-spec, can't even find a forum or design group for it (it was designed by Fuji and Olympus).

Fortunately, XD is very similar to SmartMedia. The details listed in this document are based on my own reverse engineering, and Linux's SDDR09 driver (a software implementation of SmartMedia reader). You can find more details in the SmartMedia "sample" specifications but information there can't be republished.

As this is somewhat reverse engineered and somewhat guesswork, there may be inaccuracies/incompleteness here!



Media Signature


The media stores a 4-byte signature. This is identical to recent SmartMedia signatures.

Byte 0: Manufacturer ID

This seems to be the same ID type as SmartMedia.

Byte 1: Device ID

This ID represents the card capacity, ala SmartMedia.

Byte 2: 128-bit ID availability

This byte will read 0xA5 when a 128-bit media ID is available.

Byte 3: Extra read media ID command availbility

This byte will read 0xC0 when another read-media-signature command is available.



Address Space


NOTE: Unlike SmartMedia, I think that sector-size/block-size is constant accross all media, but this is only a guess based on the fact that my 16mb card behaves the same as my 256mb card!









Page Control Data





Bytes 0,1,2,3: Reserved(?)

In a 'normal' data PBA, the control data starts with four 0xFF values. If this is not the case, then assume that the PBA is reserved and can't be used for storing data.

Byte 4: Data Status

In a 'normal' data PBA, this byte should read 0xFF. If it doesn't, assume the PBA is dead.

Byte 5: Block Status

In a 'normal' data PBA, this byte should read 0xFF. If it doesn't, assume the PBA is dead.

Byte 6: Address Field 1

The second word in this byte must read be 0x01. If it isn't, assume the PBA is dead.
i.e.: bit(7)=0, bit(6)=0, bit(5)=0, bit(4)=1

Bit 3 should be set to 0.
The remaining bits (2,1,0) represent the upper 3 bits (9,8,7) of the LBA address of the block.

Byte 7: Address Field 2

Bits 7 to 1 represent the lower 7 bits (6-0 respectively) of the LBA address of the block. Bit 0 is a parity bit.

Bytes 8,9,10: ECC Checksum for Chunk 2

3-byte checksum for the second chunk of page data.

Byte 11: Address Field 1 Copy

Always the same as Address Field 1.

Byte 12: Address Field 2 Copy

Always the same as Address Field 2.

Bytes 13,14,15: ECC Checksum for Chunk 1

3-byte checksum for the first chunk of page data.



ECC Checksum


TODO: Describe me


There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
Page was generated in 0.0305 seconds