title
Products            Buy            Support Forum            Professional            About            Codec Central
 
Results 1 to 5 of 5

Thread: Plextor FUA command

  1. #1

    Join Date
    Apr 2014
    Posts
    3

    Plextor FUA command

    Hello!

    I have a technical question about Plextor's FUA command. I did not find any informations (i.e. CDB) about it on the web. Can someone give me the technical description? SCSI CDB would be enough. I want to test something with own code, and I really need that information. thanks!!!!!

    It would also be interesting, how to detect support for that command. I guess, I just send it to the drive and look if request sense gives me "ok".

    Background: I experiment with Read CDDA (D8h) and that FUA-flag there doesn't work with my Plextors ("illegal flag in CDB").

  2. #2
    Administrator
    Join Date
    Apr 2002
    Posts
    39,011

    Re: Plextor FUA command

    SRB_ExecSCSICmd cmd;
    ZeroMemory(&cmd, sizeof(SRB_ExecSCSICmd));
    cmd.SRB_Cmd = SC_EXEC_SCSI_CMD;
    cmd.SRB_Flags = SRB_DIR_IN;
    cmd.SRB_BufLen = 255;
    cmd.SRB_BufPointer = MemBuffer;
    cmd.SRB_SenseLen = SENSE_LEN;
    cmd.SRB_CDBLen = 12;
    cmd.CDBByte[0] = 0xA8;
    cmd.CDBByte[1] = 8; // FUA set
    cmd.CDBByte[2] = (BYTE)((NextLBAAddress >> 24) & 0xFF);
    cmd.CDBByte[3] = (BYTE)((NextLBAAddress >> 16) & 0xFF);
    cmd.CDBByte[4] = (BYTE)((NextLBAAddress >> 8) & 0xFF);
    cmd.CDBByte[5] = (BYTE)(NextLBAAddress & 0xFF);

  3. #3

    Join Date
    Apr 2014
    Posts
    3

    Re: Plextor FUA command

    wow! fast answer, thanks!

    I have to adapt it for linux, but I guess, that's no problem.

    Quote Originally Posted by Spoon View Post
    cmd.CDBByte[0] = 0xA8;
    cmd.CDBByte[1] = 8; // FUA set
    cmd.CDBByte[2] = (BYTE)((NextLBAAddress >> 24) & 0xFF);
    cmd.CDBByte[3] = (BYTE)((NextLBAAddress >> 16) & 0xFF);
    cmd.CDBByte[4] = (BYTE)((NextLBAAddress >> 8) & 0xFF);
    cmd.CDBByte[5] = (BYTE)(NextLBAAddress & 0xFF);
    but what is "NextLBAAddress"? And A8h is READ(12)?

    So I basically I use READ(12) with FUA-Bit set and use some "magic" NextLBAAddress (I guess it's the sector I want to flush) and Transfer Length == 0 (because of the memset)?

  4. #4
    Administrator
    Join Date
    Apr 2002
    Posts
    39,011

    Re: Plextor FUA command

    You invalidate it by reading from an address away from the current location.

  5. #5

    Join Date
    Apr 2014
    Posts
    3

    Re: Plextor FUA command

    ahh, ok.

    But now I already tested it a little bit. And it seems, at least with my drives, it doesn't matter if you use the same sector you want to read afterwards or not. It always trashes the cache. The "FUA" READ(12) enforces a fresh read from the drive, even if it is in cache again afterwards, a READ CD will get "fresh" data because of that. So you could emulate the missing FUA bit on READ CD with a preceeding "FUA" READ(12) on the same sector.

    Astonishingly, this method works with all drives I own (and that are a lot! ;-)). While not exactly against the MMC specs, this feature is not directly mentioned. But many drives behave as we want. Great! But why the hell you can use FUA with READ(12) and others, but not with READ CD? Odd specs...

    thanks a lot!

    btw: another odd thing is, that there're drives which gives you DATA+SUB+C2 instead of DATA+C2+SUB (which would be correct according the specs). Is there a way to *detect* that habbit other than "quirk" all known drives with that habbit or use some kind of heuristics on the C2/SUB part?

    My Plextor PX-L890SA returns DATA+SUB+C2, all other drives I own DATA+C2+SUB.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •