Use Cases
1366
SPRUH82C – April 2013 – Revised September 2016
Copyright © 2013–2016, Texas Instruments Incorporated
Serial ATA (SATA) Controller
28-Bit Addressing.
}
}
myCmdFis.cfisFeature
= 0x00;
myCmdFis.cfisDw1SecNumLbaLow
= (Uint8) Dev28bitLbaAddress;
myCmdFis.cfisDw1CylLowLbaMid
= (Uint8)(Dev28bitLbaAddress>>8);
myCmdFis.cfisDw1CylHighLbahigh = (Uint8)(Dev28bitLbaAddress>>16);
myCmdFis.cfisDw1Dev
= ( DEVICE_REG_USE_LBA_ADDRESSING |
(Uint8)(Dev28bitLbaAddress>>24)
);
//
myCmdFis.cfisDw3SecCnt
= (sata_input_prdLength*sata_input_prd_dataBuffLen)/512;
myCmdFis.cfisDw3SecCnt
=
(sata_input_filePageSize*sata_input_prd_dataBuffLen*sata_input_prdLength)/512;
myCmdFis.cfisDw3Ctrl
= 0x00;
// The below require to be initialized at least once and can be ignored especially if
//
not using 48-Bit Addressing. If use 48-Bit Addressing, then require constant
//
maintenance prior to invoking a command.
myCmdFis.cfisDw2SecNumLbaLowExp=0x00;
myCmdFis.cfisDw2CylLowLbaMidExp=0x00;
myCmdFis.cfisDw2CylHighLbahighExp=0x00;
myCmdFis.cfisDw2FeatureExp=0x00;
myCmdFis.cfisDw3SecCntExp=0x00;
// Invalidate for future use.
Dev28bitLbaAddress = 0xFFFFFFFF;
return(0);
}
void buildCmdFis(CommandTable *CmdSlotNum) {
//
+----------+----------+--------------+-----------+
// DW0|
FEATURE | COMMAND
| c r r r port |FISTYPE 27h|
//
+----------+----------+--------------+-----------+
// DW1|
DEVICE
| LBA HIGH |
LBA MID
|
LBA LOW
|
//
+----------+----------+--------------+-----------+
// DW2|FETURESexp|LBAHIGHexp|
LBAMIDexp
| LBALOWexp |
//
+----------+----------+--------------+-----------+
// DW3| CONTROL
| RESERVED | SEC CNTexp
|
SEC CNT
|
//
+----------+----------+--------------+-----------+
// DW4| RESERVED | RESERVED |
RESERVED
| RESERVED
|
//
+----------+----------+--------------+-----------+
CmdSlotNum->cfis.DW0.B0FisType=0x27;
CmdSlotNum-
>cfis.DW0.BYTE1=myCmdFis.cfisByte1;
//Make Sure the 'C' bit field is correctly
set or cleared.
CmdSlotNum->cfis.DW0.B2Cmd=myCmdFis.cfisCmd;
CmdSlotNum->cfis.DW0.B3Feature=myCmdFis.cfisFeature;
CmdSlotNum->cfis.DW1.B0LbaLow=myCmdFis.cfisDw1SecNumLbaLow;
CmdSlotNum->cfis.DW1.B1LbaMid=myCmdFis.cfisDw1CylLowLbaMid;
CmdSlotNum->cfis.DW1.B2LbaHigh=myCmdFis.cfisDw1CylHighLbahigh;
CmdSlotNum->cfis.DW1.B3Device=myCmdFis.cfisDw1Dev;
//Make Sure 48-Bit or 28-
Bit Addressing is indicated here.
CmdSlotNum->cfis.DW2.B0LbaLowExp=myCmdFis.cfisDw2SecNumLbaLowExp;
//0x0;
CmdSlotNum->cfis.DW2.B1LbaMidExp=myCmdFis.cfisDw2CylLowLbaMidExp;
//0x0;
CmdSlotNum->cfis.DW2.B2LbaHighExp=myCmdFis.cfisDw2CylHighLbahighExp; //0x0;
CmdSlotNum->cfis.DW2.B3FeatureExp=myCmdFis.cfisDw2FeatureExp;
//0x0;
CmdSlotNum->cfis.DW3.B0SecCnt=myCmdFis.cfisDw3SecCnt;
CmdSlotNum->cfis.DW3.B1SecCntExp=myCmdFis.cfisDw3SecCntExp;
//0x0;
CmdSlotNum->cfis.DW3.B2Rsv=0x0;
CmdSlotNum->cfis.DW3.B3Control=myCmdFis.cfisDw3Ctrl;