지금부터 필터 모드와 길이에 따라 각 필터 레지스터가 어떻게 작동하는지 알아보겠습니다.
(2) 16비트 필터
초기값으로 설정되는 필터 길이 입니다. CAN_FiRx 레지스터는 32비트 레지스터인데 16비트 필터로 설정되면 CAN_FiRx 레지스터를 CAN_FiRx[15:0]과 CAN_FiRx[31:16]을 마치 다른 필터 레지스터처럼 쓸 수 있습니다. 즉, 하나의 필터 뱅크에는 2개의 32비트 필터 레지스터가 들어 있지만, 16비트 필터 레지스터 4개가 들어 있는 것처럼 사용할 수 있다는 의미입니다. 주의할 점은 16비트 필터도 확장 식별자를 필터링할 수 있다는 것입니다. 단, 확장 식별자[17:15]만 검사할 수 있고, 확장 식별자는 비트[17:15]까지만 일치하면 나머지 비트들은 필터 차단에 영향을 미치지 않습니다.
(3) 32비트 필터
테스트해 본 결과, 확장 식별자만 필터링 가능합니다. 비트0은 항상 0이 되어야 합니다.
(4) 리스트 모드
사용자가 입력한 필터값과 모두 일치해야 프레임을 통과시키는 방식입니다. 필터의 길이가 32비트일 때는 필터 레지스터1과 필터 레지스터2가 각각의 필터로 사용되고, 필터의 길이가 16비트일 때는 필터 레지스터1[15:0], 필터 레지스터1[31:16], 필터 레지스터2[15:0], 필터 레지스터2[31:16]가 각각의 필터로 사용됩니다.
(5) 마스크 모드
사용자가 입력한 필터값은 두가지 종류로 나눠집니다. 하나는 식별자 필터이고, 나머지 하나는 마스크 필터입니다. 식별자 필터와 마스크 필터는 다음 그림과 같이 필터 범위를 구성합니다.
위와 같이 마스크 필터의 어떤 비트가 1인 경우, 데이터 프레임의 이 비트 번호에 대응하는 값은 식별자 필터의 동일한 비트 번호의 값과 반드시 일치해야 합니다. 마스크 필터의 어떤 비트가 0인 경우, 데이터 프레임의 이 비트 번호에 대응하는 값은 0이든 1이든 영향을 미치지 않습니다. 그리고 필터의 길이가 32비트일 때는 필터 레지스터 1이 식별자 필터가 되고, 필터 레지스터2가 마스크 필터가 됩니다. 필터의 길이가 16비트일 때는 필터 레지스터1[15:0]이 식별자 필터가 되고 필터 레지스터1[31:16]이 마스크 필터가 되어 필터 레지스터2와 별개로 하나의 범위를 구성하고, 필터 레지스터2도 필터 레지스터1과 동일한 방식으로 하나의 범위를 구성할 수 있습니다.
이에 대한 직관적인 그림은 RM0091 문서 832페이지에서 확인할 수 있습니다.
'CAN' 카테고리의 다른 글
5. 데이터 송신 (1) 데이터 프레임 (2) 리모트 프레임 (2) | 2017.03.21 |
---|---|
4. 필터설정 (6) CAN_FilterConfTypeDef 구조체와 HAL_CAN_ConfigFilter 함수 (0) | 2017.03.21 |
4. 필터 설정 (1) 설정 방법 (1) | 2017.03.21 |
3. 초기설정 (4) HAL_CAN_Init 함수 (0) | 2017.03.21 |
3. 초기설정 (3) CAN_HandleTypeDef 구조체 (1) | 2017.03.21 |