| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- xHCI
- assigned-clocks
- CAN 필터
- bus-off
- HAL_Delay
- 임베디드 오디오
- 44.1kHz
- i.MX8MP
- can-utils
- 임베디드
- CAN FD
- fsl-sai
- vcan
- 커스텀 보드
- restart-ms
- Azure RTOS
- EASRC
- CC 로직
- PTN5150A
- 하드웨어 디버깅
- SocketCAN
- EILSEQ
- TIM17
- 리눅스 커널
- 타임베이스
- 리눅스 CAN
- 오디오 클럭
- can_filter
- error-passive
- 임베디드 리눅스
- Today
- Total
목록SocketCAN (3)
임베디드 일기장
CAN 컨트롤러는 에러가 누적되면 스스로 버스에서 물러난다. 이 보호 메커니즘(error confinement)의 종착역이 bus-off 상태인데, 여기 들어가면 송수신이 완전히 멈추고 저절로 돌아오지 않는다(설정하지 않는 한). 이 글은 리눅스에서 bus-off를 진단하고 복구하는 방법을 정리하고, 후반부에서는 CAN 하드웨어가 없는 개발 PC에서 상위 스택을 테스트하는 vcan 환경 구성을 다룬다.1. CAN 에러 상태머신 복습CAN 노드는 TEC/REC(송신/수신 에러 카운터)에 따라 세 상태를 오간다.Error-Active (정상: 에러 프레임을 dominant로 송출 가능) ↓ 카운터 > 127Error-Passive (경고: 통신은 되지만 에러 프레임이 recessive, 송신 후 대..
리눅스에서 CAN FD를 쓰다 보면 세 군데서 순서대로 막힌다. 인터페이스 설정, write()가 뱉는 정체불명의 에러, 그리고 수신 필터. 세 가지를 실전 순서대로 정리한다. 환경은 i.MX8MP(FlexCAN)이지만 SocketCAN 공통 내용이라 다른 컨트롤러에도 그대로 적용된다.1. 인터페이스 설정: 중재 구간과 데이터 구간은 따로 논다CAN FD는 한 프레임 안에서 속도가 두 번 바뀐다. 중재(arbitration) 구간은 클래식 CAN과 호환되는 속도로, 데이터 구간은 BRS 비트가 켜져 있으면 고속으로 달린다. 그래서 설정도 두 벌이다.ip link set can0 downip link set can0 type can \ bitrate 500000 sample-point 0.875 \..
리눅스 ISO-TP(ISO 15765-2) 소켓으로 CAN 통신을 하다 보면 고개를 갸웃하게 되는 에러를 만난다. read()가 실패했는데 errno가 ECOMM, 즉 "Communication error on send"다. 나는 읽기를 했는데 왜 "송신 에러"가 나오나? 커널 소스 net/can/isotp.c를 열어 read 경로를 아무리 뒤져도 ECOMM을 리턴하는 코드가 안 보인다. 이 글은 그 미스터리의 답인 소켓 계층의 sk_err 에러 전파 메커니즘을 정리한 것이다. 환경커널: 5.15.71 (i.MX8MP), net/can/isotp.c구성: 한 물리 CAN 버스 위에 다채널 ISO-TP 세션1. ECOMM은 read가 만든 에러가 아니다isotp.c의 errno 매핑을 정리하면 이렇다.TX..