The detection of errors in data handled by a peripheral device or communication link; it is often associated with error recovery and error correction. Data to be stored or transmitted can be coded in a way that allows most errors to be detected. The simplest error-detecting code is the addition of a parity bit to each byte of data, but more powerful codes are often used which operate on larger units such as a sector or block. Some devices also check for marginal conditions, such as low signal amplitude, which are associated with data errors. In storage peripherals, errors may be detected at the time data is written (as in DRDW and DRAW), as a separate operation after writing (verification), or during a read operation at some later time. Error detection does not normally involve a bit-by-bit comparison with the original data even if this is still held in a buffer or in host memory. See also error control.