1. Field of the Invention
The present invention relates generally to data transmission, and more particularly to error detection in data transmission.
2. Description of Related Art
A receiver 2 may be informed of the syncmark in advance, and may detect the start of user data by searching for the syncmark. At the receiver 2, a data frame from the transmitter 1 may first enter a syncmark and user data detector 102. If the syncmark is not found, the receiver 2 may claim failure and report error status. If the syncmark is found, the received bits corresponding to the user data 1103 and ECC parity 1104 may be fed from the syncmark and user data detector 102 to an ECC decoder 103. The ECC decoder 103 may try to decode and/or correct errors in its input. When there is no error, or there are errors but the errors are correctable, the ECC decoder 103 may output decoded user data. Otherwise, the ECC decoder 103 may claim failure and report error status.
The error detection capability of an ECC mainly depends on the number of bits in the ECC parity. The more bits in the ECC parity, the more errors the ECC may detect and/or correct. Thus, one known solution to enhance the error detection capability of an ECC is to use an ECC parity which is sufficiently long. However, when the physical space for a data frame is fixed, a long ECC parity may lead to higher bit density, which in turn may degrade the performance of the ECC. Therefore, it may be desirable to provide a method and apparatus that improve error correction capability of the ECC without costing data bit density.
A method for detecting errors in data transmission comprises, at a transmitter, generating an error correcting code (ECC) parity from user data and at least one bit from a syncmark; forming a data frame with the syncmark, the user data and the ECC parity; and transmitting the data frame.
A transmitter comprises: an ECC encoder for generating an ECC parity from user data and at least one bit from a syncmark.
A receiver comprises: a detector for detecting a syncmark in a received data frame comprising the syncmark, user data and an ECC parity generated from the user data and at least one bit from the syncmark; and a decoder for decoding the user data.
Embodiments of the present invention are described herein with reference to the accompanying drawings, similar reference numbers being used to indicate functionally similar elements.
To enhance the error detection capability of a given ECC without changing data bit density, the present invention includes one or more bits from the syncmark, e.g., the least significant bit (LSB) of the syncmark, in ECC encoding and decoding. The invention may be implemented in hardware, firmware, software or a combination thereof.
The ECC encoder 201 may generate a 7-bit ECC parity which is able to correct 1-bit error. In the embodiment shown, the ECC parity generated may be, e.g., “0110000”.
As shown in
A data frame from the transmitter 200 may first enter the detector 3021 and the data start location may be detected by searching for the syncmark. If the detector 3021 determines that the syncmark is found, it may store the received data frame in the data detector buffer 3022. As shown in ), the received user data
, the received ECC parity
, and padded bits or garbage after user data. A SM_FOUND signal may turn high right before the user data, indicating the start position of the received user data. The syncmark and user data detector 302 may send the LSB
of the syncmark, received user data
, and the received ECC parity
to the ECC decoder 303 for decoding.
When there are no transmission errors, the detector 3021 may find the syncmark at the correct position, and thus the bits sent to the ECC decoder 303 may be the syncmark LSB “1”, the user data “11000001” and the ECC parity “0110000”, as shown in
However, when the data is corrupted, the detector 3021 may find the syncmark at a wrong position, and send wrong bits to the ECC decoder 303. In the example shown in of the detected “syncmark” and the 15 bits thereafter for decoding. Thus, the input to the ECC decoder 303 may shift one bit to the left, and may include the last two bits of the detected “syncmark” “11”, the detected “user data” “11000001” and the first six bits of the ECC parity 011000”, as shown in
At 401, the decoder 3031 may calculate syndromes and determine whether there is an error detected in the sequence received from the syncmark and user data detector 302, which may include the LSB of the syncmark and the 15 bits following it.
In one embodiment, the ECC is a cyclic code which adds parity to user data to form a code word. The decoder 3031 may calculate syndromes based on the sequence received from the syncmark and user data detector 302. If the received sequence is a valid code word and the syndromes are all zeros, the decoder 3031 may determine that no errors are detected.
If no error is detected, the received sequence may be copied to the decoded bit buffer 3032 at 402, and the procedure may proceed to 406.
If an error is detected, at 403, the decoder 3031 may determine whether the error can be corrected.
If the error can be corrected, at 404, the decoder 3031 may correct the error based on the syndromes obtained from 401. The procedure may then proceed to 402.
If a code can correct t bits of errors, each error pattern with an error number smaller or equal to t will be diagnosed by a distinct non-zero syndrome. Once such a syndrome is found by the decoder 3031, the corresponding error pattern will be corrected. All other non-zero syndromes correspond to uncorrectable error patterns and the zero syndrome corresponds to an error free valid codeword.
If there is an error in the sequence received from the syncmark and user data detector 302 and the error cannot be corrected, the decoder 3031 may claim failure due to uncorrectable errors in the input, and finish the processing for the input at 405.
In the data frame in
At 406, the decoder 3031 may check whether the bit in the decoding result corresponding to the syncmark LSB is “1”, i.e., the value of the syncmark LSB of which the decoder 3031 was previously informed.
If yes, at 407, the decoder 3031 may claim decoding success, and output the bits corresponding to the user data in the decoded bits buffer 3032.
However, if the bit in the decoding result corresponding to the syncmark LSB is different from the syncmark LSB b, at 408, the decoder 3031 may claim decoding failure due to incorrect syncmark. For the sequence in
Steps 406-408 may add an additional safeguard by checking whether the bit in the decoding result from the decoder 3031 corresponding to the syncmark LSB is the same as the value of the syncmark LSB, and claiming decoding success only when they are the same. Consequently, transmission error in the sequence of
In the embodiment shown in
If the bit selected from the syncmark is “0”, in one embodiment, it may be inverted to “1” and added to the input to an ECC encoder. The output of the ECC encoder may be inverted before transmitting the data frame.
As shown in from the syncmark, may be fed to an input of an ECC encoder 501 of a transmitter 500, and the ECC encoder 501 may generate an ECC parity for the input. The inverted bit from the syncmark
, the user data and the parity may be inverted again, so that the bit from the syncmark is back to “0”, its value in the syncmark. A data frame may be formed with the preamble, the syncmark, the inverted user data
, and the inverted ECC parity
.
A data frame from the transmitter 500 may first enter the detector 6021 and the data start location may be detected by searching for the syncmark. If the detector 6021 determines that a syncmark is found, it may store the received data frame in the data detector buffer 6022. As shown in , the received inverted user data
, the received inverted ECC parity
, and padded bits or garbage after user data. A SM_FOUND signal may turn high right before the user data, indicating the start position of the received inverted user data. The received syncmark LSB
, the received inverted user data
, and the received inverted ECC parity
may be inverted again by the inverter 6023, so that the received inverted syncmark LSB
, the received user data
, and the received ECC parity
may be fed to the ECC decoder 603 for decoding.
A summary of the generation of data frames in the transmitter is shown in ) and user data. The output of the ECC encoder 501 may be 1 (the value of
), the user data and the ECC parity. The data frame for transmission may be the preamble, the syncmark, the inverted user data
, and the inverted ECC parity
.
Some ECC decoders may prefer that the value for the bit in the input to the ECC decoder corresponding to the syncmark LSB is 1. In one embodiment, a register bit CTRL may be used to force that bit to be 1. A summary of the input to the ECC decoder is shown in
Specifically, when CTRL=1 and b=1, the receiver shown in , the received user data
, and the received ECC parity bits
. The bit in the input to the ECC decoder 303 corresponding to the syncmark LSB is forced to be 1, and the input to the ECC decoder 303 may include 1,
, and
. Since
should be 1 in this scenario if there is no transmission error, transmission error may be filtered out. When CTRL=1 and b=0, the receiver shown in
, the received inverted user data
, and the received inverted ECC parity
. The output of the detector 6021 may be inverted by the inverter 6023 before entering the ECC decoder 603 and become
,
, and
. The bit in the input to the ECC decoder 603 corresponding to the syncmark LSB may be forced to be 1, thus, the input to the ECC decoder may become 1,
, and
. Since
should be 1 in this scenario if there is no transmission error, transmission error may be filtered out.
When CTRL=0 and b=1, the receiver in , the received user data
, and the received ECC parity bits
; and the input to the ECC decoder 303 may include
,
, and
. When CTRL=0 and b=0, the receiver shown in
, the received inverted user data
, and the received inverted ECC parity
. The output of the detector 6021 may be inverted by the inverter 6023 before entering the ECC decoder 603. Consequently, the input to the ECC decoder 603 may include the inversion of the received syncmark LSB
, the received user data
, and the received ECC parity
.
The invention may be used to improve the performance of repeated-run-out (RRO) data decoding, e.g., RRO data decoding in hard disk drives.
Several features and aspects of the present invention have been illustrated and described in detail with reference to particular embodiments by way of example only, and not by way of limitation. Alternative implementations and various modifications to the disclosed embodiments are within the scope and contemplation of the present disclosure. Therefore, it is intended that the invention be considered as limited only by the scope of the appended claims.
This application claims the benefit of priority to previously filed U.S. provisional patent application Ser. No. 61/095,136, filed Sep. 8, 2008, entitled ENHANCING ERROR DETECTION BY ENCODING LSB OF SYNCMARK IN ERROR CORRECTING CODE. That provisional application is hereby incorporated by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
4993029 | Galbraith et al. | Feb 1991 | A |
5359468 | Rhodes et al. | Oct 1994 | A |
5600662 | Zook | Feb 1997 | A |
6112324 | Howe et al. | Aug 2000 | A |
6185173 | Livingston et al. | Feb 2001 | B1 |
6198705 | Tran et al. | Mar 2001 | B1 |
6397366 | Tanaka et al. | May 2002 | B1 |
7120849 | Hwang et al. | Oct 2006 | B2 |
7134068 | Silvus et al. | Nov 2006 | B2 |
7734977 | Ornes et al. | Jun 2010 | B2 |
7783950 | Esumi et al. | Aug 2010 | B2 |
20020026615 | Hewitt et al. | Feb 2002 | A1 |
20030122964 | Hara | Jul 2003 | A1 |
20060146680 | MacDonald et al. | Jul 2006 | A1 |
20080267323 | Bliss et al. | Oct 2008 | A1 |
20090231985 | Senshu | Sep 2009 | A1 |
Number | Date | Country | |
---|---|---|---|
61095136 | Sep 2008 | US |