ECC(Error Correction Code)는 오류 검출 부호 가운데, 찾아낸 오류의 일부를 자동으로 고칠 수 있게 하는 부호다.[1] 정보를 나타내는 데 꼭 필요한 것보다 많은 요소를 쓰는 중복 부호의 하나다.[2] ITU-T X.141(11/88)은 재전송을 요청하는 대신 받은 데이터의 오류를 찾아 고치는 방식을 FEC(Forward Error Correction), 곧 순방향 오류 정정이라 한다.[3]

해밍 부호

해밍 부호는 패리티 비트 여러 개를 데이터 비트의 서로 다른 조합에 걸어, 비트 하나의 오류를 고치는 부호다. 해밍 (7,4) 부호는 데이터 4비트에 패리티 3비트를 더해 7비트 부호어를 만든다.[4][5]

패리티 비트는 부호어의 1, 2, 4번 자리에 두고, 각 패리티 비트는 자리 번호를 이진수로 썼을 때 자기 비트가 1인 자리들을 검사한다. 수신 측이 패리티를 다시 계산해 맞지 않는 것을 모으면 그 이진수가 틀린 비트의 자리 번호가 되고, 이것을 신드롬(syndrome)이라 한다.[4][5] 해밍 부호의 최소 해밍 거리는 3이다.[6][7]

정정 능력을 넘는 오류는 잘못 고쳐질 수 있다.[4][8] Xilinx XAPP645에 따르면 해밍 부호에서 비트 두 개가 뒤집히면 틀린 자리를 가리키거나 자리를 찾지 못한다.[4]

SECDED

해밍 부호에 패리티 비트를 하나 더하면, 비트 하나의 오류를 고치고 비트 두 개의 오류를 찾아내는 SECDED(Single Error Correction, Double Error Detection) 부호가 되고 최소 해밍 거리가 4로 는다.[6][7] 더하는 패리티 비트는 해밍 부호의 데이터 비트와 패리티 비트를 모두 짝수 패리티로 검사한다.[9]

Microchip CoreEDAC 사용자 가이드에 따르면 고치는 오류가 많을수록 중복 비트가 더 필요하고, 부호기와 복호기가 복잡해져 지연이 늘어난다.[7]

메모리의 ECC

메모리에 저장된 비트는 알파 입자나 중성자 같은 방사선 때문에 뒤집힐 수 있다.[10][11]

TI TMS570LS0914는 플래시와 RAM(Random-Access Memory)에 ECC를 두어, 단일 비트 오류를 고치고 다중 비트 오류는 알리기만 한다.[12] NXP S32K1xx는 플래시와 SRAM(Static Random-Access Memory)에 ECC를 두어 단일 비트 오류를 고치고, 고칠 수 없는 오류는 알린다. S32K11x의 SRAM_L에는 ECC가 없다.[10]

TI Hercules MCU는 SRAM과 플래시의 ECC를 실행 중의 하드웨어 안전 메커니즘으로 쓴다.[13] NXP 앱노트 AN13566에 따르면 ECC 메모리는 ISO 26262 같은 기능 안전 준수가 필요한 시스템에 알맞다.[6]

ARQ와의 차이

오류 검출 부호를 붙여 보내고 받는 쪽이 요청하면 다시 보내는 ARQ와 달리, ECC는 되돌려 보낼 통로 없이 오류를 고친다.[1][3] Xilinx XAPP645에 따르면 위성 수신기 같은 통신 응용에서는 데이터를 다시 보내기보다 오류를 고치는 편이 성능과 비용에서 효율적이다.[4]

RFC 3366에 따르면 링크 ARQ에서는 프레임을 다시 보낼 때마다 채널 접근, 전송, 전파, 프레임 처리 같은 단계가 되풀이되어 패킷의 지연이 늘어난다. 한편 FEC와 인터리빙은 프레임 처리에 상당한 지연을 더하고, 지터를 더하기도 한다.[14]

[1]
IEC, “IEC 60050-702 International Electrotechnical Vocabulary — 702-05-20 error correcting code.” 2016. Accessed: Sep. 29, 2026. [Online]. Available: https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=702-05-20
[2]
IEC, “IEC 60050-702 International Electrotechnical Vocabulary — 702-05-18 redundant code.” 2016. Accessed: Sep. 29, 2026. [Online]. Available: https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=702-05-18
[3]
ITU-T, “ITU-T Recommendation X.141 (11/88) General principles for the detection and correction of errors in public data networks.” 1988. Accessed: Sep. 29, 2026. [Online]. Available: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.141-198811-I!!PDF-E&type=items
[4]
“XAPP645: Single Error Correction and Double Error Detection,” Xilinx, 2006. Accessed: Sep. 29, 2026. [Online]. Available: https://docs.amd.com/v/u/en-US/xapp645
[5]
“AN0271: NAND Error Correction Codes Introduction,” Macronix International, 2014. Accessed: Sep. 29, 2026. [Online]. Available: https://www.macronix.com/Lists/ApplicationNote/Attachments/1910/AN0271V1-NAND%20Error%20Correction%20Codes%20Introduction-0217.pdf
[6]
“AN13566: ECC on i.MX 8 Series,” NXP Semiconductors, 2022. Accessed: Sep. 29, 2026. [Online]. Available: https://web.archive.org/web/20251231214631/https://www.nxp.com/docs/en/application-note/AN13566.pdf
[7]
“CoreEDAC User Guide,” Microchip Technology Inc., 2025. Accessed: Sep. 29, 2026. [Online]. Available: https://ww1.microchip.com/downloads/aemDocuments/documents/FPGA/ProductDocuments/UserGuides/ip_cores/directcores/CoreEDAC_HB.pdf
[8]
“Use of All 1’s and All 0’s Valid in Flash EEPROM Emulation,” Texas Instruments, 2011. Accessed: Sep. 29, 2026. [Online]. Available: https://www.ti.com/lit/an/spna139/spna139.pdf
[9]
R. W. Hamming, “Error Detecting and Error Correcting Codes,” Bell System Technical Journal, vol. 29, no. 2, pp. 147–160, 1950, Accessed: Sep. 30, 2026. [Online]. Available: https://web.archive.org/web/20101215004122/http://bstj.bell-labs.com/BSTJ/images/Vol29/bstj29-2-147.pdf
[10]
“AN12522: S32K1xx ECC Error Handling,” NXP Semiconductors, 2019. Accessed: Sep. 29, 2026. [Online]. Available: https://web.archive.org/web/20250620005619/https://www.nxp.com/docs/en/application-note/AN12522.pdf
[11]
“Keystone Error Detection and Correction,” Texas Instruments, 2021. Accessed: Sep. 29, 2026. [Online]. Available: https://www.ti.com/lit/an/spraco4a/spraco4a.pdf
[12]
“TMS570LS0914 16- and 32-Bit RISC Flash Microcontroller,” Texas Instruments, 2016. Accessed: Sep. 29, 2026. [Online]. Available: https://www.ti.com/lit/ds/symlink/tms570ls0914.pdf
[13]
“Hercules Microcontrollers: Real-time MCUs for safety-critical products,” Texas Instruments, 2011. Accessed: Sep. 29, 2026. [Online]. Available: https://www.ti.com/lit/wp/spry178/spry178.pdf
[14]
IETF, “RFC 3366 Advice to link designers on link Automatic Repeat reQuest (ARQ).” 2002. Accessed: Sep. 29, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc3366