Configurable Fault Status Register (0xE000ED28). 추측 대신 증거로 원인을 좁힌다.
세 부분으로 나뉜다
MMFSR 메모리 관리 폴트 MPU 위반 · 실행 불가 영역
BFSR 버스 폴트 정밀/비정밀 구분 · 스태킹 중 오류
UFSR 사용 폴트 UNALIGNED · DIVBYZERO · 정의되지 않은 명령
함께 보는 것
HFSR HardFault 로 승격됐는지 (FORCED 비트)
MMFAR 메모리 폴트가 난 주소
BFAR 버스 폴트가 난 주소 ← 유효 비트가 서 있을 때만 신뢰한다
읽는 순서
1. CFSR 에서 종류 확인 예: UNALIGNED 비트
2. BFAR/MMFAR 로 문제 주소 확인 예: 0x00000003 → 널 포인터 근처
3. 스택 프레임에서 PC 를 꺼낸다
4. 맵 파일이나 addr2line 으로 함수·줄 번호 특정
비정밀 버스 폴트
쓰기가 버퍼링돼 폴트가 늦게 도착하면 주소가 유효하지 않다.
그럴 때는 SCB->CCR 의 쓰기 버퍼 비활성화 비트를 켜서 재현하면 정확한 위치가 잡힌다.