Copyright 2010-2019 Hale Landis. All rights reserved.
NOTICE: Testing SATA NCQ
When you are testing something like SATA NCQ that has
no deterministic states or results, most anything could happen. And
in some cases strange results might be considered normal or at
least OK by some interpretation of the SATA or AHCI
specifications. If you run this program and see something that
is unusual, especially something the program calls an error that
you think should not be an error, please let us know
(ata.atapi@gmail.com).
NOTICE: Marvell 88SE6145 AHCI Controller
This model controller (Vendor ID 11AB) identifies itself as
AHCI but it really is not AHCI compatible. While it may appear
to operate for a few commands, it will normally not work with
AHCNCQT. This controller is found on some Intel motherboards
as a second AHCI (RAID?) controller.
The goal of AHCNCQT is to create as deep a NCQ (FPDMA) command queue in a drive as is possible. Error reporting is detailed but some knowledge of an AHCI controller's registers may be needed to fully understand some errors.
AHCNCQT is a DOS DPMI program. It requires a DPMI driver (the DPMI driver CWSDPMI.EXE is provided with AHCNCQT).
AHCNCQT is not shareware or freeware. AHCNCQT is a commercial product and you or your company must have purchased a copy of the program in order to legally use the full function version of the program. There is a demonstration/evaluation version of the program that has reduced function. The demonstration/evaluation version of AHCNCQT has no use or distribution restrictions but shall be used only to evaluate the program.
AHCNCQT requires the following basic system and test devices:
AHCNCQT does not use the system BIOS - AHCNCQT directly accesses the AHCI controller registers and takes full control of the of all AHCI ports and attached devices. During startup AHCNCQT resets the AHCI controller and places it into AHCI mode. All AHCI ports except the port used by AHCNCQT are disabled and access to any devices attached to those ports is not allowed.
Create a bootable DOS device (floppy disk or USB boot device) with no CONFIG.SYS or AUTOEXEC.BAT files. Place the AHCNCQT.EXE and CWSDPMI.EXE files on the boot device.
Boot your system from the boot device. This insures that you are not loading some strange device drivers that may interfere with AHCNCQT.
To run AHCNCQT, set up the test system and devices:
The easy way to start AHCNCQT is by using the command line
AHCNCQT PORT=n
where n is the AHCI port number for the device to be tested.
When AHCNCQT starts it will find the AHCI controller(s). If more than one AHCI controller is found AHCNCQT will need to be restarted using the b:d:f command line option. During startup AHCNCQT will reset and initialize the AHCI controller and port to be used. All other AHCI ports will be disabled. If startup initialization is successful testing will begin. The program will switch to "full screen" mode during testing. This screen shows the testing progress. AHCNCQT also writes a detailed log file.
AHCNCQT will run until one of the following events stops the program:
The AHCNCQT command line syntax is:
AHCNCQT [PORT=n] [b:d:f] [options]
If no options are specified the program displays command line help information and terminates.
Except for the LOG=x option, the command line options are processed left to right. If an option is specified more than once, the last (rightmost) specification is used. Only the first LOG=x option is used, any addtional LOG=x options are ignored.
PORT=n
Selects the AHCI port to be used, 0 to 31. The default is PORT=0.
Also see:  b:d:f
b:d:f
b:d:f is the PCI bus, device and function for an AHCI controller.
When this option is not specified AHCDEMO will scan PCI buses 0 to 15 for supported AHCI host controllers.
This option is not required if there is only one AHCI controller in the system.
If the desired AHCI host controller is not found on PCI buses 0 to 15 then this option can be used to specify a PCI bus number up to 255.
Also see:  PORT=n
BUFSIZE=n
Change the I/O buffer size. This may be required on some systems (perhaps due to bugs in the system's BIOS). If AHCNCQT fails with the on screen message "NO SWAP SPACE" try using this option to reduce the size of the I/O buffer. The values of n are:
4 = 400MB I/O buffer, this is the default.
3 = 300MB I/O buffer.
2 = 200MB I/O buffer.
1 = 100MB I/O buffer.
Reducing the I/O buffer size may cause a reduction in the MAXTL=n option.
COMPARE=FULL
COMPARE=NONE
COMPARE=QUICK
Specify the level of data compare that is done on sectors read. Only sectors that have been written during this execution of AHCNCQT are subject to data compare when read. READONLY forces COMPARE=NONE.
COMPARE=FULL compares all the data in each sector read.
COMPARE=QUICK has two modes: 1) If the read command's sector count is 1 to 32 then all data in each sector read is compared, 2) If the read command's sector count is greater than 32 then only the sector tag data is compared.
COMPARE=NONE disables all data compare.
The default is COMPARE=QUICK.
Also see:  READONLY
DEBUG=n
This option has no effect starting with version 3A3d See options NONSTD=I and OKTOWRITE.
Also see:  NONSTD=x OKTOWRITE
DTO=n
Set the AHCI Driver TimeOut in seconds when using WRITE/READ FPDMA QUEUED commands. The default is 20 seconds. The valid range of n is 10 to 600 seconds. When using WRITE/READ DMA EXT commands the value of n is multiplied by 3 but is limited to 600 seconds.
DUMPCHT=n
DUMPCHT=*n
Dump the command history trace (CHT) at or after command number n or any time LBA n is read or written.
DUMPCHT=n specifies a command number. This option generates a single dump of the CHT.
DUMPCHT=*n specifies an LBA number. This option generates a CHT dump any time the LBA is accessed by a command. This may create very large log files.
DUMPCHT=135024 - dump CHT at of after command 135024 DUMPCHT=*135024 - dump CHT any time LBA 135024 is accessed
FUA
Use the FUA option of NCQ (FPDMA) commands. This is the default.
Also see:  NOFUA
GEN=n
Limit the SATA interface speed.
n is 0, 1, 2 or 3. The default is 0 (no limit).
LP
If supported by the host controller and the device, enable device initiated Partial/Slumber.
The default is LP.
Note that the primary function of AHCNCQT is to create a very high level of interface and device activity so that it is possible a device will never have an opportunity to attempt device initiated Partial/Slumber.
Also see:  NOLP
LOG=fileName
LOG=*n
LOG=NUL
LOG=NULL
NOTE: Only the first LOG=x option found on the command line is used, any additional LOG=x options are ignored.
The default log file name is ".\AHCNCQT.LOG". Use this option to specify a different log file name.
LOG=*n can be use to generate unique log file names based on the date/time. The generated file name replaces the *n characters and all following charactes. The LOG=*n options are:
where
LOG=*n examples:
LOG=*1 -- LOG=4E0B47AC.LOG LOG=*2 -- LOG=2C181452.LOG LOG=\logs\*3 -- LOG=\logs\1K25F33B.LOG LOG=dvt\test\*4 -- LOG=dvt\test\E17G4135.LOG
Use LOG=NUL or LOG=NULL to suppress generation of the log file.
MAXERR=n
Maximum number of errors allowed, 1 to 1000. The default is 20.
Note that because all errors are retried once n+1 errors may be allowed before the program terminates.
MAXLBA=nK
MAXLBA=nM
Specify the highest LBA that will be tested. K is 1000 and M is 1000000.
The MINLBA=x and MAXLBA=x options can be used to restrict testing to a small area of a drive.
NOTE: There must be at least 100K sectors in each area, or ( (max_lba-min_lba+1)/num_tags) must be greater than or equal to 100K).
Also see:  MINLBA=x
MAXTL=n
Restricts read/write commands to transfer lengths (sector counts) of 1 to 65536. If a device has less than 2000000 sectors, MAXTL for that device may be adjusted so that it does not exceed the value (number_of_sectors / 100).
Also see:  MINTL=x
MINLBA=nK
MINLBA=nM
Specify the lowest LBA that will be tested. K is 1000 and M is 1000000.
The MINLBA=x and MAXLBA=x options can be used to restrict testing to a small area of a drive.
NOTE: There must be at least 100K sectors in each area, or ( (max_lba-min_lba+1)/num_tags) must be greater than or equal to 100K).
Also see:  MAXLBA=x
MINTL=n
MINTL=*n
MINTL=n restricts read/write commands to transfer lengths (sector counts) of 1 to 65536.
MINTL=*n restricts read/write command to transfer lengths (sector counts of 1 to 65536 and also makes all transfer lengths and LBA values be a multiple of n.
Examples:
Also see:  MAXTL=n
NOFUA
Do not use the FUA option of NCQ (FPDMA) commands.
Also see:  FUA
NOLP
Do not enable device initiated Partial/Slumber.
Also see:  LP
NONSTD=x
The valid values of x:
These options can appear in any order: NONSTD=EI is equivalent to NONSTD=IE.
NOTE: When using NONSTD=E to generate error conditions, use a small number of tags and a small number of LBAs, for example, NONSTD=E NUMTAG=4 MAXLBA=2M. The first error is injected 1000 commands into the SEQ=N pass and then every 10000 commands after the first error. If NONSTD=E is used with STOP=OE then the first injected will stop the program.
NOPRIO
Do not use the priority option of NCQ (FPDMA) commands.
Also see:  PRIO
NOSTOP
Do not stop on the first error.
The default is NOSTOP.
Also see:  STOP STOP=x
NUMTAG=n
Limit the number of NCQ (FPDMA) command tags that are used. n is 1 to 32. The default is 32.
OKTOWRITE
Use this option to enable writing over user data. When user data is found on the device and this option is used, a prompt is displayed to confirm that it really is OK to write over the user data.
PRIO
Use the priority option of NCQ (FPDMA) commands. This is the default.
Also see:  NOPRIO
READONLY
No data will be written on the device's media.
The default is WRITEREAD.
Also see:  WRITEREAD
SEQ=N
SEQ=WN
SEQ=WRN
SEQ=N specifies normal AHCNCQT operations are performed. SEQ=WN specifies a full write pass of the drive(s) before normal AHCNCQT operations are performed. SEQ=WRN specifies a full write pass and a full read pass of the drive(s) before normal AHCNCQT operations are performed.
SEQ=N is the default.
The READONLY option converts SEQ=WN to SEQ=RN and SEQ=WRN to SEQ=RN.
See additional SEQ=x option information below.
STOP
Same as STOP=ANY.
Stop after any type of error, see STOP=x.
The default is NOSTOP.
Also see:  NOSTOP STOP=x
STOP=ANY
STOP=DC
STOP=OE
STOP=RE
STOP=TO
STOP=UC
Errors are one of five types: DC (Data Compare), OE (Other Errors), RE (Reset Error), TO (Time Out), and UC (UnCorrectable). Any combination of these options may be used.
The default is NOSTOP.
When an error triggers one of the STOP=x options, the program stops before attempting any error recovery (before attempting a READ LOG command or COMRESET).
Also see:  NOSTOP STOP
TIME=n
Specify the run time in minutes. The default is 60 minutes.
Note: There are 1440 minutes in one day, 2880 minutes in two days, etc.
WRDMA
Use WRITE/READ DMA EXT commands.
Also see:  WRFPDMA
WRFPDMA
Use WRITE/READ FPDMA QUEUED (and READ LOG EXT) commands. WRFPDMA is the default.
Also see:  WRDMA
WRITEREAD
Use both write and read commands.
The default is WRITEREAD.
Also see:  READONLY
1) Perform a write pass, a read pass and the normal random testing on the device attached to port 1, limit the interface speed to generation 1, and test for up to 10 hours (600 minutes).
AHCNCQT SEQ=WRN PORT=1 GEN=1 TIME=600
2) Use the AHCI controller on PCI bus 0, device 31 function 1 and test the device attached to port 0 in read only mode and stop on any error.
AHCNCQT 0:31:1 PORT=0 READONLY STOP
The command line option defaults are:
COMPARE=QUICK FUA GEN=0 LOG=.\AHCNCQT.LOG MAXERR=20 MAXLBA=size_of_device MAXTL=max_supported_by_device MINLBA=0 NOSTOP PRIO SEQ=N TIME=120 WRFPDMA WRITEREAD
The environment variable ATAERROR is used to enable a trigger signal when an error is detected. This variable is set using the DOS SET command:
SET ATAERROR=port:v1:v2:v3
where port is an I/O port address and v1, v2 and v3 are values to be written to that port. port must be a hex value in the range 1 to FFFF. v1, v2 and v3 are hex values between 0 and FF.
When this environment variable is in effect, the values v1, v2 and v3 will be written to the I/O port whenever an error is detected (before the error message is displayed.
For example:
SET ATAERROR=300:0:ff:0
will toggle the data at I/O port 300H from 00H to FFH to 00H.
While AHCNCQT is running, some keys on the keyboard can be used to change what AHCNCQT is doing. These keys are:
All other keys will restore the full screen display - see FULL SCREEN INFORMATION below.
The AHCNCQT log file is a plain ASCII text file. This file can be viewed with most text editors and text browsing programs. When printing the file use a font that will allow at least 90 characters per line.
The log file contains the startup configuration messages, the detailed device error messages (if any) and termination summary messages.
Device error messages can contain various levels of information including a command history trace and a low level trace of the ATA I/O port activity.
Once device testing begins, AHCNCQT enter "full screen" mode. In this mode only summary information and very brief error message data is displayed.
If there are no errors AHCNCQT places the screen into screen saver mode after 20 minutes of running. If there are no errors pressing the key 's' and 'S' will switch the screen into screen saver mode immediately. Pressing any key, except ESC, 's' or 'S', will restore full screen mode for 20 minutes. Any error will restore full screen mode and disable the screen saver.
In full screen mode 25 lines are displayed:
The SATA speed (GEN:n1/n2/n3) on line 5 shows: a) the max speed supported by the host controller (n1), b) the speed requested by AHCNCQT (n2), and c) current operating speed (n3). When n2 is zero no speed restriction is in effect - see the GEN=n command line option.
The area information in lines 11-19 alternates between the area configuration and current command information. The area configuration information is shown in green and includes the LBA range, size, maximum transfer size and current pass sequence. The current command information is a sample of the active command at time the screen was updated. This information is shown in groups of 8 areas (0-7, then 8-15, etc).
At startup AHCNCQT performs the following activities:
If using the WRFPMA option the WRITE/READ FPDMA QUEUED and READ LOG EXT (for log page 10H) commands are used. If using the WRDMA option the WRITE/READ DMA EXT commands are used.
The SEQ=x command line option can be used to have AHCNCQT perform full surface write or write-read passes before starting the normal test sequence. The SEQ=x option is applied to each area independently.
A write pass (W) writes all the sectors within an area sequentially starting with the lowest LBA.
A read pass (R) writes all the sectors within an area sequentially starting with the lowest LBA.
There are two types of the normal pass known as n and N. These perform the following:
The n and N passes perform verify reads of write commands (not including N pass write bursts). These reads are labelled "N-V" on the screen. Verify reads are usually done within a few hundred commands following the write command so that if the read fails both the write and verify read can be found in the Command History trace.
An N pass randomly performs sequential writes or sequential reads. The commands in a sequential sequence are labelled "N-S" on the screen. The same transfer length is used by all the commands in a sequence but the LBAs used are incremented or decremented as follows:
An N pass also performs bursts of write commands using random Sector Count and random LBA. The commands in these bursts are labeled "N-Wx" on the screen. Use the NONSTD=X option to supress these write bursts. The first burst uses 10000 write commands, the second uses 20000, ..., the fifth uses 50000, then the cycle starts over at 10000. Write burst activity will begin once (1/2 + 1) of the testing areas reach the N pass. There will be at least 200000 write/read commands between write bursts.
The Command History Trace part of an error message shows the type operations that are being used.
Each sector written by AHCNCQT has the data format shown below. The sector tag data is located at offsets 244 (F4H) to 283 (11BH) in all sectors.
Note that the sector tag fields are in x86 little endian format (least significant byte at lowest byte offset).
byte byte offset offset length data decimal hex in bytes pattern ------- ------- -------- --------------------------------- 000-001 000-001 2 a 16-bit random data pattern 002-243 002-0F3 2*121 repeat bytes 000-001 121 times 244-247 0F4-0F7 4 ones complement of 248-251 248-251 0F8-0FB 4 Run ID (Start Time) 252-255 0FC-0FF 4 LBA bits 31:0 256-259 100-103 4 LBA bits 63:32 (bits 63:48 are zero) 260-263 104-107 4 ones complement of 264-267 -or- the hex data 'deaddead'. 264-267 108-10B 4 command number of the last write command to this sector 268-271 10C-10F 4 ones complement of 268-271 272-275 110-113 4 sector count of the last write command to this sector 276-279 114-117 4 bits 31:0 of starting LBA of the last write command to this sector 280-283 118-11B 4 bits 63:32 of starting lba of the last write to this to this sector (bits 63:48 are zero) 284-nnn 11C-xxx 2*n repeat bytes 000-001 to fill rest of the sector
The data in bytes 000-003 are called the "basic data pattern". This pattern is repeated in bytes 4-243.
The data in bytes 244-251 are called the Run ID or Start Time. This field is used to determine if the drive has returned data that was written during the current execution of AHCNCQT.
The data in bytes 252-259 are called the LBA field. This is the LBA sector address for the sector read.
The data in bytes 260-283 are called the command fields. These fields describe the command that performed the last write to this sector. Note that unlike the time and lba fields, AHCNCQT is not able to know the expected contents of these fields. The command fields are displayed in data compare error messages.
When AHCNCQT is writing a sector and it is known that the next command is also a write that will rewrite the same sector then the data in bytes 260-263 will be deaddeadH. A sector with this special deaddeadH value should never be read from the device.
When a sector is read and data compare is done, the fields of the sector are checked in the order shown below. Only sectors with an LBA less than "NextLBA" are compared.
Data compare field checking order:
Immediately following an I/O error (does not include data compare errors), the following actions are taken with all results logged:
If using WRITE/READ FPDMA QUEUED comands:
If using WRITE/READ DMA EXT comands:
Read commands that result in a data compare error are retried once. If the retry results in a second data compare error the area is placed into read only mode.
A typical device I/O error message is shown below. Refer to the line numbers for a description of each line in the message.
1 !!!!!!!!!! ERROR !!!!!!!!!! -- Sat Dec 26 13:54:23 2009 1 Port 1, area 19, tag 19, command 269354. 1 Driver error = 1, reason = 2, message = 'i/o error'. 2 A WRITE FPDMA QUEUED command failed, 2 started at LBA 10450052 9F7484H for 5 sectors, 2 ABRT, IDNF or other I/O error. 2 Area LBA range: 10450000-10500000 NextLBA: 10450052. 3 ----- Controller/Port Interrupt and Error Status ----- 3 ... 4 ----- Command History Trace (oldest to most recent) ----- 4 ... 5 ----- Low Level Trace (oldest to most recent) ----- 5 ...
Line 1: These lines are the message heading lines which describe the when the error happen, which device caused the error and what command caused the error.
Line 2: These lines describe the command that failed or the command that was being retried when an error happened.
Line 3: These lines describe the controller status and error information.
Line 4: Commands prior to this error are shown in these lines. See COMMAND HISTORY TRACE below.
Line 5: Low level controller I/O trace. See LOW LEVEL I/O TRACE below.
A typical data compare error message is shown below. Refer to the line numbers for a description of each line in the message.
1 !!!!!!!!!! DATA COMPARE ERROR !!!!!!!!!! -- Fri Apr 6 13:51:37 2012 1 Port 0, tag 0, command 90104. 1 A read command returned the wrong data, 1 started at LBA 93,634=0000.0001.6DC2 for 249 sectors, 1 last LBA (start+sc-1) 93,882=0000.0001.6EBA, 1 239 sectors ok, 10 sectors bad, 0 sectors bypassed, 1 error span is LBA 0000.0001.6E32 to 0000.0001.6E92, sector 112 to 208. 1 LBA range: 0000.0000.0000 to 0000.0001.E847 NextLBA: 0000.0001.6DC2. 2 ----- Sector Error Information ----- 2 NOTE: Sectors that are ok or bypassed not shown. 2 -- Sector 111 -- LBA 93,745=0000.0001.6E31 -- No error found -- 2 Sector data: C0 6F C0 6F C0 6F C0 6F C0 6F C0 6F C0 6F C0 6F 2 Last write by command 37508 SC 1 LBA 93,745=0000.0001.6E31. 2 -- Sector 112 -- ExpLBA 93,746=0000.0001.6E32 -- 2 -- Sector 112 -- ActLBA 93,747=0000.0001.6E33 -- 2 at offset + 252 + FCH - expected 00016E32 - actual 00016E33 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 2 Last write by command 37513 SC 5 LBA 93,746=0000.0001.6E32. 2 -- Sector 113 -- ExpLBA 93,747=0000.0001.6E33 -- 2 -- Sector 113 -- ActLBA 93,748=0000.0001.6E34 -- 2 at offset + 252 + FCH - expected 00016E33 - actual 00016E34 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 2 Last write by command 37513 SC 5 LBA 93,746=0000.0001.6E32. 2 -- Sector 114 -- ExpLBA 93,748=0000.0001.6E34 -- 2 -- Sector 114 -- ActLBA 93,749=0000.0001.6E35 -- 2 at offset + 252 + FCH - expected 00016E34 - actual 00016E35 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 2 Last write by command 37513 SC 5 LBA 93,746=0000.0001.6E32. 2 -- Sector 115 -- ExpLBA 93,749=0000.0001.6E35 -- 2 -- Sector 115 -- ActLBA 93,750=0000.0001.6E36 -- 2 at offset + 252 + FCH - expected 00016E35 - actual 00016E36 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 2 Last write by command 37513 SC 5 LBA 93,746=0000.0001.6E32. 2 -- Sector 116 -- ExpLBA 93,750=0000.0001.6E36 -- 2 -- Sector 116 -- ActLBA 93,751=0000.0001.6E37 -- 2 at offset + 252 + FCH - expected 00016E36 - actual 00016E37 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 8F 7A 2 Last write by command 37513 SC 5 LBA 93,746=0000.0001.6E32. 2 -- Sector 204 -- ExpLBA 93,838=0000.0001.6E8E -- 2 -- Sector 204 -- ActLBA 93,839=0000.0001.6E8F -- 2 at offset + 252 + FCH - expected 00016E8E - actual 00016E8F 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B 2 Last write by command 37613 SC 5 LBA 93,838=0000.0001.6E8E. 2 -- Sector 205 -- ExpLBA 93,839=0000.0001.6E8F -- 2 -- Sector 205 -- ActLBA 93,840=0000.0001.6E90 -- 2 at offset + 252 + FCH - expected 00016E8F - actual 00016E90 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B 2 Last write by command 37613 SC 5 LBA 93,838=0000.0001.6E8E. 2 -- Sector 206 -- ExpLBA 93,840=0000.0001.6E90 -- 2 -- Sector 206 -- ActLBA 93,841=0000.0001.6E91 -- 2 at offset + 252 + FCH - expected 00016E90 - actual 00016E91 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B 2 Last write by command 37613 SC 5 LBA 93,838=0000.0001.6E8E. 2 -- Sector 207 -- ExpLBA 93,841=0000.0001.6E91 -- 2 -- Sector 207 -- ActLBA 93,842=0000.0001.6E92 -- 2 at offset + 252 + FCH - expected 00016E91 - actual 00016E92 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B 2 Last write by command 37613 SC 5 LBA 93,838=0000.0001.6E8E. 2 -- Sector 208 -- ExpLBA 93,842=0000.0001.6E92 -- 2 -- Sector 208 -- ActLBA 93,843=0000.0001.6E93 -- 2 at offset + 252 + FCH - expected 00016E92 - actual 00016E93 2 at offset + 256 + 100H - expected 00000000 - actual 00000000 2 Sector data: D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B D5 3B 2 Last write by command 37613 SC 5 LBA 93,838=0000.0001.6E8E. 2 -- Sector 209 -- LBA 93,843=0000.0001.6E93 -- No error found -- 2 Sector data: 72 92 72 92 72 92 72 92 72 92 72 92 72 92 72 92 2 Last write by command 37618 SC 6 LBA 93,843=0000.0001.6E93. 3 ----- Command History Trace (oldest to most recent) ----- 3 Line TN CmdNum T CmdTyp Count LBA48 Note 3 1 16 89930 E Ws 18 0000.001E.BB1A 3 2 16 89954 S Ws 28 0000.001E.BB2C 3 3 24 89931 E Ws 25 0000.002D.E018 3 ... 3 297 0 90103 E Rs 29 0000.0001.6DA5 3 298 0 90104 S Rs 249 0000.0001.6DC2 3 299 0 90104 E Rs 249 0000.0001.6DC2 3 300 0 90104 * Rs 249 0000.0001.6DC2 ERROR-DC
Line 1: These lines are the message heading lines which describe the command that caused the error and the current status of the drive.
Line 2: These lines are displayed for each sector with a miscompare. Except for the sector immediately before and/or after the sector(s) in error, sectors with no error are not shown. Only the first 40 sectors with errors are shown. The expected and actual data is shown in 4 or 8 byte chunks. The first 16 bytes of each sector is also shown.
Line 3: Commands prior to this error are shown in these lines. The last command shown is the failing command. See COMMAND HISTORY TRACE below.
The Command History Trace shows the most recent 300 command start, end and error events. It is displayed as part of error messages. The trace can contain three types of events: write/read command start or end, other command or reset start or end, and debug event data.
The trace contains nine columns:
The CmdTyp column is the type of command or event:
Rr, Rs, Wr and Ws commands can have these modifiers:
The Notes column indicates an error type:
The Low Level I/O Trace shows the most recent 300 controller register writes/reads and other driver events. It is displayed as part of error messages. The trace is split into two parts: the left side is driver state information and the right side is controller register information.
The Low Level Trace Event Types are:
The following table shows the commands and resets issued by AHCNCQT:
ATA Command Name Notes ---------------------------- ------------------------------ IDENTIFY DEVICE During startup. READ SECTORS During startup. SET FEATURES FR=07H (only if needed to spin up). READ FPDMA QUEUED If WRFPDMA option. WRITE FPDMA QUEUED If WRFPDMA option. READ DMA EXT If WRDMA option. WRITE DMA EXT If WRDMA option.
Versions not shown were test or skipped versions.
Version 3A3e
Version 3A3d
Version 3A3c
Version 3A3b
Version 3A3a
Version 3A3
Technical support can be found at:
http://www.ata-atapi.com/techsupp.html
-end-