반응형

embeddedsystems 5

[EEPROM/Flash] 전원 차단 시 데이터 유실 방지를 위한 웨어 레벨링 및 백업 설계

내용 요약문제: 시스템 전원 차단(Power-off) 또는 정전 발생 시 비휘발성 메모리(EEPROM/Flash)에 저장 중이던 설정 데이터가 깨지거나 배드 섹터 발생.원인: 물리적인 Flash Memory는 지우기/쓰기 횟수 한계(Endurance Cycles)가 존재, 전원 차단 시 원자적 쓰기(Atomic Write)가 보장되지 않아 데이터 비트가 비정상 매팅됨.해결: 듀얼 뱅크 구조의 백업 버퍼링 및 데이터 검증 알고리즘(CRC-16)을 적용 및 소프트웨어 Wear-Leveling 적용 섹터 가용 수명 균등 배분.비휘발성 메모리 데이터 무결성(Data Integrity) 유실 및 수명 고갈 증상임베디드 시스템 설계 시 장치의 설정값, 로그, 캘리브레이션 데이터를 저장하기 위해 EEPROM이나 MC..

[임베디드 C] UART/SPI 노이즈 데이터 왜곡을 방지하는 C언어 CRC-16-CCITT 알고리즘 검증

핵심 요약현상: UART 또는 SPI 데이터 수신 시 간헐적으로 패킷이 왜곡되거나 데이터 불일치 현상 발생.원인: 외부 전자기 간섭 및 기생 커패시턴스로 인한 비트 반전 오류.해결: 송 / 수신단에 CRC-16-CCIT 알고리즘을 적용하여 수신 패킷 무결성 검증.UART/SPI 시리얼 통신 환경의 전송 데이터 왜곡(Data Corruption) 발생 증상임베디드 하드웨어 개발 및 상용화 단계에서 전자기 환경에 장비가 노출되면 시리얼 인터페이스 라인에 심각한 물리 무선 서지 및 유도성 노이즈가 유입됩니다. 이때 UART 데이터 스트림 내 특정 바이트가 누락되거나 변형되면서 시스템은 하드웨어 먹통, 유효하지 않은 메모리 접근 또는 오동작이 발생할 수 있습니다.해외 포럼이나 Stack Overflow 등에서 ..

[MCU 설계] Peripheral 기능 오동작을 유발하는 클록(Clock) 및 GPIO 초기화 순서 오류 해결법

Quick SummarySymptom: 주변장치(Peripheral) 레지스터에 특정 데이터를 쓰거나 설정(Write/Modify)해도 값이 변경되지 않고 0으로 유지되거나, 하드웨어 작동이 완전히 먹통(Frozen/Unresponsive)이 되는 현상 발생.Cause: 하드웨어 주변장치 모듈에 버스 클록(Peripheral Bus Clock)이 공급되기 전에 모듈의 레지스터(Peripheral Registers)에 접근하거나, GPIO 모드(Alternate Function) 핀 설정이 완결되지 않은 상태에서 통신/제어 신호를 활성화하여 신호 무시(Ignored Signals) 발생.Solution: 반드시 제어하려는 Peripheral의 버스 클록 게이팅 레지스터(RCC_AHBENR, RCC_APBE..

[MCU 설계] 인터럽트 서비스 루틴(ISR) 내 delay/printf 사용 시 발생하는 지연 문제와 대책

[Quick Summary - For Global Developers]Symptom: 인터럽트 진입 후 메인 루프(Main Loop)가 완전히 멈추거나, 워치독 타이머 리셋(Watchdog Reset)이 발생하며, 특정 실시간 하드웨어 입력 인터럽트가 누락(Interrupt Missing)됨.Cause: 인터럽트 서비스 루틴(ISR) 내부에서 블로킹 방식의 delay 함수나 폴링 기반의 I/O 작업인 printf를 호출하여 상위/동일 우선순위 인터럽트 마스크 및 CPU 자원 독점이 발생함.Solution: ISR 내부의 무거운 오버헤드 코드를 전면 제거하고, 최소한의 정적 플래그(Volatile Flag) 세팅 또는 링 버퍼(Ring Buffer) 데이터 적재 후 메인 루프나 RTOS 태스크에서 처리하도..

[MCU] 워치독 타이머(Watchdog) 무한 리셋 버그 원인과 메인 루프 구조 개선 방법

[Quick Summary - For Global Developers]Symptom: 시스템이 정상 주기를 무시하고 무한히 재부팅(Infinite Reset Loop)되거나 특정 주변장치 응답 대기 시 MCU가 완전히 먹통(System Freeze)이 됨.Cause: 메인 루프 내부에 HAL_Delay() 같은 차단형(Blocking) 지연 함수를 사용하거나 외부 하드웨어의 응답을 무한 대기(Infinite polling)하여 독립형 워치독 타이머(IWDG) 레지스터를 제때 리프레시(Kicking)하지 못함.Solution: 차단형 대기 코드를 HAL_GetTick() 기반의 비차단(Non-blocking) 시간 비교 구조 및 상태 머신(State Machine) 아키텍처로 전면 수정하여 어떤 분기에서도..

반응형