<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩탐사선</title>
    <link>https://codingexplore.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 23 Jul 2026 06:11:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>leecrossun</managingEditor>
    <image>
      <title>코딩탐사선</title>
      <url>https://tistory1.daumcdn.net/tistory/3893054/attach/bb40b11f70e94d90adb79dd8a83c8b05</url>
      <link>https://codingexplore.tistory.com</link>
    </image>
    <item>
      <title>x86 Assembly - 데이터 이동, 산술연산, 논리연산</title>
      <link>https://codingexplore.tistory.com/134</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;어셈블러는 어셈블리어를 기계어로 치환해주는 프로그램이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이와 반대로 리버스 엔지니어링으로 개발된 역어셈블러는 기계어를 어셈블리어로 역치환해준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반적으로, 아키텍처별로 문법이 상이하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아키텍처가 같더라도 어셈블러 내 정의에 따라 문법이 다를 수도 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r9AsB/dJMb84Du3F5/isBtNDRkylh86CSdrm9ED1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r9AsB/dJMb84Du3F5/isBtNDRkylh86CSdrm9ED1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r9AsB/dJMb84Du3F5/isBtNDRkylh86CSdrm9ED1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr9AsB%2FdJMb84Du3F5%2FisBtNDRkylh86CSdrm9ED1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;301&quot; height=&quot;177&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;대표적인 아키텍처인 &lt;b&gt;Intel사의 x86&lt;/b&gt; 기준으로 &lt;b&gt;NASM(Netwide Assembler)&lt;/b&gt;의 문법을 간단히 정리해보자&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;외운다기 보다는 이후 실습을 하면서 자연스럽게 체화를 하면 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;비교적 익숙한 C언어를 어셈블리어로 변환해주는 사이트가 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래 사이트를 활용하면, 어셈블러 문법을 C언어와 비교해가며 이해하는 데 도움이 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://gcc.godbolt.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gcc.godbolt.org/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761452224083&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Compiler Explorer&quot; data-og-description=&quot;&quot; data-og-host=&quot;gcc.godbolt.org&quot; data-og-source-url=&quot;https://gcc.godbolt.org/&quot; data-og-url=&quot;https://gcc.godbolt.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hmm3A/hyZMoTM9u8/uyk3N20ADFFLOH7jpdMvUK/img.png?width=125&amp;amp;height=128&amp;amp;face=0_0_125_128&quot;&gt;&lt;a href=&quot;https://gcc.godbolt.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gcc.godbolt.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hmm3A/hyZMoTM9u8/uyk3N20ADFFLOH7jpdMvUK/img.png?width=125&amp;amp;height=128&amp;amp;face=0_0_125_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Compiler Explorer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gcc.godbolt.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;명령어 종류&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;NASM의 대략적인 명령어 종류는 다음과 같다&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 66.9753%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;데이터 이동&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;mov, lea&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;산술 연산&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;inc, dec, add, sub, mul, imul&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;논리 연산&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;and, or, xor, not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;비교&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;cmp, test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;분기&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;jmp, je, jg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;스택&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;push, pop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;프로시져&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;call, ret, leave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%; text-align: center;&quot;&gt;시스템 콜&lt;/td&gt;
&lt;td style=&quot;width: 49.8693%; text-align: center;&quot;&gt;syscall&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;피연산자&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;피연산자 종류에는 상수, 레지스터 그리고 메모리 주소가 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉시값(Immediate value) : 코드 자체에 직접 포함된 고정된 상수값 (0x1242, 0xffff 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;레지스터 : 레지스터 (rax, rbx 등) 안에 들어있는 값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메모리 주소 : 메모리 주소값, 레지스터에 저장된 메모리 주소값,&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(C언어 포인터 느낌이다. 레지스터 -&amp;gt; 메모리 -&amp;gt; 참조값)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메모리 주소의 경우에는 [ ] (대괄호) 안에 넣어서 표현한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그리고 대괄호 앞에 참조 메모리의 크기를 지정하는 PTR이 올 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;필수 사항은 아니지만 오류 방지차원에서 명확한 크기를 명시하는 편이 좋다&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761456539008&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov [rdi], eax  ; (X) 오류 발생 가능: 몇 바이트를 가져올 것인지 크기 지정이 명확하지 않음
mov DWORD PTR [rdi], eax  ; (O) 명확한 크기 지정 (0x8048000 위치의 메모리를 4byte 참조)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터 이동&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터 이동 연산은 크게 두가지로 나뉜다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;직접 값을 복사하여 이동시키는 방식(mov) 과 메모리 주소를 가져오는 방식(lea) 이 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;대부분의 명령어 연산 문법은 &lt;b&gt;[명령어] [목적지 피연산자] [소스 피연산자]&lt;/b&gt; 구조를 이룬다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터 이동 연산도 위 구조를 따른다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;mov&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;mov연산은 메모리에 직접 접근하여 담긴 값 자체를 복사하여 이동시킨다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761461948892&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int val = arr[1]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;C언어로 표현하면 위와 같다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 코드는 배열의 첫번째 메모리에 직접 접근해서 해당 값을 int 변수에 저장한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;어셈블리어의 mov연산의 원리도 동일하다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761462740260&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov rbx, &amp;amp;arr; rbx = arr의 주소
mov rcx, 2; 배열의 인덱스
mov rax, [rbx + rcx * 4]; arr[2]에 직접 접근하여 갑을 rax에 할당한다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;lea&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;lea연산은 메모리에 접근하지 않고 메모리 주소를 가져오는 방식이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉, 유효주소 EA(Effective Address)를 저장하는 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;C언어의 포인터 개념이라고 생각하면 된다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761462766132&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int *ptr = &amp;amp;arr[1];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어셈블리어로 표현하면 다음과 같다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761462924748&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov rbx, &amp;amp;arr; rbx = arr의 주소
mov rcx, 1; 배열의 인덱스
lea rax, [rbx + rcx * 4]; arr[1]의 주소를 rax에 대입한다&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;산술연산&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;add(덧셈), sub(뺄셈) 연산도 기본 연산 구조 &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;[명령어] [목적지 피연산자] [소스 피연산자]&lt;/span&gt;를 그대로 따른다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761457577864&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;add eax, 1; eax값에 1을 더한다
sub ecx, edx; ecx에서 dex를 뺀다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;곱셈은 조금 다르다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우선, 피연산자를 레지스터에 저장하고 곱셈을 수행할 때 해당 값을 꺼내서 사용한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(주로 AL, AX, EAX, RAX 레지스터를 사용한다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;피연산자의 크기에 따라 연산 결과의 크기가 다르므로, 결과값이 저장되는 레지스터가 다르다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(e.g., EAX * ESI (32bit * 32bit) 연산은 결과값이 최대 64bit이므로 상위 32bit, 하위 32bit 나누어야 한다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그리고, 부호가 없는 mul 연산과 부호가 있는 imul 연산으로 나뉜다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;mul&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;8bit 연산&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;AL 레지스터의 값과 src 피연산자의 값 곱하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 숫자의 연산 결과는 최대 16비트 이기때문에, AX (16비트) 레지스터에 보관&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761458989504&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;section .data
    num1 db 5
    num2 db 3

section .text
    global _start

_start:
    mov al, [num1]  ; AL 레지스터에 첫 번째 피연산자(5)를 로드
    mul byte [num2] ; AL과 num2(3)를 곱함. 결과 15(0x0F)가 AX에 저장

    ; 프로그램 종료
    mov eax, 1
    xor ebx, ebx
    int 0x80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;16bit 연산&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;AX 레지스터의 값과 src 피연산자의 값 곱하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;곱한 결과의 상위 16비트는 DX 레지스터, 하위 16비트는 AX 레지스터에 보관&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761459010456&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov ax, 0x2000
mov bx, 0x0100
mul bx          ; DX:AX = AX * BX = 0x200000. DX=0x0002, AX=0x0000&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;32bit 연산&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;AX 레지스터의 값과, src 피연산자의 값 곱하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;곱한 결과의 상위 32비트는 EDX 레지스터, 하위 32비트는 EAX 레지스터에 보관&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761459071288&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov eax, 1000
mov ebx, 50
mul ebx         ; EDX:EAX = EAX * EBX. EAX = 50000, EDX = 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;64bit 연산&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;RAX 레지스터의 값과 src 피연산자의 값을 곱하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;곱한 결과의 상위 64비트는 RDX 레지스터, 하위 64비트는 RAX 레지스터에 보관&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761459224576&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;section .data
    num1 dq 20000000000      ; 64비트 정수, 십진수 20,000,000,000
    num2 dq 3                ; 64비트 정수, 십진수 3

section .text
    global _start

_start:
    ; 첫 번째 피연산자를 rax에 로드
    mov rax, [num1]      ; rax = 20,000,000,000

    ; 두 번째 피연산자를 rbx에 로드
    mov rbx, [num2]      ; rbx = 3

    ; rax와 rbx의 값을 곱함 (unsigned)
    ; 결과는 rdx(상위 64비트):rax(하위 64비트)에 저장
    mul rbx              ; rdx:rax = 60,000,000,000

    ; 프로그램 종료 (Linux)
    mov rax, 60          ; sys_exit 호출
    mov rdi, 0           ; 종료 코드
    syscall&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;imul (signed 연산)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;imul은 부호가 있는 signed 정수에 대한 곱셈을 수행한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;mul과는 다르게 피연산자가 최대 3개까지 올 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761460070401&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;imul &amp;lt;source&amp;gt;; mul 연산과 유사하게 동작
imul &amp;lt;destination&amp;gt;, &amp;lt;source&amp;gt;; 두 피연산자를 곱한 결과를 첫번째 연산자에 저장
imul &amp;lt;destination&amp;gt;, &amp;lt;source&amp;gt;, &amp;lt;immediate&amp;gt;; 두번째, 세번째 피연산자를 곱한 결과를 첫번째 피연산자에 저장&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761460964240&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov ax, 10  ; AX 레지스터에 10을 저장한다
mov bx, 5   ; BX 레지스터에 5를 저장한다
imul ax, bx, 7  ; AX는 BX * 7의 결과를 저장한다
                ; AX에는 5 * 7 = 35 (0023h)가 저장된다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;만약 연산 결과가 목적지 피연산자의 크기를 초과한다면 CF(Carry Flag)와 OF(Overflow Flag)를 1로 설정한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(이상 없을 시에는 0)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;INC, DEC&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;inc와 dec는 피연산자의 값을 1씩 증가/감소 시키는 연산자이다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761461180152&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mov ax, 10;
inc ax; ax레지스터의 값이 1 증가한다 (11)

mov bx, 10;
dec bx; bx레지스터의 값이 1 감소한다 (9)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;논리연산&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;논리연산자에는 &lt;b&gt;and, or, xor, not&lt;/b&gt; 이 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;각각 bit 논리연산을 수행한다&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 69.3005%; height: 147px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.4961%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;연산자&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5193%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결과값&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1397%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;용도&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.4961%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;and&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5193%; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 bit가 모두 1이면 1, 아니면 0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1397%; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;비트마스킹&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 14.4961%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;or&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5193%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 bit중 하나라도 1이 있으면 1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;둘다 0이면 0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1397%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;특정 비트 set&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 14.4961%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;xor&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5193%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 bit가 다르면 1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 bit가 같으면 0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1397%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;비트 토글 및 암호화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.4961%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;not&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5193%; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;비트반전&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1397%; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Complement 연산&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761461411252&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;section .data
    val1 db 0xFF  ; 이진수로 1111 1111
    val2 db 0x0F  ; 이진수로 0000 1111
    result db 0

section .text
    global _start

_start:
    mov al, [val1]
    xor al, [val2]    ; al과 val2의 값을 XOR 연산하여 al에 저장한다 (결과: 0xF0, 이진수 1111 0000)
    mov [result], al&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;비트 기본 연산을 수행하는 연산자이므로 까다로운 부분은 없다&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;논리연산까지 정리하고 나니 분량이 길어져서 우선 여기서 끊고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다음글에서 남은 연산(비교연산, 분기연산 등) 들을 정리해야겠다&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고자료&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_assembly_language&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/X86_assembly_language&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761451690427&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;x86 assembly language - Wikipedia&quot; data-og-description=&quot;From Wikipedia, the free encyclopedia Family of backward-compatible assembly languages x86 assembly language is a family of low-level programming languages that are used to produce object code for the x86 class of processors. These languages provide backwa&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/X86_assembly_language&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/X86_assembly_language&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/X86_assembly_language&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/X86_assembly_language&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;x86 assembly language - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Wikipedia, the free encyclopedia Family of backward-compatible assembly languages x86 assembly language is a family of low-level programming languages that are used to produce object code for the x86 class of processors. These languages provide backwa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- &lt;a href=&quot;https://docs.oracle.com/cd/E19641-01/802-1948/802-1948.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/cd/E19641-01/802-1948/802-1948.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://www.nasm.us/docs/3.01/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.nasm.us/docs/3.01/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761456700356&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;NASM - The Netwide Assembler&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.nasm.us&quot; data-og-source-url=&quot;https://www.nasm.us/docs/3.01/&quot; data-og-url=&quot;https://www.nasm.us/docs/3.01/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.nasm.us/docs/3.01/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.nasm.us/docs/3.01/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;NASM - The Netwide Assembler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.nasm.us&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/Pwnable</category>
      <category>cyber security</category>
      <category>pwnable</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/134</guid>
      <comments>https://codingexplore.tistory.com/134#entry134comment</comments>
      <pubDate>Sun, 26 Oct 2025 16:26:17 +0900</pubDate>
    </item>
    <item>
      <title>Linux Memory Layout</title>
      <link>https://codingexplore.tistory.com/133</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTgfpU/dJMb9PfkN7C/UWqWYKeV6RwKGDqMcUIDq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTgfpU/dJMb9PfkN7C/UWqWYKeV6RwKGDqMcUIDq1/img.png&quot; data-alt=&quot;Process Memory Structure&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTgfpU/dJMb9PfkN7C/UWqWYKeV6RwKGDqMcUIDq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTgfpU%2FdJMb9PfkN7C%2FUWqWYKeV6RwKGDqMcUIDq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;475&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Process Memory Structure&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 그림은 프로세스 메모리 구조이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;간혹 주소 0번지가 가장 위에 표현되어서 스택이 아래에 있는 자료도 있는데,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개인적으로, '스택이 아래로 자란다' 라는 표현 때문에 (높은주소-&amp;gt;낮은주소) 를 의미해서 그림에서도 위에서 아래로 자라는 표현 방식이 더 직관적으로 와닿았다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프로세스가 실행될 때 각 프로세스는 독립된 5개의 메모리 공간(세그먼트)을 할당받는다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 메모리 공간은 각각 목적에 따라 여러 영역으로 나뉜다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;각 영역은 높은 주소부터 차례로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스택, 힙, BSS, 데이터, 코드 세그먼트로 나뉜다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;'&lt;b&gt;낮은 주소(코드) 에서 가장 높은 주소(스택) 로 갈수록 휘발성이 강하다&lt;/b&gt;' 고 생각하면 이해하기 좋다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;왜 나누냐면, &lt;b&gt;용도에 맞게 각 영역에 권한을 부여하기 위해&lt;/b&gt;서 (rwx)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;CPU 는 각 영역의 권한에 맞는 행위만 할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;예를 들어, 코드가 저장되는 세그먼트는 임의로 접근해서 WRITE 을 해서는 안되고, 변수가 저장되는 세그먼트는 EXECUTE를 제한해서 임의 코드가 실행되는 것을 막아야 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;좀더 자세한 내용을 알아보자&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;코드 세그먼트 (=텍스트 세그먼트)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;코드 세그먼트는 기계어 코드를 저장하고, CPU가 프로그램 실행 시 여기에 있는 기계 코드를 메모리에 올린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;코드는 읽고 실행을 해야하지만 직접 접근해서 변경해서는 안되기 때문에 쓰기 권한은 제한되어 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;읽기 권한 READ (O)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기 권한 WRITE (X) &amp;lt;- 코드 위변조 방지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 권한 EXECUTE (O)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761444337064&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;section .data
    message db &quot;Hello, World!&quot;, 0xA
    message_len equ $ - message

section .text // 이 아래에 어셈블리어 코드 입력하면 컴파일 시 텍스트 세그먼트에 기계어 코드가 옴
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, message
    mov rdx, message_len
    syscall

    mov rax, 60
    xor rdi, rdi
    syscall&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터 세그먼트&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;컴파일 시점에 값이 정해진 전역변수, 전역상수가 저장된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기가 가능한 data 세그먼트와 쓰기가 불가능한 rodata (read-only) 세그먼트가 있는데,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 도중 변경 가능한 &lt;b&gt;전역 변수는 data 세그먼트&lt;/b&gt;에, 그렇지 않은 &lt;b&gt;전역 상수는 rodata 세그먼트&lt;/b&gt;에 저장된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;읽기 권한 READ (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기 권한 WRITE (O/X)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 권한 EXECUTE (X)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761444956371&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int data_num = 31337;                       // 전역변수 (data)
char data_rwstr[] = &quot;writable_data&quot;;        // 전역변수 (data)
const char data_rostr[] = &quot;readonly_data&quot;;  // const 전역상수 (rodata)
char *str_ptr = &quot;readonly&quot;;  // 포인터 전역변수 (data), 문자열 상수 (rodata)

int main() { ... }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;BSS 세그먼트 (Block Started by Symbol 세그먼트)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;컴파일 시점에 값이 정해지지 않은 전역변수가 위치하는 메모리 영역이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(e.g., 개발자가 선언만 하고 초기화하지 않은 전역 변수)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프로그램 실행 시 모두 초기값 0으로 초기화된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;읽기 권한 READ (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기 권한 WRITE (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 권한 EXECUTE (X)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;힙 세그먼트&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 중에 동적으로 할당되는 메모리이며, 스택과는 반대방향으로 자란다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Linux의 sys_brk, mmap 시스템콜로 힙 세그먼트를 관리할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;C언어에서 malloc(), calloc() 과 같은 동적 할당 함수를 통해 할당받는 메모리에 해당한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(이 동적 할당 함수도 결국 내부적으로 위 Linux 시스템콜을 사용하는 것이다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;읽기 권한 READ (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기 권한 WRITE (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 권한 EXECUTE (X)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761448051724&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main() {
  int *heap_data_ptr =
      malloc(sizeof(*heap_data_ptr));  // 동적 할당한 힙 영역의 주소를 가리킴
  *heap_data_ptr = 31337;              // 힙 영역에 값을 씀
  printf(&quot;%d\n&quot;, *heap_data_ptr);  // 힙 영역의 값을 사용함
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스택 세그먼트&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;함수의 매개변수, 지역변수등 임시로 할당되는 변수들이 실행 중에 저장되는 공간이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 변수들은 함수가 호출될 때 생성되었다가 반환될 때 해제된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;함수가 언제 호출되고 해제될 지 실행 흐름을 예측하는 것은 불가능하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉, 스택 프레임 크기는 미리 계산할 수 없다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그러므로, 프로세스 시작 시 스택 세그먼트를 최소 할당하고, 부족하면 이를 확장해준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;높은주소에서 낮은 주소로 확장된다 (스택은 '아래로 자란다' 라는 표현이 이 의미)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;어셈블리어에서는 함수의 에필로그와 프롤로그에서 각각 직접 스택 프레임을 만들고 해제한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프로세스 동작 중에 할당되고 사용되므로 READ, WRITE 권한이 모두 허용된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다만, 실행 권한은 제한된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;초기에는 실행권한이 허용되었으나, 임의 코드 실행을 막기 위해 &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;NX(Non-Executable) 보호기법&lt;/b&gt;이 등장한 이후 실행 권한을 없앴다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;읽기 권한 READ (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쓰기 권한 WRITE (O)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 권한 EXECUTE (X) &amp;lt;- NX 보호기법 적용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761448068555&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// GCC Compiler, x86 assembly

// 함수 프롤로그 (스택 프레임 생성)
push ebp // 베이스 포인터를 스택에 push
mov ebp, esp // 베이스 포인터를 현재 스택 포인터의 주소 (esp, stack 상단) 으로 설정
sub esp, 0x100 // 현재 스택 포인터의 주소로부터 일정 크기만큼 감소 (공간 확보)

// 함수 에필로그 (스택 프레임 정리)
mov esp, ebp // 베이스 포인터를 esp로 옮김 (프롤로그 호출 시점의 스택 포인터)
pop ebp // 베이스 포인터 pop
ret // 함수 호출 전으로 리턴
// -&amp;gt; leave; ret; 도 동일한 동작 수행&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;힙과 스택이 반대로 자라는 이유?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두 세그먼트 모두 확장성있어 프로세스 실행 도중 가변적으로 크기가 변한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;만약 같은 방향으로 자라면 확장 과정에서 서로 영역을 침범하여 충돌할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;각각 시작을 반대쪽 끝에 위치시키고 자라게 하면 최대한 충돌을 피하면서 자유롭게 확장할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최종 정리&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 143px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;세그먼트&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;역할&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;권한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;저장 데이터&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스택&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;임시 변수&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;R, W&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;지역변수, 매개변수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 42px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;힙&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행 중 동적 할당 영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;R, W&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;동적 할당 함수&lt;br /&gt;(malloc, calloc)로 할당받는 메모리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;BSS&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;초기화되지 않은 데이터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;R, W&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;초기화되지 않은 전역변수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;초기화된 데이터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;R, (W - 전역변수만)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;초기화된 전역변수, 전역상수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.0233%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;코드&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.6279%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행가능한 코드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.5348%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;R, E&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;함수 코드&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 자료&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;- https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761443658050&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;the structure of the virtual memory of a Linux process&quot; data-og-description=&quot;I'm reading a textbook which shows virtual memory as: Linux also maps a set of contiguousvirtual pages (equal in size to the total amount of DRAM in the system) to the corresponding set of contiguous&quot; data-og-host=&quot;unix.stackexchange.com&quot; data-og-source-url=&quot;https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&quot; data-og-url=&quot;https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/capjgb/hyZMgOWtLr/QZjwjPJUPaKfkKkj52oduk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bk4S2A/hyZMriEwLI/TlhtRxm4tv6DsHOVxICYsK/img.png?width=410&amp;amp;height=475&amp;amp;face=0_0_410_475&quot;&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://unix.stackexchange.com/questions/610444/the-structure-of-the-virtual-memory-of-a-linux-process&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/capjgb/hyZMgOWtLr/QZjwjPJUPaKfkKkj52oduk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bk4S2A/hyZMriEwLI/TlhtRxm4tv6DsHOVxICYsK/img.png?width=410&amp;amp;height=475&amp;amp;face=0_0_410_475');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;the structure of the virtual memory of a Linux process&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I'm reading a textbook which shows virtual memory as: Linux also maps a set of contiguousvirtual pages (equal in size to the total amount of DRAM in the system) to the corresponding set of contiguous&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;unix.stackexchange.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761450655120&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Stack vs Heap Memory Allocation - GeeksforGeeks&quot; data-og-description=&quot;Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.&quot; data-og-host=&quot;www.geeksforgeeks.org&quot; data-og-source-url=&quot;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&quot; data-og-url=&quot;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LSSql/hyZMlpdGhj/csJxTl2gBgTX7ZJp1YulpK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/c7NtK3/hyZLhBhbix/fcUWoFOUzXkWDFqxRGtzj1/img.png?width=660&amp;amp;height=361&amp;amp;face=0_0_660_361,https://scrap.kakaocdn.net/dn/lzTsC/hyZMdY1LrV/rGP97XXrGodMHVpD62K9y1/img.png?width=660&amp;amp;height=361&amp;amp;face=0_0_660_361&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.geeksforgeeks.org/dsa/stack-vs-heap-memory-allocation/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LSSql/hyZMlpdGhj/csJxTl2gBgTX7ZJp1YulpK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/c7NtK3/hyZLhBhbix/fcUWoFOUzXkWDFqxRGtzj1/img.png?width=660&amp;amp;height=361&amp;amp;face=0_0_660_361,https://scrap.kakaocdn.net/dn/lzTsC/hyZMdY1LrV/rGP97XXrGodMHVpD62K9y1/img.png?width=660&amp;amp;height=361&amp;amp;face=0_0_660_361');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Stack vs Heap Memory Allocation - GeeksforGeeks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.geeksforgeeks.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 드림핵 강의&lt;/p&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/Pwnable</category>
      <category>cyber security</category>
      <category>pwnable</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/133</guid>
      <comments>https://codingexplore.tistory.com/133#entry133comment</comments>
      <pubDate>Sun, 26 Oct 2025 12:53:18 +0900</pubDate>
    </item>
    <item>
      <title>기초부터 다시 차근차근 정리</title>
      <link>https://codingexplore.tistory.com/132</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기존에 드림핵을 비롯하여 여러 자료를 취합하면서 개인적으로 공부하면서 노션에 정리해두었던 내용들을 더 다듬고 있다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;컴퓨터 공학 기초내용이나 포너블, 보안 실습 내용들이 주가 될 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기본적인 이야기이지만 그만큼 정확히 숙지하고 복습을 하는 차원에서 조금씩 업로드해보려고 한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;원래 노션에는 핵심 키워드 위주로 정리를 해놨었는데, 블로그에는 줄글로 풀어적으려고 한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이런 개념적인 내용은 뭔가 내 언어로 설명을 해놓아야 오래 남는 느낌이기도 하고 보는사람 입장에서도 더 이해가 잘 될 것 같다&lt;/span&gt;&lt;/p&gt;</description>
      <category>로그/생각 로그</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/132</guid>
      <comments>https://codingexplore.tistory.com/132#entry132comment</comments>
      <pubDate>Sun, 26 Oct 2025 11:55:04 +0900</pubDate>
    </item>
    <item>
      <title>정보보안 관련 레퍼런스 : 기술블로그, 포럼, 기사, 유튜브 등</title>
      <link>https://codingexplore.tistory.com/131</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;매번 찾아보기 번거로워서 정리합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주기적 업데이트 예정, 추천받으면 바로 리스트 추가 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이런건 공부느낌보다는 재밌게 보고 싶어서 조금 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;말랑말랑한 사이트&lt;/b&gt;&lt;/span&gt;를 선호한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;계속 손이 가는&amp;nbsp;사이트는 볼드처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ 기술 블로그 (기업) ]&lt;/h2&gt;
&lt;table style=&quot;color: #333333; text-align: left; border-collapse: collapse; width: 100%; height: 683px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 18px; width: 28.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;레퍼런스&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 18px; width: 45.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;URL&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 18px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;스모크스크린&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.smokescreen.io/blog/&quot;&gt;https://www.smokescreen.io/blog/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;보안 리서치&lt;br /&gt;(깔끔하고 쉽게 설명함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 28.3721%; height: 38px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;PortSwigger (Burp Suite 개발사)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 45.3488%; height: 38px; text-align: center;&quot;&gt;&lt;a href=&quot;https://portswigger.net/research&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://portswigger.net/research&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; width: 26.2791%; height: 38px;&quot;&gt;보안 리서치&lt;br /&gt;(리서치 퀄리티 굿. 깔끔하다)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;구글 TAG&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.google/threat-analysis-group/&quot;&gt;https://blog.google/threat-analysis-group/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;보안 리서치&lt;/span&gt;&lt;br /&gt;(TTS 제공)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;이스트시큐리티&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.alyac.co.kr/&quot;&gt;https://blog.alyac.co.kr/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;[국내] 위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;안랩&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://asec.ahnlab.com/ko/&quot;&gt;https://asec.ahnlab.com/ko/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;최신 위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;에스투더블유&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://medium.com/s2wblog&quot;&gt;https://medium.com/s2wblog&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;시스코 TALOS&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;http://blog.talosintelligence.com&quot;&gt;http://blog.talosintelligence.com&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;카스퍼스키&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.kaspersky.com/blog/&quot;&gt;https://www.kaspersky.com/blog/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;맨디언트&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/mandiantkorea?tab=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://m.blog.naver.com/mandiantkorea?tab=1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;이글루코퍼레이션&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.igloo.co.kr/security-information/category/security/page/1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.igloo.co.kr/security-information/category/security/page/1/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;보안 리서치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;윈스&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.wins21.com/kor/promotion/information.html&quot;&gt;https://www.wins21.com/kor/promotion/information.html&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;보안 동향, 기사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;SK 쉴더스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.skshieldus.com/kor/blog.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.skshieldus.com/kor/blog.do&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;[국내] 보안 리서치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;파이오링크&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.piolink.com/kr/service/Security-Analysis.php&quot;&gt;https://www.piolink.com/kr/service/Security-Analysis.php&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;[국내] 위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;팔로알토 Unit42&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://unit42.paloaltonetworks.com/&quot;&gt;https://unit42.paloaltonetworks.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;보안 리서치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;금융보안원&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.fsec.or.kr/bbs/244&quot;&gt;https://www.fsec.or.kr/bbs/244&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;위협 보고서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;포티넷&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.fortiguard.com/threat-signal-report&quot;&gt;https://www.fortiguard.com/threat-signal-report&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;체크포인트&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://research.checkpoint.com/&quot;&gt;https://research.checkpoint.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;위협분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;크라우드스트라이크&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.crowdstrike.com/blog/category/threat-intel-research/&quot;&gt;https://www.crowdstrike.com/blog/category/threat-intel-research/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;보안 리서치&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;리버싱랩&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.reversinglabs.com/blog&quot;&gt;https://www.reversinglabs.com/blog&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;보안 리서치&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;LG CNS&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.lgcns.com/blog/cns-tech/security/&quot;&gt;https://www.lgcns.com/blog/cns-tech/security/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;[국내] 보안동향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9;&quot;&gt;78리서치랩&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.78researchlab.com/7dbd4b4f-54e7-44f4-906d-1b73fc8dcd12&quot;&gt;https://blog.78researchlab.com/7dbd4b4f-54e7-44f4-906d-1b73fc8dcd12&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;취약점&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;티오리&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.theori.io&quot;&gt;https://blog.theori.io&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;취약점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;하임시큐리티&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.hayyimsecurity.com/&quot;&gt;https://blog.hayyimsecurity.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;취약점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;구글 Project Zero&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://googleprojectzero.blogspot.com/&quot;&gt;https://googleprojectzero.blogspot.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;취약점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;카이스트 CSRC&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://csrc.kaist.ac.kr/blog/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://csrc.kaist.ac.kr/blog/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;넷마블&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://netmarble.engineering/tag/%EB%B3%B4%EC%95%88%EA%B0%9C%EB%B0%9C%ED%8C%80/&quot;&gt;https://netmarble.engineering&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;코드벡터&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://codevector-techlab.notion.site/&quot;&gt;https://codevector-techlab.notion.site/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;스틸리언&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://ufo.stealien.com/&quot;&gt;https://ufo.stealien.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;&amp;nbsp;&lt;/span&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;라온화이트햇&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://core-research-team.github.io/&quot;&gt;https://core-research-team.github.io/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;&amp;nbsp;&lt;/span&gt;기술공유&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 28.3721%; text-align: center;&quot;&gt;에이치엠컴퍼니&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;http://hmcom.co.kr/news/news2&quot;&gt;http://hmcom.co.kr/news/news2&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;/span&gt;&amp;nbsp;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;안드로이드&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://source.android.com/docs/security?hl=ko&quot;&gt;https://source.android.com/docs/security?hl=ko&lt;/a&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 28.3721%; text-align: center;&quot;&gt;쏘마&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 19px; width: 45.3488%; text-align: center;&quot;&gt;&lt;a href=&quot;https://tech.somma.kr/&quot;&gt;https://tech.somma.kr/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: center; height: 19px; width: 26.2791%;&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: center;&quot;&gt;[국내]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기술공유&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;[ 기술 블로그 (개인) ]&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 106px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 14.9612%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;레퍼런스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 37.0543%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;URL&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.7248%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 14.9612%; height: 19px; text-align: center;&quot;&gt;James Forshaw&lt;/td&gt;
&lt;td style=&quot;width: 37.0543%; height: 19px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.tiraniddo.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.tiraniddo.dev/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.7248%; height: 19px; text-align: center;&quot;&gt;Windows, 권한상승 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.9612%; height: 17px; text-align: center;&quot;&gt;Ivan Fratric (Google Project Zero)&lt;/td&gt;
&lt;td style=&quot;width: 37.0543%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://ifsec.blogspot.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ifsec.blogspot.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.7248%; height: 17px; text-align: center;&quot;&gt;브라우저, Fuzzing 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.9612%; height: 17px; text-align: center;&quot;&gt;Orange&amp;nbsp;Tsai&lt;/td&gt;
&lt;td style=&quot;width: 37.0543%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.orange.tw/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.orange.tw/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.7248%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.9612%; height: 17px; text-align: center;&quot;&gt;Liveoverflow&lt;/td&gt;
&lt;td style=&quot;width: 37.0543%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://liveoverflow.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://liveoverflow.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/c/LiveOverflow&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/c/LiveOverflow&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.7248%; height: 17px; text-align: center;&quot;&gt;해킹, CTF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;[ 포럼 &amp;amp; 최신 뉴스 &amp;amp; 취약점 ]&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 229px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;레퍼런스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;URL&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 19px; text-align: center;&quot;&gt;Reddit - netsec&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 19px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/netsec/&quot;&gt;https://www.reddit.com/r/netsec/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 19px; text-align: center;&quot;&gt;최신 소식, 동향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;Reddit - cybersecurity&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/cybersecurity/&quot;&gt;https://www.reddit.com/r/cybersecurity/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;최신 소식, 동향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;Stackexchange - Information Security&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://security.stackexchange.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://security.stackexchange.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;Q&amp;amp;A 방식 커뮤니티&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;Exploit Database&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.exploit-db.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.exploit-db.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;취약점 코드 공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 19px; text-align: center;&quot;&gt;arXive.org - Computer Security&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 19px; text-align: center;&quot;&gt;&lt;a href=&quot;https://arxiv.org/list/cs.CR/recent&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/list/cs.CR/recent&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 19px; text-align: center;&quot;&gt;최신 논문&lt;br /&gt;(저널이나 학회보다 빠름)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;CVE Details&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.cvedetails.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.cvedetails.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;공개 취약점 데이터베이스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;BlackHat Community&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.blackhat.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.blackhat.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;컨퍼런스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;Defcon&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://forum.defcon.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.defcon.org/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;컨퍼런스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;NetworkChuck&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@NetworkChuck/videos&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/@NetworkChuck/videos&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;유튜브 채널&lt;br /&gt;(가볍게 밥친구)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;IBM Technology&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@IBMTechnology/featured&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/@IBMTechnology/featured&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;IBM 공식채널&lt;br /&gt;(짧지만 깔끔하고 알차다. AI 관련 영상도 재밌음. 순수재미 굿. 밥친구)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 17px; text-align: center;&quot;&gt;KISA 보안 취약점 정보 포털&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 17px; text-align: center;&quot;&gt;&lt;a href=&quot;https://knvd.krcert.or.kr/index.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://knvd.krcert.or.kr/index.do&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 17px; text-align: center;&quot;&gt;[국내] 취약점 리포트, 보안 공지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.4031%; height: 19px; text-align: center;&quot;&gt;보안뉴스&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 19px; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.boannews.com/&quot;&gt;https://www.boannews.com/&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%; height: 19px; text-align: center;&quot;&gt;[국내] 보안 기사&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/Automotive &amp;amp; Cybersecurity</category>
      <category>cybersecurity</category>
      <category>references</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/131</guid>
      <comments>https://codingexplore.tistory.com/131#entry131comment</comments>
      <pubDate>Tue, 27 May 2025 17:09:18 +0900</pubDate>
    </item>
    <item>
      <title>CAN normal mode</title>
      <link>https://codingexplore.tistory.com/130</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; CAN normal mode Introduction&lt;/b&gt; &lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CAN normal mode&lt;/b&gt; 를 사용하여 두 개의 노드 연결&lt;/li&gt;
&lt;li&gt;노드 1(N-1)과 노드 2(N-2) 두 개의 보드 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;958&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brul0S/btsMy2jHze5/b2HxeHZK7cdEIQAQdFNG70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brul0S/btsMy2jHze5/b2HxeHZK7cdEIQAQdFNG70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brul0S/btsMy2jHze5/b2HxeHZK7cdEIQAQdFNG70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrul0S%2FbtsMy2jHze5%2Fb2HxeHZK7cdEIQAQdFNG70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;313&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;958&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;N1&lt;/b&gt;은 &lt;b&gt;1초마다 LED 번호&lt;/b&gt;를 &lt;b&gt;CAN 데이터 프레임&lt;/b&gt;으로 &lt;b&gt;N2&lt;/b&gt;에 전송
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 위해 타이머를 사용하여 1초마다 인터럽트를 발생시키고, 인터럽트 핸들러에서 N1에서 N2로 데이터를 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N2&lt;/b&gt;는 수신된 메시지에 따라 해당하는 &lt;b&gt;LED ON&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N2 보드에 연결된 4개의 외부 LED(LED1, LED2, LED3, LED4)가 각각 다른 GPIO 핀에 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N1&lt;/b&gt;은 또한 &lt;b&gt;4초마다 리모트 프레임&lt;/b&gt;을 보내 2바이트 데이터를 요청
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;N2&lt;/b&gt;는 리모트 프레임을 수신한 후, 2바이트 데이터를 &lt;b&gt;데이터프레임&lt;/b&gt;으로 N1에 응답&lt;/li&gt;
&lt;li&gt;N1은 데이터를 수신하고 화면에 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CAN normal mode Exercise - Tx&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;메인 코드 (main.c)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPIO_Init, UART2_Init, TIMER6_Init, CAN1_Init, Filter_config는 이전과 동일하게 설정&lt;/li&gt;
&lt;li&gt;새로운 부분은 TIMER6_Init이며, 타이머 핸들을 설정하여 &lt;b&gt;1초 간격&lt;/b&gt;으로 타이머가 동작하도록 구성&lt;/li&gt;
&lt;li&gt;CAN1_Init에서 &lt;b&gt;Loopback 모드&lt;/b&gt;를 &lt;b&gt;Normal 모드&lt;/b&gt;로 변경&lt;/li&gt;
&lt;li&gt;CAN bit timing은 500Kbps로 설정, 이후 1Mbps로 변경 테스트 예정&lt;/li&gt;
&lt;li&gt;Filter Config는 현재 변경 없음, 이후 특정 프레임을 필터링할 예정&lt;/li&gt;
&lt;li&gt;CAN_Start 실행 후, CAN TX 및 CAN RX 처리는 &lt;b&gt;타이머 인터럽트 핸들러에서 수행&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;타이머 인터럽트 핸들러 (IT.c)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Timer6 IRQ Handler &amp;rarr; &lt;b&gt;타이머 주기 경과 콜백(Timer Period Elapsed Callback)을 트리거&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1초마다 CAN TX 실행&lt;/b&gt; (CAN1_TX 함수 호출)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CAN TX 구현&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TX header 설정 후 &lt;b&gt;1바이트 메시지&lt;/b&gt; 전송 (LED 번호 전송)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DLC는 1&lt;/b&gt;, Standard ID 설정 (임의 값 선택)&lt;/li&gt;
&lt;li&gt;LED 번호를 전역 변수로 설정하고, 전송 후 1씩 증가&lt;/li&gt;
&lt;li&gt;LED 번호가 4가 되면 다시 0으로 초기화&lt;/li&gt;
&lt;li&gt;CAN TX API를 사용해 메시지 전송&lt;/li&gt;
&lt;li&gt;&lt;b&gt;즉, 1초마다 LED 번호를 전송하는 기능 구현&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;버튼 인터럽트 처리&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타이머 시작을 &lt;b&gt;버튼 인터럽트에서 수행&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;EXTI15_10_IRQHandler를 사용해 버튼 인터럽트 처리.&lt;/li&gt;
&lt;li&gt;HAL_GPIO_EXTI_IRQHandler API를 호출하여 EXTI 인터럽트 처리.&lt;/li&gt;
&lt;li&gt;사용 보드(Nucleo or Discovery)에 따라 EXTI 핸들러가 다를 수 있음 &amp;rarr; 적절한 ISR 구현 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;GPIO Init&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOZhpA/btsMAWJmrFx/qOkds0FfkMpNaF2unuOptK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOZhpA/btsMAWJmrFx/qOkds0FfkMpNaF2unuOptK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOZhpA/btsMAWJmrFx/qOkds0FfkMpNaF2unuOptK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOZhpA%2FbtsMAWJmrFx%2FqOkds0FfkMpNaF2unuOptK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;219&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;N1 측 (노드 1)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;애플리케이션은 &lt;b&gt;버튼을 눌렀을 때 실행&lt;/b&gt;됨&lt;/li&gt;
&lt;li&gt;버튼은 &lt;b&gt;PC13 핀&lt;/b&gt;에 연결됨&lt;/li&gt;
&lt;li&gt;따라서 &lt;b&gt;PC13을 GPIO 입력(Input) 모드 + 인터럽트(Interrupt) 모드&lt;/b&gt;로 설정해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N2 측 (노드 2)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;4개의 LED를 제어&lt;/b&gt;하기 위해 &lt;b&gt;4개의 GPIO 핀&lt;/b&gt; 사용&lt;/li&gt;
&lt;li&gt;해당 GPIO 핀들은 &lt;b&gt;출력(Output) 모드&lt;/b&gt;로 설정해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드 구현&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;main.c의 기존 GPIO_Init 함수에서 초기화 수행&lt;/li&gt;
&lt;li&gt;기존 GPIO_Init 함수에는 온보드 LED 초기화 코드가 있음&lt;/li&gt;
&lt;li&gt;여기에 &lt;b&gt;N1의 버튼 핀(PC13) 설정 및 인터럽트 활성화 코드 추가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;그리고 &lt;b&gt;N2의 4개 GPIO를 출력 모드로 설정하는 코드 추가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GPIO 초기화는 N1과 N2 공통 함수로 작성&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/130</guid>
      <comments>https://codingexplore.tistory.com/130#entry130comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:41:34 +0900</pubDate>
    </item>
    <item>
      <title>CAN Interrupts</title>
      <link>https://codingexplore.tistory.com/129</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Understanding bxCAN Interrupt requests (IRQs)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; bxCAN 인터럽트가 발생하는 경우&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;1324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DwfY5/btsMA7jK9RL/lWBofyDuKjRjf9rf38rw10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DwfY5/btsMA7jK9RL/lWBofyDuKjRjf9rf38rw10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DwfY5/btsMA7jK9RL/lWBofyDuKjRjf9rf38rw10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDwfY5%2FbtsMA7jK9RL%2FlWBofyDuKjRjf9rf38rw10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;1324&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;1324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;송신 이벤트(Tx Events)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;메시지 전송 요청이 완료될 때 (Mailbox 0, 1, 2)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;수신 이벤트(Rx Events)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RX FIFO 0에 새로운 프레임이 수신될 때&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RX FIFO 1에 새로운 프레임이 수신될 때&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;상태 변화(Status Change Events)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 버스 상태 변화 (Bus-off, 오류 발생 등)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;오류 발생(Error Events)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신/송신 오류 증가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FIFO 오버런(overrun) 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Bus-off 상태로 전환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;bxCAN 인터럽트 벡터 개수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;bxCAN1&lt;/b&gt;: 4개의 인터럽트 벡터(IRQ)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;bxCAN2&lt;/b&gt;: 4개의 인터럽트 벡터(IRQ)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;총 8개의 IRQ가 CAN1 및 CAN2에 할당됨&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;bxCAN 인터럽트 발생 원인 및 처리 방식&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M87Az/btsMyTUKgq9/q2AA5D1zKIn1u4B0CrwK7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M87Az/btsMyTUKgq9/q2AA5D1zKIn1u4B0CrwK7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M87Az/btsMyTUKgq9/q2AA5D1zKIn1u4B0CrwK7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM87Az%2FbtsMyTUKgq9%2Fq2AA5D1zKIn1u4B0CrwK7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;623&quot; height=&quot;390&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;① 송신 인터럽트 (Transmit Interrupt)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Mailbox 0, 1, 2에서 메시지 전송 완료 시 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;관련 레지스터: CAN_TSR (Transmit Status Register)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RQCP0 (Request Completed for Mailbox 0) 비트가 1이 되면 인터럽트 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;② RX FIFO 0 인터럽트 (Receive FIFO 0 Interrupt)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FIFO 0에 새로운 메시지가 들어오면 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;관련 레지스터: CAN_RF0R (Receive FIFO 0 Register)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FMP0 (FIFO Message Pending) 비트가 1 이상이면 인터럽트 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FIFO가 가득 차거나(FULL0 비트) 오버런 발생(FOVR0 비트) 시 인터럽트 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;③ RX FIFO 1 인터럽트 (Receive FIFO 1 Interrupt)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RX FIFO 0과 동일한 방식으로 동작 (FIFO 1 사용)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;④ 상태 변화 및 오류 인터럽트 (Status Change &amp;amp; Error Interrupt)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ESR (Error Status Register)에 의해 감지됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;주요 원인:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;EWGF (Error Warning Flag)&lt;/b&gt;: 오류 카운터가 일정 값(96) 이상 증가하면 경고 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;BOFF (Bus-off 상태)&lt;/b&gt;: 전송 오류(TEC)가 255를 초과하면 노드가 Bus-off 상태가 되어 통신 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;WKUI (Wakeup Interrupt)&lt;/b&gt;: Sleep Mode에서 Start of Frame(SOF) 감지 시 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Bus-off 상태 및 복구&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Bus-off란?&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;송신 오류(TEC)가 255를 초과하면 노드가 &lt;b&gt;Bus-off 상태&lt;/b&gt;로 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Bus-off 상태에서는 &lt;b&gt;송&amp;middot;수신이 불가능&lt;/b&gt;하며, CAN 버스로부터 차단&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Bus-off 복구 방법&lt;/b&gt;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;자동 복구 (Auto Bus-Off Management, ABOM) 활성화&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ABOM 비트를 1로 설정하면 자동 복구 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;128개의 연속적인 Recessive(1) 비트를 감지하면 자동 복구됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;소프트웨어를 통한 복구&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN_Init()을 다시 호출하여 CAN 컨트롤러를 초기화 모드 &amp;rarr; 정상 모드로 전환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;WKUI - Wakeup Interrupt)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 컨트롤러가 &lt;b&gt;Sleep Mode&lt;/b&gt;에 있을 때, Start of Frame(SOF)이 감지되면 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN RX 엔진이 활성화되어 있어야 감지&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; IRQs Exercise&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; IRQ 활성화 (msp.c)&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740828992859&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
{
	GPIO_InitTypeDef gpio_can1;
	__HAL_RCC_CAN1_CLK_ENABLE();

	gpio_can1.Pin = GPIO_PIN_11 | GPIO_PIN_12;
	gpio_can1.Mode = GPIO_MODE_AF_PP;
	gpio_can1.Pull = GPIO_NOPULL;
	gpio_can1.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	gpio_can1.Alternate = GPIO_AF9_CAN1;
	HAL_GPIO_Init(GPIOA, &amp;amp;gpio_can1);

	HAL_NVIC_SetPendingIRQ(CAN1_TX_IRQn, 15, 0);
	HAL_NVIC_SetPendingIRQ(CAN1_RX0_IRQn, 15, 0);
	HAL_NVIC_SetPendingIRQ(CAN1_RX1_IRQn, 15, 0);
	HAL_NVIC_SetPendingIRQ(CAN1_SCE_IRQn, 15, 0);

	HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
	HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
	HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn);
	HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; 인터럽트 서비스 루틴(ISR) 구현 (it.c)&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740829002302&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CAN1_TX_IRQHandler(void)
{
	HAL_CAN_IRQHandler(&amp;amp;hcan1);
}

void CAN1_RX0_IRQHandler(void)
{
	HAL_CAN_IRQHandler(&amp;amp;hcan1);
}

void CAN1_RX1_IRQHandler(void)
{
	HAL_CAN_IRQHandler(&amp;amp;hcan1);
}

void CAN1_SCE_IRQHandler(void)
{
	HAL_CAN_IRQHandler(&amp;amp;hcan1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Callback function Implementation&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 하드웨어에서 인터럽트를 활성화하려면 메인함수에서 activate notification API 호출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;HAL_CAN_ActivateNotification&lt;/b&gt;(&amp;amp;hcan1, CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_BUSOFF)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Callback 함수를 모두 구현하고, 인터럽트 모드이므로 Rx 함수는 제거&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740829012629&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan)
{
	char msg[50];
	sprintf(msg, &quot;Message Transmitted\r\n&quot;);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}

void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan)
{
	char msg[50];
	sprintf(msg, &quot;Message Transmitted\r\n&quot;);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}

void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan)
{
	char msg[50];
	sprintf(msg, &quot;Message Transmitted\r\n&quot;);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
	CAN_RxHeaderTypeDef RxHeader;
	uint8_t message[5];
	char msg[50];

	//while(HAL_CAN_GetRxFifoFillLevel(&amp;amp;hcan1, CAN_RX_FIFO0));
	if(HAL_CAN_GetRxMessage(&amp;amp;hcan1, CAN_RX_FIFO0, &amp;amp;RxHeader, message)!= HAL_OK) Error_handler();

	sprintf(msg, &quot;Message Received %s\r\n&quot;, message);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}

void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
{
	char msg[50];
	sprintf(msg, &quot;CAN Error Detected!\r\n&quot;);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/129</guid>
      <comments>https://codingexplore.tistory.com/129#entry129comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:37:50 +0900</pubDate>
    </item>
    <item>
      <title>bxCAN Frame Filtering</title>
      <link>https://codingexplore.tistory.com/128</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Understanding bxCAN acceptance filtering&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1544&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biSnpP/btsMy3CUJQJ/SKZQKOKJU86cZbm0wG8741/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biSnpP/btsMy3CUJQJ/SKZQKOKJU86cZbm0wG8741/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biSnpP/btsMy3CUJQJ/SKZQKOKJU86cZbm0wG8741/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiSnpP%2FbtsMy3CUJQJ%2FSKZQKOKJU86cZbm0wG8741%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;659&quot; height=&quot;331&quot; data-origin-width=&quot;1544&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN 메시지 수신 과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN은 &lt;b&gt;브로드캐스트 방식&lt;/b&gt;의 통신 시스템이므로, 애플리케이션이 관심 없는 메시지까지 모두 수신하면 &lt;b&gt;불필요한 인터럽트가 지속적으로 발생&lt;/b&gt;하여 시스템의 오버헤드 증가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;따라서 CAN 메시지가 CAN Rx 핀을 통해 들어오면, &lt;b&gt;수락 필터링(Acceptance Filtering)&lt;/b&gt; 과정에서 &lt;b&gt;Filter Bank&lt;/b&gt;가 적용되어 수신된 메시지를 필터링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, 수신된 메시지는 필터링 규칙과 비교되며, 규칙을 충족하는 메시지만 FIFO에 저장&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터링 규칙을 충족한 메시지는 FIFO에 저장되며, 인터럽트 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터링 규칙을 충족하지 못한 메시지는 CAN 컨트롤러의 수신 엔진에서 &lt;b&gt;폐기, 인터럽트 발생X&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Rx FIFO 구조&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;각 CAN 컨트롤러에는 &lt;b&gt;2개의 수신 FIFO&lt;/b&gt;가 존재]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, CAN1에는 2개의 Rx FIFO, CAN2에도 2개의 Rx FIFO가 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;각 FIFO에는 최대 &lt;b&gt;3개의 CAN 메시지&lt;/b&gt;를 저장할 수 있으며, FIFO 관리는 &lt;b&gt;하드웨어에 의해 자동으로 수행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Acceptance Filtering&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 컨트롤러는 기본적으로 버스에서 감지한 모든 프레임을 읽어 FIFO 메모리에 저장하고, 이를 호스트 프로세서에 알림. &lt;b&gt;하드웨어 필터링 기능&lt;/b&gt;을 활용하면, 특정 조건을 충족하지 않는 CAN 프레임을 무시하고 폐기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&amp;rarr; 불필요한 메시지를 처리할 필요가 없어 프로세서의 오버헤드 감소&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkeRPG/btsMyTUKdpe/Pk0YAmPC2VbnCsaj4RlEy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkeRPG/btsMyTUKdpe/Pk0YAmPC2VbnCsaj4RlEy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkeRPG/btsMyTUKdpe/Pk0YAmPC2VbnCsaj4RlEy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkeRPG%2FbtsMyTUKdpe%2FPk0YAmPC2VbnCsaj4RlEy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;215&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ST bxCAN 컨트롤러에는 &lt;b&gt;28개의 필터 뱅크(Filter Banks)&lt;/b&gt; 가 존재하며, 이는 Master 및 Slave CAN 컨트롤러가 공유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;각 필터 뱅크는 &lt;b&gt;2개의 32비트 필터 레지스터(R1, R2)&lt;/b&gt; 를 포함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Acceptance Filtering&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수락 필터링은 CAN 컨트롤러가 특정 조건을 충족하는 메시지만 수락하고 나머지는 폐기하도록 하는 기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터링은 Filter Bank를 사용하여 수행되며, 각 필터 뱅크는 두 개의 32비트 레지스터(R1, R2)로 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터링 모드:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마스크 모드&lt;/b&gt;: 특정 비트를 검사하도록 마스크 값을 설정하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;리스트 모드&lt;/b&gt;: 특정 ID 값만 허용하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2044&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tvgbA/btsMzgvoESH/sigm5CNr3f6u0Y04zp0WVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tvgbA/btsMzgvoESH/sigm5CNr3f6u0Y04zp0WVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tvgbA/btsMzgvoESH/sigm5CNr3f6u0Y04zp0WVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtvgbA%2FbtsMzgvoESH%2Fsigm5CNr3f6u0Y04zp0WVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;320&quot; data-origin-width=&quot;2044&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예제 1: 상위 3비트가 1인 경우만 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;조건:&lt;/b&gt; 표준 식별자(11비트)의 상위 3비트(MSB)가 1 1 1인 프레임만 수락&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마스크 레지스터(R2)에 1 1 1 0 0 0 0 0 0 0 0을 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 레지스터(R1)에 1 1 1 X X X X X X X X를 설정 (X는 무관한 값)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신된 메시지의 상위 3비트가 1 1 1이면 수락, 그렇지 않으면 폐기&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예제 2: 상위 3비트가 0이고 하위 2비트가 1인 경우만 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;조건:&lt;/b&gt; 표준 식별자의 상위 3비트가 0 0 0, 하위 2비트(LSB)가 1 1인 프레임만 수락&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마스크 레지스터(R2)에 1 1 1 0 0 0 0 0 0 1 1을 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 레지스터(R1)에 0 0 0 X X X X X X 1 1을 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상위 3비트가 0 0 0이고 하위 2비트가 1 1이면 프레임을 수락&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; 예제 3: 특정 ID(0x65D 또는 0x651)만 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot; data-token-index=&quot;0&quot;&gt;&lt;b&gt;조건:&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;표준 식별자가 0x65D 또는 0x651인 경우만 수락&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caVYT6/btsMyjsO3I6/h73RkmkznIsSEGd5CgNTM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caVYT6/btsMyjsO3I6/h73RkmkznIsSEGd5CgNTM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caVYT6/btsMyjsO3I6/h73RkmkznIsSEGd5CgNTM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaVYT6%2FbtsMyjsO3I6%2Fh73RkmkznIsSEGd5CgNTM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;651&quot; height=&quot;302&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;950&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마스크 모드가 아닌 &lt;b&gt;리스트 모드(ID Mode)&lt;/b&gt; 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;R1에 0x65D 저장, R2에 0x651 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신된 메시지의 ID가 0x65D 또는 0x651과 일치하면 수락, 그렇지 않으면 폐기&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예제 4: 요청 프레임(Request Frame)만 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;조건:&lt;/b&gt; 요청 프레임(RTR 비트가 1)만 수락&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RTR 비트가 1이면 요청 프레임, 0이면 데이터 프레임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마스크 레지스터(R2)에서 &lt;b&gt;RTR 필드&lt;/b&gt;를 1로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 레지스터(R1)에서 &lt;b&gt;RTR 필드&lt;/b&gt;를 1로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신된 메시지의 RTR 비트가 1이면 수락, 0이면 폐기&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예제 5: 확장 ID(Extended ID) 프레임만 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;조건:&lt;/b&gt; 확장 식별자(IDE 비트가 1) 프레임만 수락&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;IDE 비트가 1이면 확장 ID, 0이면 표준 ID&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마스크 레지스터(R2)에서 &lt;b&gt;IDE 필드&lt;/b&gt;를 1로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 레지스터(R1)에서 &lt;b&gt;IDE 필드&lt;/b&gt;를 1로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신된 메시지의 IDE 비트가 1이면 수락, 0이면 폐기&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예제 6: 모든 프레임 수락&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;조건:&lt;/b&gt; 모든 CAN 메시지를 수락&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터를 설정하지 않으면 기본적으로 모든 메시지가 수락됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단, 메시지를 어느 FIFO(First In First Out) 버퍼로 보낼지를 설정해야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Exploring filtering data structures&lt;/b&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OeOBz/btsMA4tM3j8/wCBQztV3BCtiEaqKdegvek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OeOBz/btsMA4tM3j8/wCBQztV3BCtiEaqKdegvek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OeOBz/btsMA4tM3j8/wCBQztV3BCtiEaqKdegvek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOeOBz%2FbtsMA4tM3j8%2FwCBQztV3BCtiEaqKdegvek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;476&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;① FilterIdHigh :&lt;/b&gt; 32비트 설정에서 필터 식별 번호의 상위 16비트(MSB) 지정&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;관련 레지스터: &lt;b&gt;Identifier Register&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;② FilterIdLow :&lt;/b&gt; 32비트 설정에서 필터 식별 번호의 하위 16비트(LSB) 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;③ MaskIdHigh / MaskIdLow :&lt;/b&gt; 필터 마스크 ID 설정 (필터링할 메시지 지정)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;④ FilterFIFOAssignment :&lt;/b&gt; 필터 뱅크(예: 0~1)에서 수신 메시지가 어느 FIFO로 전달될지 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;⑤ FilterBank&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;총 28개의 필터 뱅크 사용 가능.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단일 CAN 인스턴스 사용 시 0~13번까지 14개 필터 뱅크만 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;⑥ Filter Mode :&lt;/b&gt; Mask Mode / ID Mode&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;⑦ Filter Scale&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;32비트 또는 16비트 설정 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;일반적으로 32비트 사용(레지스터를 32비트로 취급)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;⑧ Filter Activation :&lt;/b&gt; 필터를 활성화하려면 enable 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;⑨ SlaveStartFilterBank&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;듀얼 CAN 사용 시만 의미 있음&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;28개의 필터 뱅크를 CAN1과 CAN2가 공유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0 ~ 13은 CAN1, 14 ~ 27은 CAN2가 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;루프백(Loopback) 애플리케이션 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모든 프레임을 수락하는 &lt;b&gt;Mask Mode&lt;/b&gt; 사용.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 경우 설정 값:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FilterIdHigh = 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FilterIdLow = 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MaskIdHigh = 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MaskIdLow = 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FilterBank = 0 (0번 필터 뱅크 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FIFO Assignment = RX FIFO 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Filter Mode = Mask Mode&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Exercise : CAN Tx, Rx with filter config&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;수신 메시지 확인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터를 읽기 전에 해당 FIFO에 메시지가 존재하는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;API&lt;/b&gt;: HAL_CAN_GetRxFifoFillLevel()&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;역할: RX FIFO의 메시지 개수 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;반환값:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0이면 수신된 메시지 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1~3이면 메시지가 존재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740828662160&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CAN1_Rx(void)
{
	CAN_RxHeaderTypeDef RxHeader;
	uint8_t message[5];
	char msg[50];

	while(HAL_CAN_GetRxFifoFillLevel(&amp;amp;hcan1, CAN_RX_FIFO0));
	if(HAL_CAN_GetRxMessage(&amp;amp;hcan1, CAN_RX_FIFO0, &amp;amp;RxHeader, message)!= HAL_OK) Error_handler();

	sprintf(msg, &quot;Message Received %s\r\n&quot;, message);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);

}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;메시지가 존재할 때까지 대기 (while 문 활용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HAL_CAN_GetRxMessage() 호출하여 데이터를 읽음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터를 출력(printf)하여 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Filter Configuration&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Start&lt;/b&gt; 호출 전에 필터 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN Start가 실행되면 초기화 모드에서 벗어나므로, 그 전에 필터 설정을 완료&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필터 구성 함수 (CAN Filter Config) 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFv8w/btsMAliyqGU/EAgtKa2pvQXcGd0ogTwJdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFv8w/btsMAliyqGU/EAgtKa2pvQXcGd0ogTwJdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFv8w/btsMAliyqGU/EAgtKa2pvQXcGd0ogTwJdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFv8w%2FbtsMAliyqGU%2FEAgtKa2pvQXcGd0ogTwJdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1622&quot; height=&quot;430&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;32비트 vs 16비트 스케일&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;32비트 스케일&lt;/b&gt;: ID 레지스터 R1과 R2가 32비트로 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;16비트 스케일&lt;/b&gt;: ID 레지스터 R1이 두 개의 16비트 레지스터로 분할&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;대부분의 경우 &lt;b&gt;32비트 스케일&lt;/b&gt;을 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/128</guid>
      <comments>https://codingexplore.tistory.com/128#entry128comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:33:33 +0900</pubDate>
    </item>
    <item>
      <title>STM32 bxCAN Exercise</title>
      <link>https://codingexplore.tistory.com/127</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Tx&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN_Handle의 구조체 멤버&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Instance&lt;/b&gt;: CAN 인스턴스 지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Init&lt;/b&gt;: CAN 초기화 매개변수 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Mode: Normal Mode, Loopback Mode, Silent Mode 등&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Bit Timing 관련 요소: Prescaler(Time Quantum의 길이), SyncJumpWidth, TimeSeg1, TimeSeg2&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AutoBusOff : 에러를 일으키는 노드를 자동으로 제외&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AutoRetransmission : 전송자가 ACK를 받지 못하면 자동으로 재전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AutoWakeup&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;TransmitFifoPriority&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpkgzo/btsMyabB3cn/4OqQUybxC4gFO2fwHjlFV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpkgzo/btsMyabB3cn/4OqQUybxC4gFO2fwHjlFV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpkgzo/btsMyabB3cn/4OqQUybxC4gFO2fwHjlFV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpkgzo%2FbtsMyabB3cn%2F4OqQUybxC4gFO2fwHjlFV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;667&quot; height=&quot;107&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ReceiveFifoLocked&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0 : 3개의 메시지가 모두 채워지면 다음 메시지가 이전 것을 덮어씀&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 : 3개의 메시지가 모두 채워지면 다음 메시지가 무시됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLCMFl/btsMyDYRST3/DCNTkc7pNMVF3sulgRabhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLCMFl/btsMyDYRST3/DCNTkc7pNMVF3sulgRabhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLCMFl/btsMyDYRST3/DCNTkc7pNMVF3sulgRabhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLCMFl%2FbtsMyDYRST3%2FDCNTkc7pNMVF3sulgRabhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;111&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;u&gt;&lt;b&gt;CAN 비트 타이밍&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.bittiming.can-wiki.info/&quot;&gt;http://www.bittiming.can-wiki.info/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740827868453&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CAN Bit Time Calculation&quot; data-og-description=&quot;The following calculation sheet is mostly useful for classic CAN as defined in ISO-11898 before 2015. For the new CAN FD as defined in ISO-11898:2015 work is in Progress. CiA provides the document CiA 601-3 CAN FD bit-timing recommendations. By providing t&quot; data-og-host=&quot;www.bittiming.can-wiki.info&quot; data-og-source-url=&quot;http://www.bittiming.can-wiki.info/&quot; data-og-url=&quot;http://www.bittiming.can-wiki.info/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://www.bittiming.can-wiki.info/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.bittiming.can-wiki.info/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CAN Bit Time Calculation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The following calculation sheet is mostly useful for classic CAN as defined in ISO-11898 before 2015. For the new CAN FD as defined in ISO-11898:2015 work is in Progress. CiA provides the document CiA 601-3 CAN FD bit-timing recommendations. By providing t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.bittiming.can-wiki.info&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 통신에서는 한 비트가 네 개의 세그먼트로 나뉘며, CAN bus의 원하는 bitrate를 얻으려면 세그먼트의 width를 적절히 조정해야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;각 세그먼트는 time quanta의 측면에서 설명 ( &lt;b&gt;time quantum&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;: 모든 configuration value의 가장 작은 time unit&lt;/span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sPBdk/btsMyVLHquJ/Dy9yWUQMkSf2oAJSZjKrO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sPBdk/btsMyVLHquJ/Dy9yWUQMkSf2oAJSZjKrO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sPBdk/btsMyVLHquJ/Dy9yWUQMkSf2oAJSZjKrO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsPBdk%2FbtsMyVLHquJ%2FDy9yWUQMkSf2oAJSZjKrO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;647&quot; height=&quot;240&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;동기화 세그먼트(Synchronization Segment)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;전파 세그먼트(Propagation Segment)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;페이즈 세그먼트 1(Phase Segment 1)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;페이즈 세그먼트 2(Phase Segment 2)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 타이밍은 타임 퀀텀(Time Quantum, Tq) 단위로 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;타임 퀀텀의 길이는 CAN 페리페럴에 공급되는 클럭 주파수에 따라 결정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HSE(고속 외부 클럭)에서 50MHz의 PLL 출력 클럭을 생성하고, APB1 버스에 25MHz를 공급한 경우, CAN1이 APB1 버스에 연결되어 있으므로 CAN1의 입력 클럭도 25MHz가 됨&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Prescaler = 1일 때, CAN은 25MHz를 직접 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Prescaler = 5일 때, 5로 나누어 5MHz를 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf1RF6/btsMAuzNjUH/mhH7un5t7kl7Ycy1EW2ed0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf1RF6/btsMAuzNjUH/mhH7un5t7kl7Ycy1EW2ed0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf1RF6/btsMAuzNjUH/mhH7un5t7kl7Ycy1EW2ed0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf1RF6%2FbtsMAuzNjUH%2FmhH7un5t7kl7Ycy1EW2ed0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;420&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 타이밍의 각 요소는 타임 퀀텀 개수로 표현&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동기화 세그먼트 = 1Tq (고정)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;전파 세그먼트 + 페이즈 세그먼트 1 = 8Tq&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;페이즈 세그먼트 2 = 1Tq=&amp;gt; 총 10Tq가 한 비트를 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 타이밍을 적절히 조정하면 원하는 비트 레이트를 설정할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;If you increase the bit duration by including more and more TQs for each segment, then you may minimize the transmission errors and signal can be carried over longer distances but bus throughput decreases&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1770&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIeAqz/btsMAufrJOT/DH84JLBDDPxR6iTip8kdIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIeAqz/btsMAufrJOT/DH84JLBDDPxR6iTip8kdIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIeAqz/btsMAufrJOT/DH84JLBDDPxR6iTip8kdIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIeAqz%2FbtsMAufrJOT%2FDH84JLBDDPxR6iTip8kdIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1770&quot; height=&quot;630&quot; data-origin-width=&quot;1770&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1774&quot; data-origin-height=&quot;1006&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brIei5/btsMyHtmW5F/FEsvFLJO6XkNTfbHJaVmrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brIei5/btsMyHtmW5F/FEsvFLJO6XkNTfbHJaVmrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brIei5/btsMyHtmW5F/FEsvFLJO6XkNTfbHJaVmrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrIei5%2FbtsMyHtmW5F%2FFEsvFLJO6XkNTfbHJaVmrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1774&quot; height=&quot;1006&quot; data-origin-width=&quot;1774&quot; data-origin-height=&quot;1006&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예를 들어, 테이블의 가장 첫번째 설정(Prescaler=5)에서는 1Mbps의 비트 레이트를 달성할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 타이밍을 과도하게 줄이면 전송 속도는 증가하지만, 장거리 통신에서 문제가 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;따라서 CAN Bit Time 계산기를 사용하여 최적의 값을 설정하는 것이 중요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740827978600&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CAN1_Init(void)
{
	// CAN Controller setting
	hcan1.Instance = CAN1;
	hcan1.Init.Mode = CAN_MODE_LOOPBACK;
	hcan1.Init.AutoBusOff = DISABLE;
	hcan1.Init.AutoRetransmission = ENABLE;
	hcan1.Init.AutoWakeUp = DISABLE;
	hcan1.Init.ReceiveFifoLocked = DISABLE;
	hcan1.Init.TimeTriggeredMode = DISABLE;
	hcan1.Init.TransmitFifoPriority = DISABLE;
	
	// CAN bit timings setting
	hcan1.Init.Prescaler = 5;
	hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
	hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;
	hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
	
	if(HAL_CAN_Init(&amp;amp;hcan1) != HAL_OK) Error_handler();
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Transmit mailboxes&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3QT7f/btsMyHmCUxr/sW7MSaefTSsmagg1TwoVRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3QT7f/btsMyHmCUxr/sW7MSaefTSsmagg1TwoVRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3QT7f/btsMyHmCUxr/sW7MSaefTSsmagg1TwoVRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3QT7f%2FbtsMyHmCUxr%2FsW7MSaefTSsmagg1TwoVRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1468&quot; height=&quot;1024&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;빈 상태&lt;/b&gt;: Mailbox가 비어 있음.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3개의 mailboxes 존재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Pending 상태&lt;/b&gt;: TXRQ 비트가 설정되어 전송 요청 후, 우선순위 확인을 위해 대기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Schedule 상태&lt;/b&gt;: 스케줄러에 의해 우선순위가 높은 Mailbox로 선정되어 전송 대기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 전송해야 하는 mailbox 선택하고, identifier, the data length code (DLC), data 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Control register에서 TXRQ bit 설정하여 전송 요청&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Transmit 상태&lt;/b&gt;: 버스가 Idle 상태가 되면, 실제 전송이 시작되고, 버스의 경합(Arbitration)에 참여&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;전송 성공&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Mailbox는 빈 상태로 복귀하며, TXOK 비트 설정 (CAN_TSR register)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;전송 실패&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Arbitration Lost (ALST)&lt;/b&gt; 또는 &lt;b&gt;Transmission Error (TERR)&lt;/b&gt; (CAN_TSR register)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;자동 재전송 (Auto Retransmission)&lt;/b&gt; 기능이 활성화되어 있다면, Mailbox는 다시 Schedule 상태로 돌아가 재시도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 재전송 기능이 비활성화되어 있다면, 실패 시 Mailbox는 비워짐&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;우선순위 변경&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 다른 Mailbox가 Pending 상태에 진입하여 우선순위가 더 높다면, 현재 Schedule 상태에 있는 Mailbox는 다시 Pending 상태로 돌아갈 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN TX 데이터 구조체&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN_TXHeaderTypeDef&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;전송 프레임의 헤더 정보를 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Standard/Extended Identifier&lt;/b&gt;: 식별자&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;IDE&lt;/b&gt;: 메시지 식별자 타입 (표준 프레임 vs 확장 프레임)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;RTR&lt;/b&gt;: 데이터 프레임인지 요청(Remote) 프레임인지를 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;DLC&lt;/b&gt;: 데이터 길이 (payload의 바이트 수)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데이터&lt;/b&gt;는 이 구조체에 포함되지 않고 별도의 외부 버퍼로 전달됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 송신 함수 &lt;b&gt;HAL_CAN_AddTxMessage&lt;/b&gt; 구현 및 송신 완료 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;**HAL_CAN_AddTxMessage**(**CAN_HandleTypeDef** *hcan, **const** **CAN_TxHeaderTypeDef** *pHeader, **const** **uint8_t** aData[], **uint32_t** *pTxMailbox)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;폴링 방식 사용&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;전송 요청이 대기 중인지 확인 : CAN_IsTxMessagePending API 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 API는 선택한 메일박스에 전송 요청이 pending 상태이면 1, 그렇지 않으면 0을 반환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;while 루프로 대기하여, 반환 값이 0이 될 때까지 기다린 후 송신 완료 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;전송 완료 후&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;송신 성공 시 TXOK 비트가 설정되고, 메일박스가 비워지며, UART 를 통해 &amp;ldquo;전송 성공&amp;rdquo; 메시지를 출력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740828080383&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CAN_Tx(void)
{
	CAN_TxHeaderTypeDef TxHeader;
	uint32_t TxMailbox;
	uint8_t message[5] = {'H', 'E', 'L', 'L', 'O'};

	TxHeader.DLC = 5;
	TxHeader.StdId = 0x65D;
	TxHeader.IDE = CAN_ID_STD;
	TxHeader.RTR = CAN_RTR_DATA;

	if(HAL_CAN_AddTxMessage(&amp;amp;hcan1, &amp;amp;TxHeader, message, &amp;amp;TxMailbox)!= HAL_OK) Error_handler();
	while(HAL_CAN_IsTxMessagePending(&amp;amp;hcan1, TxMailbox));

	sprintf(msg, &quot;Message Transmitted\r\n&quot;);
	HAL_UART_Transmit(&amp;amp;huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; bxCAN operating mode&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KRGfh/btsMAtt53lp/NI7oto8k8rPghiZvgCYeHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KRGfh/btsMAtt53lp/NI7oto8k8rPghiZvgCYeHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KRGfh/btsMAtt53lp/NI7oto8k8rPghiZvgCYeHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKRGfh%2FbtsMAtt53lp%2FNI7oto8k8rPghiZvgCYeHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1468&quot; height=&quot;1060&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Reset/Sleep Mode&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마이크로컨트롤러가 리셋되거나 CAN 컨트롤러가 리셋 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;송수신 불가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Initialization Mode&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 컨트롤러 초기화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;제어 레지스터&lt;/b&gt;의 Sleep 비트를 &lt;b&gt;해제&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 초기화 함수(CAN Init)는 바로 이 작업부터 시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;초기화 모드에서는 송수신 기능이 동작하지 않으므로, 초기화 작업이 안전하게 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Normal Mode&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;초기화가 완료된 후, CAN 컨트롤러를 실제 송신(Tx) 및 수신(Rx) 기능 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;HAL_CAN_Start&lt;/b&gt; 호출&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;INRQ 비트를 활성화하여 CAN 컨트롤러를 초기화 모드에서 일반 모드로 전환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 컨트롤러가 정상적으로 버스에 참여하여 메시지를 송수신&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740828134128&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// main함수에 CAN_Tx 이전에 Start 함수 호출해서 Normal Mode로 전환
HAL_CAN_Start(&amp;amp;hcan1);
CAN_Tx();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; msp.c Initialization &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740828148978&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
{
	GPIO_InitTypeDef gpio_can1;
	__HAL_RCC_CAN1_CLK_ENABLE();

	gpio_can1.Pin = GPIO_PIN_11 | GPIO_PIN_12;
	gpio_can1.Mode = GPIO_MODE_AF_PP;
	gpio_can1.Pull = GPIO_NOPULL;
	gpio_can1.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	gpio_can1.Alternate = GPIO_AF9_CAN1;
	HAL_GPIO_Init(GPIOA, &amp;amp;gpio_can1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; CAN loopback connection details &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PHO8a/btsMAXnXFsQ/FVPSOrA31UKREFUhNaUyS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PHO8a/btsMAXnXFsQ/FVPSOrA31UKREFUhNaUyS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PHO8a/btsMAXnXFsQ/FVPSOrA31UKREFUhNaUyS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPHO8a%2FbtsMAXnXFsQ%2FFVPSOrA31UKREFUhNaUyS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;535&quot; height=&quot;264&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KNXQI/btsMBeQyWsA/iyB8og9v7uEpoZD0S9ATh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KNXQI/btsMBeQyWsA/iyB8og9v7uEpoZD0S9ATh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KNXQI/btsMBeQyWsA/iyB8og9v7uEpoZD0S9ATh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKNXQI%2FbtsMBeQyWsA%2FiyB8og9v7uEpoZD0S9ATh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;596&quot; height=&quot;239&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;트랜시버 없이 테스트 (Loopback 모드 사용)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;트랜시버 모듈을 사용하지 않는다면, PA11 (CAN TX 핀)을 연결할 필요X&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;루프백 모드는 내부적으로 동작하므로 &lt;b&gt;RCS 라인도 연결 X&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;해당 핀을 3.3V로 드라이브&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.3V는 &lt;b&gt;Nucleo 보드에서 제공&lt;/b&gt;되며, &lt;b&gt;3.3k&amp;Omega; 저항을 통해 연결&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이렇게 연결하면 트랜시버 없이도 테스트 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;트랜시버를 사용하는 경우&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;트랜시버를 사용할 경우, &lt;b&gt;3.3V DC, GND, CAN TX, CAN RX&lt;/b&gt; 연결&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN_H, CAN_L 핀이 있으며&lt;/b&gt;, 이는 차동 신호를 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;역할 :&lt;/b&gt; &lt;b&gt;싱글 엔디드 신호를 차동 신호로 변환&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;트랜시버 연결 방법&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;트랜시버 모듈에 &lt;b&gt;3.3V 전원을 공급&lt;/b&gt;(3.3V 이상 공급하지 않도록 주의)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;GND를 정확히 연결&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;PA11 (CAN TX) &amp;rarr; 트랜시버 CAN TX 핀&lt;/b&gt; 연결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;PA12 (CAN RX) &amp;rarr; 트랜시버 CAN RX 핀&lt;/b&gt; 연결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN_H, CAN_L 핀은 그대로 둠&lt;/b&gt; (별도로 연결할 필요 없음)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;대부분의 트랜시버에는 &lt;b&gt;120&amp;Omega; 종단 저항&lt;/b&gt;이 포함되어 있음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용 중인 트랜시버 모듈의 &lt;b&gt;회로도를 확인하여 120&amp;Omega; 저항이 있는지 체크&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Nucleo 보드에서 전원 및 GND 연결&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kMI9d/btsMyShcvDM/ZAaSAf2afvbtvVj5Ulo1Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kMI9d/btsMyShcvDM/ZAaSAf2afvbtvVj5Ulo1Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kMI9d/btsMyShcvDM/ZAaSAf2afvbtvVj5Ulo1Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMI9d%2FbtsMyShcvDM%2FZAaSAf2afvbtvVj5Ulo1Ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;333&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3.3V와 GND는 Nucleo 보드의 헤더에서 쉽게 얻을 수 있음&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3.3V &amp;rarr; 트랜시버 3.3V 핀&lt;/b&gt; 연결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;GND &amp;rarr; 트랜시버 GND 핀&lt;/b&gt; 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Application Test&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uqqen/btsMymQExqn/syusI62M9NTqkOsyRSXuM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uqqen/btsMymQExqn/syusI62M9NTqkOsyRSXuM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uqqen/btsMymQExqn/syusI62M9NTqkOsyRSXuM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUqqen%2FbtsMymQExqn%2FsyusI62M9NTqkOsyRSXuM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;714&quot; height=&quot;112&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모든 연결을 완료한 후, 테스트를 진행.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Logic Analyzer를 사용할 경우 CAN_TX 핀에 연결.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN_RX 핀은 연결하지 않음 (Loopback 모드에서는 내부에서 처리됨)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;로직 분석기가 아날로그 신호를 지원하면 CAN_H에 연결 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아날로그 신호 지원이 없을 경우, CAN_TX 핀의 디지털 신호를 측정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;로직 분석기로 CAN 메시지 디코딩&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;분석기 소프트웨어에서 CAN 분석기 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;채널 선택: CAN 신호를 연결한 채널 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 레이트 설정: 500kbps (500000으로 입력)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;메시지 디코딩 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd6NLA/btsMyCTfUMu/eODVrHV9inIfxatEOKfzR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd6NLA/btsMyCTfUMu/eODVrHV9inIfxatEOKfzR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd6NLA/btsMyCTfUMu/eODVrHV9inIfxatEOKfzR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd6NLA%2FbtsMyCTfUMu%2FeODVrHV9inIfxatEOKfzR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1454&quot; height=&quot;240&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Identifier (식별자): 65D (16진수).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터: &quot;hello&quot; (ASCII 변환 가능).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Loopback 모드에서 ACK 문제&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ACK 오류(NAK)가 발생하지만, 이는 정상적인 동작&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;자체적으로 ACK 신호를 무시&lt;/b&gt;하고 재전송하지 않기 때문&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;따라서 ACK 필드는 Recessive(1) 상태로 유지됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;비트 레이트 검증&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;SOF(Start of Frame, 시작 프레임) 확인: 첫 번째 지배적 비트(Dominant Bit).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비트 지속 시간 측정:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;SOF가 2마이크로초(2&amp;mu;s)라면 500kbps 설정이 올바름&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/127</guid>
      <comments>https://codingexplore.tistory.com/127#entry127comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:26:59 +0900</pubDate>
    </item>
    <item>
      <title>STM32 bxCAN</title>
      <link>https://codingexplore.tistory.com/126</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;STM32 bxCAN Introduction&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;STM32의 bxCAN(basic extended CAN) 모듈은 CAN 메시지의 송수신을 완전히 자동으로 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;bxCAN 의 세부 명세는 레퍼런스 메뉴얼에서 추가적으로 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;bxCAN의 주요 특징&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CAN1(마스터)과 CAN2(슬레이브) 두 개의 CAN 컨트롤러 제공&lt;/li&gt;
&lt;li&gt;CAN 프로토콜 2.0 A와 B 버전 지원 (표준 및 확장 CAN 네트워크 모두 사용 가능)&lt;/li&gt;
&lt;li&gt;최대 1Mbps의 비트레이트 지원 (클럭 설정에 따라 다름)&lt;/li&gt;
&lt;li&gt;3개의 송신 메일박스 제공 (한 번에 3개의 CAN 메시지 전송 가능)&lt;/li&gt;
&lt;li&gt;각 컨트롤러마다 3단계의 2개 수신 FIFO 제공&lt;/li&gt;
&lt;li&gt;CAN1과 CAN2가 공유하는 28개의 필터 뱅크&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;bxCAN으로 할 수 있는 작업&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비트레이트, 비트 타이밍 등의 CAN 파라미터 설정&lt;/li&gt;
&lt;li&gt;메시지 전송 및 수신 처리&lt;/li&gt;
&lt;li&gt;수신은 하드웨어가 자동으로 처리 (필터링, FIFO로 데이터 이동)&lt;/li&gt;
&lt;li&gt;인터럽트 관리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 완료 인터럽트&lt;/li&gt;
&lt;li&gt;수신 인터럽트&lt;/li&gt;
&lt;li&gt;에러 인터럽트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CAN 버스의 진단 정보 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;듀얼 CAN 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;NUCLEO-F446RE는 &lt;b&gt;듀얼 CAN&lt;/b&gt;을 지원하며, &lt;b&gt;CAN1과 CAN2&lt;/b&gt; 두 개의 CAN 컨트롤러를 포함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CAN1 (마스터)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CAN2 (슬레이브)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러나, CAN 통신은 &lt;u&gt;&lt;b&gt;마스터-슬레이브 기반이 아닌 멀티마스터 방식&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CubeMX 및 참고 매뉴얼에서는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;CAN1을 &lt;b&gt;마스터&lt;/b&gt;, CAN2를 &lt;b&gt;슬레이브&lt;/b&gt;라고 표현하는데, 이는 CAN2의 &lt;b&gt;기능적 제약&lt;/b&gt; 때문(혼동 주의!)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CAN1(마스터)과 CAN2(슬레이브)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CAN2는 SRAM에 직접 접근할 수 없어 슬레이브로 지칭&lt;/li&gt;
&lt;li&gt;CAN2를 사용하려면 반드시 CAN1을 먼저 활성화해야 함&lt;/li&gt;
&lt;li&gt;두 컨트롤러 모두 CAN 2.0 A/B 사양 기반으로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;송수신 구조&lt;/b&gt;&lt;/h4&gt;
&lt;table id=&quot;1a075ea9-258c-8055-9e51-dbf015c727f4&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1a075ea9-258c-801c-b142-ed9e08784387&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;기능&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;CAN1 (마스터)&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;CAN2 (슬레이브)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1a075ea9-258c-80a9-84a4-f27cbb283cb6&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;TX Mailboxes&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;3개&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;3개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1a075ea9-258c-8042-977a-c5c34de31873&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Receive FIFO&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;FIFO0, FIFO1 (각 3개 메시지 저장 가능)&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;FIFO0, FIFO1 (각 3개 메시지 저장 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1a075ea9-258c-806e-a55d-f378fe8933c7&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Filter Bank&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;28개 필터 뱅크 (각 2개 필터 포함)&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;공유 (CAN1 활성화 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1a075ea9-258c-8066-a890-f5ef2f920856&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Transmission Scheduler&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;메시지 우선순위 결정 후 전송&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1a075ea9-258c-8063-b1ab-cd0e4cf033bf&quot;&gt;
&lt;td id=&quot;LD:w&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Interrupt Control&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;H&amp;gt;f\&quot; style=&quot;text-align: center;&quot;&gt;지원&lt;/td&gt;
&lt;td id=&quot;QlkM&quot; style=&quot;text-align: center;&quot;&gt;지원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;송신(Tx) 메일박스 구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CAN1과 CAN2 각각 3개의 송신 메일박스 보유&lt;/li&gt;
&lt;li&gt;한 번에 최대 3개의 메시지 전송 가능&lt;/li&gt;
&lt;li&gt;전송 스케줄러가 메시지 우선순위 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수신(Rx) FIFO 구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 컨트롤러마다 2개의 수신 FIFO (FIFO0, FIFO1) 보유&lt;/li&gt;
&lt;li&gt;각 FIFO는 최대 3개의 CAN 메시지 저장 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FIFO 오버런&lt;/b&gt;: 수신 FIFO가 &lt;b&gt;최대 3개의 메시지를 저장&lt;/b&gt;할 수 있으며, 4번째 메시지가 도착하면 &lt;b&gt;오버런(Overrun) 발생&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Acceptance Filtering
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CAN 메시지를 &lt;b&gt;설정된 규칙에 따라 필터링&lt;/b&gt;하는 기능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;총 28개의 필터 뱅크&lt;/b&gt; 보유 (각각 2개의 필터 포함)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CAN1과 CAN2가 공유&lt;/b&gt;하며, &lt;b&gt;CAN2가 사용하려면 CAN1이 활성화되어야 함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bxCAN Test Mode&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zwVGS/btsMz6y7C3y/MeJvOoyhEkUko5K2qkAcv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zwVGS/btsMz6y7C3y/MeJvOoyhEkUko5K2qkAcv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zwVGS/btsMz6y7C3y/MeJvOoyhEkUko5K2qkAcv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzwVGS%2FbtsMz6y7C3y%2FMeJvOoyhEkUko5K2qkAcv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1207&quot; height=&quot;326&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Silent Mode&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CAN 버스에 &lt;b&gt;영향을 주지 않고 메시지를 수신&lt;/b&gt;하는 테스트&lt;/li&gt;
&lt;li&gt;Bus에서 데이터를 듣기만 하고 송신하지 않음. Sniffer 역할 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Loopback Mode&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자체적으로 메시지를 송수신&lt;/b&gt;하여 CAN 통신이 정상적으로 동작하는지 테스트&lt;/li&gt;
&lt;li&gt;Bus에 송신 가능하지만, Bus에서 데이터 수신은 불가능. Self-Test 용도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Silent + Loopback Mode&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 네트워크 영향을 받지 않으면서 &lt;b&gt;내부적으로 메시지 송수신을 검증&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt; Bus와 완전히 분리되어 내부 테스트만 가능 &lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1) Silent Mode (침묵 모드)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CAN_TX가 TX 엔진과 분리&lt;/b&gt;되어 있으며, 항상 논리적 '1' (Recessive Bit) 유지됨.&lt;/li&gt;
&lt;li&gt;즉, &lt;b&gt;CAN Bus를 방해하지 않고&lt;/b&gt; 항상 Recessive 상태를 유지함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수신(Rx)은 정상적으로 동작&lt;/b&gt;하며, CAN Bus에서 전송되는 데이터를 읽을 수 있음.&lt;/li&gt;
&lt;li&gt;CAN_TX는 내부적으로 Rx로 루프백되어 &lt;b&gt;송신한 데이터를 수신할 수 있음&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CAN Bus의 트래픽을 분석하는 &quot;Sniffer&quot; 용도로 활용 가능&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;CAN Bus에 영향을 주지 않음 (Recessive Bit 유지)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;Bus에서 데이터를 수신 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;자체 송신한 데이터를 내부적으로 수신 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;네트워크 분석(Sniffer) 용도로 사용 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2) Loop Back Mode (루프백 모드)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CAN_TX는 정상적으로 동작&lt;/b&gt;하여 CAN Bus에 데이터를 전송할 수 있음.&lt;/li&gt;
&lt;li&gt;하지만 &lt;b&gt;Bus에서 데이터를 수신할 수 없음&lt;/b&gt; (CAN_RX가 Bus에서 분리됨).&lt;/li&gt;
&lt;li&gt;대신, &lt;b&gt;자신이 송신한 데이터가 내부적으로 CAN_RX로 루프백됨&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;주로 &lt;b&gt;자기 테스트(Self-Test) 용도로 사용&lt;/b&gt;됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;CAN Bus에 데이터를 송신 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;자체 송신한 데이터를 내부적으로 수신 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;CAN Bus에서 다른 노드의 데이터를 수신 불가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;Self-Test 용도로 사용됨&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3) Silent + Loop Back Mode (침묵 + 루프백 모드)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CAN_TX 및 CAN_RX 모두 CAN Bus에서 분리됨&lt;/b&gt; &amp;rarr; 완전히 독립적인 상태.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;송신한 데이터가 내부적으로 Rx로 루프백됨&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;하지만 &lt;b&gt;CAN Bus의 데이터를 수신할 수 없음&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;즉, &lt;b&gt;완전히 독립된 상태에서 자체 테스트를 수행하는 용도&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;CAN Bus에 데이터를 송신할 수 없음&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;CAN Bus에서 데이터를 수신할 수 없음&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;자체 송신한 데이터를 내부적으로 수신 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;완전히 독립적인 상태에서 Self-Test 가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/126</guid>
      <comments>https://codingexplore.tistory.com/126#entry126comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:16:35 +0900</pubDate>
    </item>
    <item>
      <title>CAN frame formats / Bus Arbitration</title>
      <link>https://codingexplore.tistory.com/125</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Arbitration field&lt;/b&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN 메시지 유형 (Frame Types)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데이터 프레임(Data Frame)&lt;/b&gt;: 일반적으로 가장 많이 사용되는 메시지 유형으로, CAN 노드가 다른 노드에 메시지를 전송할 때 사용된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;원격 프레임(Remote Frame)&lt;/b&gt;: 특정 노드에서 다른 노드에 데이터를 요청할 때 사용된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;에러 프레임(Error Frame)&lt;/b&gt;: CAN 프로토콜의 신호 규칙 위반이나 오류 발생 시 컨트롤러가 자동으로 전송하는 프레임이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;오버로드 프레임(Overload Frame)&lt;/b&gt;: 버스가 과부하 상태일 때 컨트롤러가 자동으로 전송하는 프레임이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터 프레임과 원격 프레임은 애플리케이션에서 자주 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에러 프레임과 오버로드 프레임은 컨트롤러가 자동으로 관리&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데이터 프레임(Data Frame)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 노드가 다른 노드로 메시지를 전송할 때 사용하는 기본적인 프레임 형식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;브로드캐스트&lt;/b&gt; 방식으로 메시지를 전달&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터 필드 최대 크기: &lt;b&gt;8바이트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프레임 내부에는 여러 필드가 포함됨 (예: 페이로드, 길이 필드, CRC 필드 등)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데이터 프레임 구조&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD79N6/btsMx3junoW/Uwj33DRKLbsWPwAwvvjUKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD79N6/btsMx3junoW/Uwj33DRKLbsWPwAwvvjUKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD79N6/btsMx3junoW/Uwj33DRKLbsWPwAwvvjUKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD79N6%2FbtsMx3junoW%2FUwj33DRKLbsWPwAwvvjUKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1184&quot; height=&quot;408&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Start of Frame (SOF)&lt;/b&gt;: 프레임의 시작을 알리는 첫 번째 지배(dominant) 비트.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Arbitration Field&lt;/b&gt;: 우선순위를 결정하는 필드로, 11비트 식별자(identifier)와 1비트 RTR(Request Remote) 비트로 구성됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Control Field&lt;/b&gt;: 데이터 길이 등을 정의하는 필드.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Data Field&lt;/b&gt;: 최대 8바이트의 데이터를 포함하는 페이로드 필드.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CRC Field&lt;/b&gt;: 오류 검출을 위한 CRC 코드가 포함된 필드 (컨트롤러가 자동 계산).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK Field&lt;/b&gt;: 수신 노드가 프레임을 정상적으로 수신했는지 확인하는 필드. 정상적으로 수신되면 지배 상태(dominant)로 설정됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;End of Frame (EOF)&lt;/b&gt;: 프레임 종료를 나타내는 7개의 열성(recessive) 상태 비트.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Interframe Space&lt;/b&gt;: 프레임 간 간격을 유지하는 3개의 열성(recessive) 비트.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Arbitration Field&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SpzH1/btsMAsBTsEO/9Tp8uCskAfFJtCjmfUnwb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SpzH1/btsMAsBTsEO/9Tp8uCskAfFJtCjmfUnwb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SpzH1/btsMAsBTsEO/9Tp8uCskAfFJtCjmfUnwb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSpzH1%2FbtsMAsBTsEO%2F9Tp8uCskAfFJtCjmfUnwb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;359&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Identifier (식별자, 11비트)&lt;/b&gt;: 메시지의 우선순위를 결정하는 값. &lt;b&gt;값이 작을수록 우선순위가 높음&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;RTR (Request Remote) 비트&lt;/b&gt;: 원격 프레임 요청 여부를 나타내는 비트. 데이터 프레임에서는 항상 &lt;b&gt;지배(dominant) 상태&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Standard CAN vs. Extended CAN&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Bosch에서 발표한 CAN 2.0은 두 가지 유형이 있음: &lt;b&gt;2.0A(표준 CAN)&lt;/b&gt;, &lt;b&gt;2.0B(확장 CAN)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.0A(표준 CAN)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;11비트 식별자&lt;/b&gt; 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.0A 기반 컨트롤러는 표준 프레임만 송수신 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2.0B (확장 CAN)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FM6L4/btsMA8iE6wk/IcIyylLAiq3gEu7prRfGB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FM6L4/btsMA8iE6wk/IcIyylLAiq3gEu7prRfGB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FM6L4/btsMA8iE6wk/IcIyylLAiq3gEu7prRfGB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFM6L4%2FbtsMA8iE6wk%2FIcIyylLAiq3gEu7prRfGB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1160&quot; height=&quot;379&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;29비트 식별자&lt;/b&gt; 사용 (11비트 + 추가 18비트)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.0B 기반 컨트롤러는 표준 및 확장 프레임 모두 송수신 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존 2.0A 컨트롤러와 하위 호환 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;차이점&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 길이: 표준 CAN(11비트) vs. 확장 CAN(29비트)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;확장 프레임에는 &lt;b&gt;추가 18비트 식별자 필드&lt;/b&gt; 존재&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;표준과 확장 프레임을 구분하는 IDE 비트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;IDE 비트 dominant &amp;rarr; 표준 프레임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;IDE 비트 recessive &amp;rarr; 확장 프레임&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Arbitration 필드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;11비트 식별자 + 1비트 RTR 비트(총 12비트)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여러 노드가 동시에 버스를 사용할 경우 &lt;b&gt;메시지 우선순위를 결정&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; ACK, RTR, DLC, CRC&lt;/b&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;RTR (Remote Transmission Request) 비트&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터 프레임(Data Frame)에서는 항상 &lt;b&gt;dominant(0)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;원격 프레임(Remote Frame)에서는 &lt;b&gt;recessive(1)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;원격 프레임(Remote Frame): 특정 노드가 다른 노드에게 데이터를 요청하는 메시지 (데이터 필드 없음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기타 필드 설명&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;DLC (Data Length Code)&lt;/b&gt;: 데이터 필드 크기 지정 (최대 8바이트)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CRC (Cyclic Redundancy Check)&lt;/b&gt;: 송수신 데이터 무결성 검사 (15비트 체크섬)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;As soon as CAN receiver starts receiving a frame it also calculates the CRC and then it matches with the CRC sent by the transmitter&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;if CRC match is successful then receiving node make bus state as dominant exactly at the ack slot which indicates the transmitter that at least one node received the frame correctly. If transmitter sees recessive state of the bus at ack slot, then it understands that it&amp;rsquo;s an error and retransmits the message.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK (Acknowledgment) 비트&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;수신 노드가 정상적으로 데이터를 받았을 경우, dominant(0)로 설정 (ACK)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;송신 노드는 ACK 비트가 &lt;b&gt;recessive(1)일 경우 재전송 (NAC)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 버스에 송신 노드만 존재하면, ACK 응답이 없어 계속 재전송됨&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;It is worth noting that the presence of an acknowledgement bit on the bus does not mean that any of the intended devices has received the message.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;It just means that one or more nodes on the bus has received it correctly and transmitter concludes that message sent successfully.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;If transmitter sees recessive state at the ACK slot, then it retransmits the message until it sees dominant state. That&amp;rsquo;s the reason when there is only one node on the bus, transmitter keep sending the same message since no one is there to ack it.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK 필드는 2비트로 구성&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK 비트&lt;/b&gt;: 정상 수신 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK 구분자(ACK delimiter)&lt;/b&gt;: 항상 &lt;b&gt;recessive(1)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;ACK 비트의 한계&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 네트워크에 &lt;b&gt;하나 이상의 노드만 존재하면 송신자는 ACK 응답을 받을 수 있음&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ACK는 단순히 &lt;b&gt;CAN 메시지가 데이터 링크 계층 규칙을 위반하지 않았음을 확인할 뿐&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;특정 수신 노드가 데이터를 실제로 받았는지, 요청된 작업을 수행했는지는 보장되지 않음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; EOF, IFS and SOF&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tCKHn/btsMzQJ3U3L/iVQvYIkYSTJo4mqsTkxRe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tCKHn/btsMzQJ3U3L/iVQvYIkYSTJo4mqsTkxRe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tCKHn/btsMzQJ3U3L/iVQvYIkYSTJo4mqsTkxRe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtCKHn%2FbtsMzQJ3U3L%2FiVQvYIkYSTJo4mqsTkxRe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;510&quot; height=&quot;250&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;End of Frame (EOF) &amp;amp; Inter Frame Spacing (IFS)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;End of Frame (EOF): 메시지의 끝을 나타내며 7개의 연속된 recessive 비트로 구성됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Inter Frame Spacing (IFS): EOF 이후 3개의 recessive 비트로 구성되며, 다음 메시지가 전송되기 전 반드시 포함되어야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, 총 10개의 recessive(1) 비트가 지나야 버스가 Idle 상태가 됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Idle 상태 &amp;amp; 노드의 전송 조건&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;노드는 버스가 Idle 상태인지 확인한 후에만 데이터 전송 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;버스가 Idle 상태가 되면 노드는 SOF을 전송하며 메시지를 시작&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Start of Frame (SOF) 역할&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;SOF는 단일 dominant 비트로, 메시지의 시작을 알림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;SOF가 등장하면 모든 노드가 이를 감지하고 CAN Bus 타이밍을 재동기화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, SOF는 Idle 상태 이후 첫 번째 dominant 비트로 메시지의 시작을 의미함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;SOF의 중요성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;노드들은 긴 recessive(1) 상태를 듣고 버스가 Idle임을 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;첫 번째 dominant 비트를 감지하면 SOF로 인식하고 송&amp;middot;수신을 준비&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CAN 네트워크에서 모든 노드가 동기화되는 기준점 역할&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예제: 두 개의 노드 (Node A &amp;amp; Node B)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Node A가 메시지를 전송하려 할 때, 버스가 Idle 상태인지 확인.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Idle 상태가 확인되면 SOF(0) 비트를 보내며 프레임 시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Node B는 dominant 비트를 감지하고 SOF임을 인식하여 메시지 수신을 준비&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이를 통해 CAN 네트워크의 모든 노드는 동기화된 상태에서 통신을 진행할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&amp;rArr; EOF(7비트) &amp;rarr; IFS(3비트) &amp;rarr; Idle &amp;rarr; SOF(1비트) &amp;rarr; 메시지 전송&lt;/b&gt; 순서로 진행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt; Remote frame&lt;/b&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Remote frame은 다른 노드에 데이터를 요청하거나 정보를 요청하는 데 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;노드 A가 arbitration field 를 123으로 설정한 Remote frame을 전송 &amp;rarr; 노드 B는 arbitration field 가 같은 데이터 프레임으로 응답&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, Remote frame은 요청 및 응답 형태의 통신을 구현하는 데 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;데이터 프레임과의 구별&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 메시지는 경합 필드에 recessive RTR 비트가 설정되어 Remote frame임을 명확히 표시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터가 없음 (요청 메시지이기 때문)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CAN Bus Arbitration&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CSMA (Carrier-sense Multiple Access)&lt;/b&gt;: 각 노드는 메시지를 보내기 전에 &lt;b&gt;버스가 비어있는지 확인&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;충돌 감지 및 우선순위 기반 경합 해결&lt;/b&gt;: 메시지의 &lt;b&gt;우선순위&lt;/b&gt;는 &lt;b&gt;식별자&lt;/b&gt; 필드에 미리 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;CD+AMP (Collision Detection + Arbitration on Message Priority)&lt;/b&gt;: 각 메시지는 &lt;b&gt;비트 단위 경합&lt;/b&gt;을 통해 우선순위가 높은 메시지가 버스 접근을 우선&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;우선순위&lt;/b&gt;: &lt;b&gt;낮은 식별자 번호&lt;/b&gt;일수록 우선순위가 높음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WQm9V/btsMyBfLDKj/PRkqNI6o7Wi1mM2ggc9We1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WQm9V/btsMyBfLDKj/PRkqNI6o7Wi1mM2ggc9We1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WQm9V/btsMyBfLDKj/PRkqNI6o7Wi1mM2ggc9We1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWQm9V%2FbtsMyBfLDKj%2FPRkqNI6o7Wi1mM2ggc9We1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;517&quot; height=&quot;306&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;SOF (Start of Frame) 비트 전송 후, 각 노드는 자신의 식별자 비트를 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Recessive 상태로 시작한 후, dominant 비트를 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;NODE-2가 recessive 비트를 보내면, 다른 두 노드 (NODE-1, NODE-3)가 dominant 비트 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이로 인해 NODE-2는 경합에서 탈락하고, Listen Only Mode로 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;NODE-1과 NODE-3이 남아 경합을 계속하며, 결국 NODE-3이 우선순위가 더 높아 경합에서 승리&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;경합 승리 조건 정리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Dominant 비트가 Recessive 비트를 항상 우선시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;식별자 값이 낮은 메시지가 우선순위가 높고, 버스를 장기간 점유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 과정은 자동으로 CAN 컨트롤러에서 처리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ComputerScience &amp;amp; Embedded/NUCLEO &amp;amp; CAN Tranceiver</category>
      <author>leecrossun</author>
      <guid isPermaLink="true">https://codingexplore.tistory.com/125</guid>
      <comments>https://codingexplore.tistory.com/125#entry125comment</comments>
      <pubDate>Sat, 1 Mar 2025 20:10:51 +0900</pubDate>
    </item>
  </channel>
</rss>