| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- PTN5150A
- assigned-clocks
- 리눅스 CAN
- CAN FD
- 임베디드
- 리눅스 커널
- EILSEQ
- EASRC
- 타임베이스
- SocketCAN
- restart-ms
- 44.1kHz
- CC 로직
- error-passive
- i.MX8MP
- 오디오 클럭
- xHCI
- TIM17
- HAL_Delay
- 임베디드 리눅스
- 임베디드 오디오
- bus-off
- CAN 필터
- 하드웨어 디버깅
- can-utils
- can_filter
- Azure RTOS
- 커스텀 보드
- fsl-sai
- vcan
- Today
- Total
목록전체 글 (15)
임베디드 일기장
i.MX8MP 보드에서 48kHz 음원은 잘 나오는데 44.1kHz 음원을 재생하면 이런 에러와 함께 실패한다.fsl-sai 30c30000.sai: failed to derive required Tx rate: 1411200이 에러의 정체는 "44.1kHz용 비트클럭(BCLK) 1,411,200Hz를 지금 물려 있는 클럭 소스로는 정수 분주로 만들 수 없다"는 것이다. 이 글은 왜 그런지(오디오의 두 클럭 패밀리), 어떻게 고치는지(assigned-clocks), 그리고 그 과정에서 헷갈리는 DT 속성들(clocks vs assigned-clocks)의 관계를 정리한다.1. 배경: 오디오에는 서로 섞이지 않는 두 클럭 패밀리가 있다디지털 오디오의 샘플레이트는 두 가문으로 나뉜다.48k 가문: 8k,..
CAN 컨트롤러는 에러가 누적되면 스스로 버스에서 물러난다. 이 보호 메커니즘(error confinement)의 종착역이 bus-off 상태인데, 여기 들어가면 송수신이 완전히 멈추고 저절로 돌아오지 않는다(설정하지 않는 한). 이 글은 리눅스에서 bus-off를 진단하고 복구하는 방법을 정리하고, 후반부에서는 CAN 하드웨어가 없는 개발 PC에서 상위 스택을 테스트하는 vcan 환경 구성을 다룬다.1. CAN 에러 상태머신 복습CAN 노드는 TEC/REC(송신/수신 에러 카운터)에 따라 세 상태를 오간다.Error-Active (정상: 에러 프레임을 dominant로 송출 가능) ↓ 카운터 > 127Error-Passive (경고: 통신은 되지만 에러 프레임이 recessive, 송신 후 대..
1. 업무 행위 용어 (한자어 행위명사)단어뜻의뢰(依賴)외부 기관·업체에 일을 요청함. 단발성 요청에 가장 널리 쓰이는 공식 용어 (예: 시험 의뢰, 검사 의뢰)위탁(委託)계약 관계로 업무를 맡김. 장기적·반복적 업무에 적합 (예: 시험 위탁 계약, 위수탁 계약)대행(代行)어떤 일을 책임지고 대신 수행함. 수행 책임까지 넘기는 뉘앙스 (예: 인증 대행)대리(代理)다른 사람을 대신함 (예: 대리 응시, 대리인)위임(委任)권한이나 책임을 다른 사람에게 맡김수탁(受託)남의 부탁·업무를 받아서 맡음 (위탁의 반대 입장)수임(受任)위임받은 쪽에서 임무를 맡음이관(移管)업무나 관할을 다른 부서·기관으로 옮김 (예: 시험 업무 이관)이임(移任)임무나 권한을 넘겨 맡김. 주로 직위 이양에 사용전가(轉嫁)책임이나 의무를..
i.MX8MP 커스텀 보드의 Type-C 포트에 USB 3.0 메모리를 꽂았는데 속도가 안 나온다. 이럴 때 첫 질문은 "3.0을 시도하다가 실패한 건가, 아예 시도조차 안 한 건가"이다. 이 둘은 원인 영역이 완전히 다르기 때문이다. 이 글은 dmesg 로그에서 그 답을 읽는 법과, 커스텀 Type-C 설계에서 SuperSpeed가 증발하는 하드웨어 경로(CC 로직, 크로스바 스위치)를 추적한 과정이다.환경SoC: i.MX8MP (xHCI, USB 3.0 지원)Type-C 구성: PTN5150A (CC 로직 IC) + SS 신호 크로스바 스위치증상: USB 3.2 Gen1 메모리가 항상 480Mbps(High-Speed)로만 열거1. dmesg 판독: "시도 후 실패"와 "시도 없음"은 로그가 다르다실..
리눅스에서 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 \..
CubeMX에서 ThreadX(Azure RTOS)를 활성화하면 System Core > SYS의 Timebase Source가 SysTick에서 TIM6이나 TIM17 같은 일반 타이머로 바뀌어 있는 걸 보게 된다. 이게 뭘 하는 설정이고 왜 바꿔야 하는지, 그리고 안 바꾸면 어떤 증상이 나는지를 STM32H563 기준으로 정리한다. 결론은 한 문장이다: SysTick이라는 하나의 인터럽트에 주인이 둘(HAL과 ThreadX)이 붙으면 안 되기 때문이다. 환경MCU: STM32H563ZIT6RTOS: ThreadX툴: CubeMX, HAL 라이브러리1. SYS는 페리페럴이 아니다먼저 헷갈리기 쉬운 것부터. CubeMX의 "SYS"는 칩 안에 존재하는 페리페럴이 아니라 CubeMX가 만든 가상 그룹이다...
RS-485 half-duplex 버스에서 Modbus RTU를 돌리려면 트랜시버의 DE/RE 핀을 제때 토글해야 한다. 송신 중에는 DE=1, 송신이 끝나는 즉시 DE=0으로 내려서 슬레이브 응답을 받을 준비를 해야 한다. 이 타이밍을 누가 책임지느냐가 이 글의 주제다. 결론부터: libmodbus에 맡기지 말고 커널 드라이버에 위임하라. 환경보드: i.MX8MP (imx-uart 드라이버)라이브러리: libmodbus (Modbus RTU 마스터)트랜시버: DE/RE 제어가 필요한 일반적인 RS-485 트랜시버1. 문제: 누가 DE를 토글하나구성은 이렇다.[i.MX8MP UART] ──TX/RX──> [RS-485 트랜시버] ──> [버스] RTS ────> DE/REl..
리눅스 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..