일반적으로 CAN 데이터는 8바이트 크기를 전송되지만, 8바이트 이상의 데이터를 전송하기 위해 특별한 방법을 사용하여 J1939 프로토콜은 BAM(Broadcast Announce Message) 방식으로 최대 1785바이트를 전송할 수 있다. J1939 프로토콜은 0xEC00 / 0xEB00 PGN을 사용하여 멀티패킷을 전송하며, CM(Connection Management) 메시지는 멀티패킷의 PGN 및 길이 패킷 개수 정보를 나타내며, DT(Data Transfer) 메시지는 패킷 인덱스 및 데이터를 포함하고 있다. 아래 포스트에서 작성한 코드에서 멀티 패킷을 수신하는 코드를 추가할 것이며, 기존 코드에서 변경된 사항을 패치로 정리할 것이다. STM32 CAN 32비트 멀티 필터 설정 J1939 프..
J1939 프로토콜의 CAN 데이터를 수신하여 처리하려면 CAN 통신속도 250kbps, 샘플포인트 87%로 설정해야 한다. 내부클럭(HSI)을 사용할 경우 MCU의 상태에 따라 클럭이 틀어져서 CAN 데이터를 수신 못하는 문제가 발생하기 때문에 아래 이미지와 같이 외부 크리스탈을 사용하도록 한다. STM32F429 데모보드의 최대 클럭은 180MHz이므로, 위 클럭설정처럼 최대 클럭을 사용하도록 한다. CAN1이 사용하는 APB1 버스클럭은 45MHz으로 설정된다. CAN에서 통신속도 및 샘플포인트를 설정하는 것이 가장 중요하며, 아래 PPT 파일 내용과 동영상을 참고하여 J1939 프로토콜에서 사용하는 통신속도와 샘플포인트를 설정해야 한다. 250kbps의 1비트 타임은 4us이며, 20개의 타임퀀텀..
STM32F429 개발보드에서 시리얼로 출력되는 json 결과를 이용하여 J1939 데이터를 파싱하여 출력하는 간단한 모니터링 앱을 만들기 위해 파이썬으로 시리얼 통신 방법을 구글링 한 결과, pyserial 모듈을 사용하면 간단히 시리얼 통신을 할 수 있어 pip로 pyserial 모듈을 설치하도록 한다. $ sudo pip3 install pyserial 시스템 전체에 설치하고 싶지 않다면 가상환경을 만들어서 프로젝트 디렉토리에 설치하는 것도 가능하다. pyserial 모듈을 사용하여 시리얼 통신하는 방법은 인터넷에 많은 자료가 있기에 자세한 설명은 생략하기로 하고, STM32 개발보드에서 발생한 문제를 수정한 것들을 정리한 것이다. 위 앱은 일정주기로 사용자가 원하는 J1939 메시지를 PCAN_X..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.