<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>MindEater's MindRoom</title>
    <link>https://sahngoh.tistory.com/</link>
    <description>업무, 공부, 잡학, 그리고 세상 모든 것들에 대한 생각들을 자유롭게 기록하는 공간입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 07:01:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>MindEater&amp;trade;</managingEditor>
    <image>
      <title>MindEater's MindRoom</title>
      <url>https://t1.daumcdn.net/cfile/tistory/181CC9494E447EA12A</url>
      <link>https://sahngoh.tistory.com</link>
    </image>
    <item>
      <title>DMA Chained vs Continuous</title>
      <link>https://sahngoh.tistory.com/675</link>
      <description>&lt;p data-end=&quot;173&quot; data-start=&quot;0&quot; data-ke-size=&quot;size16&quot;&gt;Broadcom 계열 SoC에서 CPU가 패킷을 보낼 때 사용하는 DMA 방식은 크게 &lt;b&gt;Chained(링크드 리스트)&lt;/b&gt; 과 &lt;b&gt;Continuous(연속 메모리)&lt;/b&gt; 두 가지로 구분할 수 있습니다. 이름은 플랫폼이나 SDK 문서에 따라 다르게 불리기도 하지만, 개념은 아래와 같아요.&lt;/p&gt;
&lt;hr data-end=&quot;178&quot; data-start=&quot;175&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;204&quot; data-start=&quot;180&quot; data-ke-size=&quot;size26&quot;&gt;1. DMA &lt;b&gt;Chained&lt;/b&gt; 방식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;722&quot; data-start=&quot;205&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;353&quot; data-start=&quot;205&quot;&gt;&lt;b&gt;구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;353&quot; data-start=&quot;218&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;295&quot; data-start=&quot;218&quot;&gt;여러 개의 버퍼(fragment)가 &lt;b&gt;링크드 리스트(Descriptor chain)&lt;/b&gt; 형태로 연결되어 하나의 패킷을 구성합니다.&lt;/li&gt;
&lt;li data-end=&quot;353&quot; data-start=&quot;298&quot;&gt;Descriptor에는 &amp;ldquo;버퍼 주소, 길이, 다음 descriptor 포인터&amp;rdquo;가 들어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;541&quot; data-start=&quot;354&quot;&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;541&quot; data-start=&quot;365&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;423&quot; data-start=&quot;365&quot;&gt;패킷 데이터가 &lt;b&gt;메모리 여러 조각&lt;/b&gt;에 흩어져 있어도 전송 가능 (scatter-gather).&lt;/li&gt;
&lt;li data-end=&quot;491&quot; data-start=&quot;426&quot;&gt;큰 패킷이나 헤더/페이로드를 따로 관리할 때 유리. 예: 헤더 버퍼와 payload 버퍼를 연결만 해서 송신.&lt;/li&gt;
&lt;li data-end=&quot;541&quot; data-start=&quot;494&quot;&gt;CPU는 데이터 복사 없이 descriptor만 설정 &amp;rarr; 성능/메모리 효율 좋음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;722&quot; data-start=&quot;542&quot;&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;722&quot; data-start=&quot;553&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;614&quot; data-start=&quot;553&quot;&gt;DMA 엔진이 각 descriptor를 따라가야 하므로 &lt;b&gt;오버헤드(추가 메모리 fetch)&lt;/b&gt; 발생.&lt;/li&gt;
&lt;li data-end=&quot;673&quot; data-start=&quot;617&quot;&gt;Descriptor 체인을 잘못 관리하면 버퍼 누수/invalid pointer로 오류 발생.&lt;/li&gt;
&lt;li data-end=&quot;722&quot; data-start=&quot;676&quot;&gt;지연(latency) 측면에서 Continuous보다 미세하게 불리할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;727&quot; data-start=&quot;724&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;756&quot; data-start=&quot;729&quot; data-ke-size=&quot;size26&quot;&gt;2. DMA &lt;b&gt;Continuous&lt;/b&gt; 방식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1101&quot; data-start=&quot;757&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;828&quot; data-start=&quot;757&quot;&gt;&lt;b&gt;구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;828&quot; data-start=&quot;770&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;828&quot; data-start=&quot;770&quot;&gt;패킷 전체가 &lt;b&gt;하나의 연속된 메모리 블록&lt;/b&gt;에 위치. Descriptor는 단일 엔트리로 충분.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;960&quot; data-start=&quot;829&quot;&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;960&quot; data-start=&quot;840&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;876&quot; data-start=&quot;840&quot;&gt;DMA가 단일 블록만 읽으면 되므로 &lt;b&gt;단순하고 빠름&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;911&quot; data-start=&quot;879&quot;&gt;관리도 간단 &amp;rarr; descriptor도 1개만 필요.&lt;/li&gt;
&lt;li data-end=&quot;960&quot; data-start=&quot;914&quot;&gt;작은 패킷(예: control plane 트래픽, ping reply)에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1101&quot; data-start=&quot;961&quot;&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1101&quot; data-start=&quot;972&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1014&quot; data-start=&quot;972&quot;&gt;연속된 메모리 공간을 확보해야 하므로, &lt;b&gt;메모리 단편화&lt;/b&gt;에 취약.&lt;/li&gt;
&lt;li data-end=&quot;1076&quot; data-start=&quot;1017&quot;&gt;헤더/페이로드가 따로 있는 경우 CPU가 복사해서 하나의 버퍼로 만들어야 함 &amp;rarr; CPU 부하 증가.&lt;/li&gt;
&lt;li data-end=&quot;1101&quot; data-start=&quot;1079&quot;&gt;대형 패킷 송신 시 불리할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1106&quot; data-start=&quot;1103&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1125&quot; data-start=&quot;1108&quot; data-ke-size=&quot;size26&quot;&gt;3. 성능/적용 비교 요약&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;항목ChainedContinuous
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1439&quot; data-start=&quot;1127&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1439&quot; data-start=&quot;1189&quot;&gt;
&lt;tr data-end=&quot;1234&quot; data-start=&quot;1189&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1198&quot; data-start=&quot;1189&quot;&gt;메모리 효율&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1216&quot; data-start=&quot;1198&quot;&gt;좋음 (조각난 버퍼도 연결)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1234&quot; data-start=&quot;1216&quot;&gt;나쁨 (연속 메모리 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1293&quot; data-start=&quot;1235&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1247&quot; data-start=&quot;1235&quot;&gt;DMA 성능/지연&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1283&quot; data-start=&quot;1247&quot;&gt;약간 불리 (descriptor fetch overhead)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1293&quot; data-start=&quot;1283&quot;&gt;단순, 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1339&quot; data-start=&quot;1294&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1303&quot; data-start=&quot;1294&quot;&gt;CPU 부하&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1317&quot; data-start=&quot;1303&quot;&gt;적음 (복사 최소화)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1339&quot; data-start=&quot;1317&quot;&gt;복사 필요 (헤더+데이터 합치기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1377&quot; data-start=&quot;1340&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1349&quot; data-start=&quot;1340&quot;&gt;구현 복잡도&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1371&quot; data-start=&quot;1349&quot;&gt;상대적으로 복잡 (chain 관리)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1377&quot; data-start=&quot;1371&quot;&gt;단순&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1439&quot; data-start=&quot;1378&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1387&quot; data-start=&quot;1378&quot;&gt;적합 케이스&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1415&quot; data-start=&quot;1387&quot;&gt;대형 패킷, scatter-gather I/O&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1439&quot; data-start=&quot;1415&quot;&gt;소형 패킷, 제어 트래픽, 빠른 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1444&quot; data-start=&quot;1441&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1468&quot; data-start=&quot;1446&quot; data-ke-size=&quot;size26&quot;&gt;4. Broadcom SDK의 맥락&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1720&quot; data-start=&quot;1469&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1586&quot; data-start=&quot;1469&quot;&gt;bcm_tx() 호출 시 내부적으로 &lt;b&gt;pkt-&amp;gt;pkt_data&lt;/b&gt; 에 여러 buffer가 있으면 &lt;b&gt;Chained&lt;/b&gt; DMA로, 하나의 buffer면 &lt;b&gt;Continuous&lt;/b&gt; DMA로 처리됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1649&quot; data-start=&quot;1587&quot;&gt;control-plane reply 같이 작은 패킷은 &lt;b&gt;Continuous&lt;/b&gt; 가 가장 빠르고 안정적.&lt;/li&gt;
&lt;li data-end=&quot;1720&quot; data-start=&quot;1650&quot;&gt;Throughput 테스트(iperf, 대용량 송신)에서는 &lt;b&gt;Chained&lt;/b&gt; 방식이 CPU copy를 줄여 유리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1725&quot; data-start=&quot;1722&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;1737&quot; data-start=&quot;1727&quot; data-ke-size=&quot;size16&quot;&gt;  정리하면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1815&quot; data-start=&quot;1738&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1774&quot; data-start=&quot;1738&quot;&gt;&lt;b&gt;Continuous&lt;/b&gt; = 단순&amp;middot;빠름&amp;middot;작은 패킷에 적합&lt;/li&gt;
&lt;li data-end=&quot;1815&quot; data-start=&quot;1775&quot;&gt;&lt;b&gt;Chained&lt;/b&gt; = 메모리 효율&amp;middot;복사 최소화&amp;middot;큰 패킷에 적합&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT Tech/Network</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/675</guid>
      <comments>https://sahngoh.tistory.com/675#entry675comment</comments>
      <pubDate>Wed, 17 Sep 2025 07:50:14 +0900</pubDate>
    </item>
    <item>
      <title>DMA(Direct Memory Access) 운용 방식 중에서 Contiguous (연속) 방식과 Chain (체인) 방식의 주요 차이점</title>
      <link>https://sahngoh.tistory.com/674</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;1093&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyWp09/btsQwcKbntt/wSVUiO7q6GxpuxXFHvQBW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyWp09/btsQwcKbntt/wSVUiO7q6GxpuxXFHvQBW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyWp09/btsQwcKbntt/wSVUiO7q6GxpuxXFHvQBW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyWp09%2FbtsQwcKbntt%2FwSVUiO7q6GxpuxXFHvQBW0%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;1093&quot; height=&quot;651&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DMA(Direct Memory Access) 운용 방식 중에서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Contiguous (연속) 방식&lt;/span&gt;&lt;/b&gt;&lt;span&gt;과 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Chain (체인) 방식&lt;/span&gt;&lt;/b&gt;&lt;span&gt;의 주요 차이점을 설명해 드리겠습니다. 이 두 가지 방식은 DMA가 메모리에서 데이터를 가져오거나 쓰는 방법을 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;1. Contiguous (연속) 방식&lt;/span&gt;&lt;/h3&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;span&gt;정의:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Contiguous 방식은 DMA가 &lt;/span&gt;&lt;b&gt;&lt;span&gt;하나의 연속적인 메모리 블록&lt;/span&gt;&lt;/b&gt;&lt;span&gt;에서 데이터를 전송하는 방식입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;작동 방식:&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;CPU는 DMA 컨트롤러에게 전송할 데이터가 시작되는 **메모리의 시작 주소(Start Address)**와 전송할 **데이터의 총 길이(Total Length)**를 알려줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DMA 컨트롤러는 이 시작 주소부터 지정된 길이만큼의 데이터를 메모리에서 순차적으로 읽어오거나(Read) 또는 기록(Write)합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전송이 완료되면 DMA 컨트롤러는 CPU에 완료 인터럽트를 발생시킵니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;주요 특징:&lt;/span&gt;&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;span&gt;단순함:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 구현이 비교적 단순합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;효율성 (연속 메모리):&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 메모리에 데이터가 연속적으로 존재할 때 가장 효율적입니다. DMA 컨트롤러가 한 번에 많은 데이터를 가져올 수 있어 오버헤드가 적습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;제약 사항:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 전송할 데이터가 메모리에 연속적으로 배치되어 있어야 합니다. 만약 패킷 데이터가 여러 개의 작은 비연속적인(non-contiguous) 메모리 블록에 분산되어 있다면, 이 방식을 그대로 사용할 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;2. Chain (체인) 방식 또는 Scatter/Gather (분산/수집) 방식&lt;/span&gt;&lt;/h3&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;span&gt;정의:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Chain 방식은 DMA가 &lt;/span&gt;&lt;b&gt;&lt;span&gt;여러 개의 비연속적인(non-contiguous) 메모리 블록&lt;/span&gt;&lt;/b&gt;&lt;span&gt;에 분산되어 있는 데이터를 전송하는 방식입니다. &quot;Scatter/Gather DMA&quot;라고도 불립니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;작동 방식:&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;CPU는 DMA 컨트롤러에게 전송할 각 메모리 블록에 대한 정보를 담은 &lt;/span&gt;&lt;b&gt;&lt;span&gt;DMA 디스크립터(DMA Descriptor)들의 리스트 또는 체인&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;각 DMA 디스크립터는 하나의 메모리 블록에 대한 정보를 포함합니다 (예: 해당 블록의 시작 주소, 길이).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DMA 컨트롤러는 이 디스크립터 체인을 순차적으로 처리하면서, 각 디스크립터가 가리키는 메모리 블록에서 데이터를 읽어오거나 기록합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모든 디스크립터가 처리되면 전송이 완료되고 CPU에 완료 인터럽트를 발생시킵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;디스크립터들은 일반적으로 시스템 메모리에 미리 정의된 구조체 형태로 저장됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;주요 특징:&lt;/span&gt;&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;span&gt;유연성:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 메모리에 비연속적으로 분산된 데이터를 효율적으로 처리할 수 있습니다. 이는 운영체제가 메모리를 할당할 때 단일의 큰 연속 블록을 찾기 어려운 경우나, 패킷 헤더와 페이로드(payload)가 다른 버퍼에 저장되는 경우에 매우 유용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;복잡성:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Contiguous 방식보다 구현이 더 복잡합니다. 디스크립터 구조를 정의하고 관리해야 하며, DMA 컨트롤러도 디스크립터를 파싱하고 체인을 따라가는 로직이 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;오버헤드:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 각 디스크립터를 처리할 때마다 DMA 컨트롤러가 메모리에서 디스크립터 자체를 읽어와야 하므로, Contiguous 방식보다 약간의 추가 오버헤드가 발생할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;패킷 처리에서의 적용&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;패킷 처리에서는 Chain 방식이 매우 흔하게 사용됩니다. 그 이유는 다음과 같습니다:&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;b&gt;&lt;span&gt;패킷 버퍼링:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 네트워크 스택은 패킷 헤더와 페이로드를 별도의 버퍼에 저장하거나, 패킷이 라우팅 과정에서 여러 중간 버퍼를 거치면서 물리적으로 비연속적인 메모리 위치에 놓일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;제로 카피(Zero-Copy):&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Chain DMA는 CPU가 데이터를 한 번 복사하여 연속적인 버퍼로 만드는 대신, 기존에 분산된 버퍼들을 DMA에게 직접 넘겨주어 CPU의 작업 부하를 줄이는(제로 카피) 데 핵심적인 역할을 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어, 이더넷 프레임은 이더넷 헤더, IP 헤더, TCP 헤더, 그리고 실제 데이터(페이로드)로 구성될 수 있습니다. Chain DMA는 이 각 부분이 시스템 메모리의 서로 다른 위치에 있더라도 DMA 컨트롤러가 이들을 순서대로 '수집(Gather)'하여 하나의 완벽한 패킷으로 만들어 물리 NIC(Network Interface Card)로 전송할 수 있게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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;b&gt;&lt;span&gt;Contiguous (연속) 방식:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 하나의 큰 연속된 메모리 블록 전송. 단순하고 효율적이지만 유연성이 떨어짐.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Chain (체인) 또는 Scatter/Gather 방식:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 여러 개의 비연속적인 메모리 블록을 디스크립터 체인을 통해 전송. 유연하지만 구현이 복잡하고 약간의 오버헤드가 있음.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;대부분의 현대 네트워크 칩은 유연성 때문에 Chain (Scatter/Gather) DMA 방식을 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Tech/Network</category>
      <category>DMA</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/674</guid>
      <comments>https://sahngoh.tistory.com/674#entry674comment</comments>
      <pubDate>Mon, 15 Sep 2025 08:30:49 +0900</pubDate>
    </item>
    <item>
      <title>특이점이 온 좀도둑</title>
      <link>https://sahngoh.tistory.com/673</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;</description>
      <category>Humanities/Cosmorama</category>
      <category>동영상</category>
      <category>유머</category>
      <category>혼돈</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/673</guid>
      <comments>https://sahngoh.tistory.com/673#entry673comment</comments>
      <pubDate>Sat, 20 Aug 2022 12:04:18 +0900</pubDate>
    </item>
    <item>
      <title>쿠팡플레이 PC버전 주소</title>
      <link>https://sahngoh.tistory.com/671</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.coupangplay.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.coupangplay.com/home&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641683139851&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;쿠팡플레이&quot; data-og-description=&quot;지원되지 않는 브라우저입니다 엣지, 크롬, 파이어폭스 또는 사파리에서 다시 시도해주세요.&quot; data-og-host=&quot;www.coupangplay.com&quot; data-og-source-url=&quot;https://www.coupangplay.com/home&quot; data-og-url=&quot;https://www.coupangplay.com/unsupported-browser&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.coupangplay.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.coupangplay.com/home&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;쿠팡플레이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지원되지 않는 브라우저입니다 엣지, 크롬, 파이어폭스 또는 사파리에서 다시 시도해주세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupangplay.com&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;p data-ke-size=&quot;size16&quot;&gt;주소 하나 알려주는 뭔 놈의 사설이 그리 많은지.. 토나와서 글 하나 올림 ㅋ&lt;/p&gt;</description>
      <category>Humanities/BlahBlah</category>
      <category>쿠팡플레이 PC 버전 주소</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/671</guid>
      <comments>https://sahngoh.tistory.com/671#entry671comment</comments>
      <pubDate>Sun, 9 Jan 2022 08:06:55 +0900</pubDate>
    </item>
    <item>
      <title>TV조선 미스트롯2 편파 오짐. 뭐 이제 TV조선 안봐도 되니 조으네 ㅋ</title>
      <link>https://sahngoh.tistory.com/669</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3AB1W/btqVV2QkM46/lnRNntHxkURca1O7eKMH5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3AB1W/btqVV2QkM46/lnRNntHxkURca1O7eKMH5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3AB1W/btqVV2QkM46/lnRNntHxkURca1O7eKMH5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3AB1W%2FbtqVV2QkM46%2FlnRNntHxkURca1O7eKMH5K%2Fimg.png&quot; data-origin-width=&quot;0.0&quot; data-origin-height=&quot;0.0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아..&amp;nbsp; 대국민투표는 도대체 왜한겨??&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;무신 유량단??은 왜 그따구로 헤효~~~ 내 진짜 ㅈㄴ 답답해 여기에 씨부리고 이젠 다시 TV조선 안본다.&lt;br /&gt;그 동안 미스트롯때문에 어쩔수없이 TV조선 채널 트는 것도 기분 뭐 같았는데...&lt;br /&gt;뭐 이제 그 꼴 안 봐도 되니 속 시원타!!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;심사위원이라는 사람이 무신 지 아는 사람 나왔다고 대성통곡을 허잖나..&lt;br /&gt;그렇다고 심사에 일관성이 있는 것도 아니고..&lt;br /&gt;학폭으로 나가는 사람 뒷모습은 누가보면 나라지키러 전쟁터에 나가는 줄 알겠드라..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;아니 심사위원들은 대국민 갬성과는 동떨어진게 어느나라 사람들인지 트롯 경연에 트롯 좀 하는 사람들 죄다 떨어트리고 국악/아이돌/발라드 가수들은 뭐 가능성?? ㅇㅂ 먼놈의 쇼질드라마질을 저리 해대는지...&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;백사람이 보고 이렇게 느끼면 문제 있는거지..&lt;br /&gt;드러바서 내 안본다!!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;퉤!!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;휴~ 이렇게 시부리고 나니 속은 시원허네!!!!&lt;/p&gt;</description>
      <category>Humanities/BlahBlah</category>
      <category>TV조선</category>
      <category>병신같은</category>
      <category>편파</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/669</guid>
      <comments>https://sahngoh.tistory.com/669#entry669comment</comments>
      <pubDate>Sat, 6 Feb 2021 17:08:28 +0900</pubDate>
    </item>
    <item>
      <title>마우스 포인터 로딩 아이콘이 깜빡 거리는 증상 원인 찾기 및 네이버 마이박스 제거로 해결</title>
      <link>https://sahngoh.tistory.com/668</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cogNsI/btqO71jRTvq/aSV1buSqpwEBjmXSg6iOM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cogNsI/btqO71jRTvq/aSV1buSqpwEBjmXSg6iOM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cogNsI/btqO71jRTvq/aSV1buSqpwEBjmXSg6iOM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcogNsI%2FbtqO71jRTvq%2FaSV1buSqpwEBjmXSg6iOM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최근 자꾸 업데이트 메시지가 떠서 귀찮아서 업데이트,,,&lt;br /&gt;처음엔 느끼지 못하다가가 오늘 다시 컴퓨터를 사용하려고 켜니 마우스 포인터가 자꾸 로딩중이다.&lt;/p&gt;
&lt;p&gt;그래서 구글링..&lt;br /&gt;각각의 케이스별 데몬이 다른 듯 싶고... 모두 내 경우와는 달랐다.&lt;/p&gt;
&lt;p&gt;귀찮음..&lt;br /&gt;그러나 마우스깜빡이는게 매우 거슬려 범인 색출에 들어갔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqUt2J/btqPenlJB6B/sqf0PmGNm63xSfeAL7t0c0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqUt2J/btqPenlJB6B/sqf0PmGNm63xSfeAL7t0c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqUt2J/btqPenlJB6B/sqf0PmGNm63xSfeAL7t0c0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqUt2J%2FbtqPenlJB6B%2Fsqf0PmGNm63xSfeAL7t0c0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;방법은 작업관리자의 세부정보를 PID 로 정렬한 다음...&lt;br /&gt;자꾸 바뀌는 녀석이 뭔가하고 째려보니,, ,&lt;/p&gt;
&lt;p&gt;네이버 MYBOX&amp;nbsp; 관련 데몬들이다..&lt;/p&gt;
&lt;p&gt;무슨 기능인지는 모르겠으나 평소 사용하지 않으니 과감하게 삭제..&lt;br /&gt;그러자 거짓말같이 마우스포인터가 조용해졌다. ㅋ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다.. 네이버 MYBOX 문제였다!!&lt;/p&gt;</description>
      <category>Stuff Things../IT Stuff and Review</category>
      <category>MYBOX</category>
      <category>네이버</category>
      <category>마우스포인터 깜빡임</category>
      <category>마이박스</category>
      <category>버그</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/668</guid>
      <comments>https://sahngoh.tistory.com/668#entry668comment</comments>
      <pubDate>Sat, 5 Dec 2020 15:41:11 +0900</pubDate>
    </item>
    <item>
      <title>헷갈리는 중앙일보... 이리조리로 왔다 요리조리로 갔다 아직도 햇갈리나요~~</title>
      <link>https://sahngoh.tistory.com/667</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIHGJ/btqEQ7UFzOE/QtDyMWiwZPKbiwBmFkoWKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIHGJ/btqEQ7UFzOE/QtDyMWiwZPKbiwBmFkoWKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIHGJ/btqEQ7UFzOE/QtDyMWiwZPKbiwBmFkoWKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIHGJ%2FbtqEQ7UFzOE%2FQtDyMWiwZPKbiwBmFkoWKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&quot;처먹을 땐 요사 떨더니&quot;&amp;middot;&amp;middot;&amp;middot;평화 상징 평양냉면의 '독한 변신'&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1592262888691&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;&amp;quot;처먹을 땐 요사 떨더니&amp;quot;&amp;middot;&amp;middot;&amp;middot;평화 상징 평양냉면의 '독한 변신'&quot; data-og-description=&quot;평양냉면의 정치적 의미도 뜨거운 논란의 대상이 됐다.&quot; data-og-host=&quot;news.joins.com&quot; data-og-source-url=&quot;https://news.joins.com/article/23801404&quot; data-og-url=&quot;https://news.joins.com/article/23801404&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cyzjIH/hyGrw3vxZL/RxgavjGm9JxHlPhYkk1Pkk/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/cs716C/hyGrp4nOxm/XMbAXGfKd8ZrgwjlTmk4x1/img.jpg?width=559&amp;amp;height=373&amp;amp;face=0_0_559_373&quot;&gt;&lt;a href=&quot;https://news.joins.com/article/23801404&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.joins.com/article/23801404&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cyzjIH/hyGrw3vxZL/RxgavjGm9JxHlPhYkk1Pkk/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/cs716C/hyGrp4nOxm/XMbAXGfKd8ZrgwjlTmk4x1/img.jpg?width=559&amp;amp;height=373&amp;amp;face=0_0_559_373');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;&quot;처먹을 땐 요사 떨더니&quot;&amp;middot;&amp;middot;&amp;middot;평화 상징 평양냉면의 '독한 변신'&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;평양냉면의 정치적 의미도 뜨거운 논란의 대상이 됐다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;news.joins.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;에라이!!&lt;/p&gt;
&lt;p&gt;그리고 예전 기사....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZPofp/btqERQLJhj7/KjfLXc079uuA4oe1klCupk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZPofp/btqERQLJhj7/KjfLXc079uuA4oe1klCupk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZPofp/btqERQLJhj7/KjfLXc079uuA4oe1klCupk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZPofp%2FbtqERQLJhj7%2FKjfLXc079uuA4oe1klCupk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&quot;처먹어&quot; 막말 초등 급식 관계자들... 아동 인격권 침해&lt;/b&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1592262832660&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;&amp;quot;처먹어&amp;quot; 막말 초등 급식 관계자들&amp;hellip;아동 인격권 침해&quot; data-og-description=&quot;&amp;quot;아동들에 수치심과 모욕감 준 것&amp;quot; 해당조리원 경고, 학교 조리원&amp;middot;영양교사 인권교육 필요 【서울=뉴시스】임종명 기자 = 국가인권위원회(인권위)는 초등학교에서 급식을 하면서 조리원들과 영&quot; data-og-host=&quot;news.joins.com&quot; data-og-source-url=&quot;https://news.joins.com/article/20811471&quot; data-og-url=&quot;https://news.joins.com/article/20811471&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cSrDe8/hyGrrHS3cW/ZHMA1g05bMKjePslg4tdJ1/img.jpg?width=499&amp;amp;height=387&amp;amp;face=0_0_499_387,https://scrap.kakaocdn.net/dn/RkIvH/hyGrvQ3XCv/jwLsQ01N9j1MmoeemXALa1/img.jpg?width=499&amp;amp;height=387&amp;amp;face=0_0_499_387&quot;&gt;&lt;a href=&quot;https://news.joins.com/article/20811471&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.joins.com/article/20811471&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cSrDe8/hyGrrHS3cW/ZHMA1g05bMKjePslg4tdJ1/img.jpg?width=499&amp;amp;height=387&amp;amp;face=0_0_499_387,https://scrap.kakaocdn.net/dn/RkIvH/hyGrvQ3XCv/jwLsQ01N9j1MmoeemXALa1/img.jpg?width=499&amp;amp;height=387&amp;amp;face=0_0_499_387');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;&quot;처먹어&quot; 막말 초등 급식 관계자들&amp;hellip;아동 인격권 침해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&quot;아동들에 수치심과 모욕감 준 것&quot; 해당조리원 경고, 학교 조리원&amp;middot;영양교사 인권교육 필요 【서울=뉴시스】임종명 기자 = 국가인권위원회(인권위)는 초등학교에서 급식을 하면서 조리원들과 영&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;news.joins.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;아싸~ 민주주의가 좋긴 좋구나...&lt;/p&gt;
&lt;p&gt;이리조리로 왔다 요리조리로 갔다&lt;br /&gt;&lt;br /&gt;아직도 헷갈리나요~~&lt;/p&gt;</description>
      <category>Humanities/Social.Polinomics</category>
      <category>기레기</category>
      <category>쓰레기언론</category>
      <category>언론</category>
      <category>유머</category>
      <category>조중동</category>
      <category>중앙일보</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/667</guid>
      <comments>https://sahngoh.tistory.com/667#entry667comment</comments>
      <pubDate>Tue, 16 Jun 2020 08:20:35 +0900</pubDate>
    </item>
    <item>
      <title>[펌] 사회 생활 대화의 팁</title>
      <link>https://sahngoh.tistory.com/666</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjbKhL/btqEbQYMA9P/FiV1FF7MgNOkwA6ASmpPx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjbKhL/btqEbQYMA9P/FiV1FF7MgNOkwA6ASmpPx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjbKhL/btqEbQYMA9P/FiV1FF7MgNOkwA6ASmpPx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjbKhL%2FbtqEbQYMA9P%2FFiV1FF7MgNOkwA6ASmpPx1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;714&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1589467381368&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;사회 생활 대화의 팁&quot; data-og-description=&quot;유머,정보,감동,동물,엽기,공포,블박,후방,영상,사회,기타&quot; data-og-host=&quot;www.etoland.co.kr&quot; data-og-source-url=&quot;http://www.etoland.co.kr/bbs/board.php?bo_table=etohumor03&amp;amp;wr_id=426382&quot; data-og-url=&quot;http://www.etoland.co.kr/bbs/board.php?bo_table=etohumor03&amp;amp;wr_id=426382&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://www.etoland.co.kr/bbs/board.php?bo_table=etohumor03&amp;amp;wr_id=426382&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.etoland.co.kr/bbs/board.php?bo_table=etohumor03&amp;amp;wr_id=426382&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;&gt;사회 생활 대화의 팁&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;유머,정보,감동,동물,엽기,공포,블박,후방,영상,사회,기타&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.etoland.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;내가 못하는 것들....&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Humanities/Memorandom</category>
      <category>사회 생활 대화의 팁</category>
      <category>펌</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/666</guid>
      <comments>https://sahngoh.tistory.com/666#entry666comment</comments>
      <pubDate>Thu, 14 May 2020 23:44:16 +0900</pubDate>
    </item>
    <item>
      <title>샤오미 경추마사지기 JeeBack G2 미홈 연동 실패시...</title>
      <link>https://sahngoh.tistory.com/665</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;목디스크가 있는데 경추마사지기를 팔길래 한동안 째려(?)보다가 알리 세일기간에 주문하고 수령했다.&lt;br /&gt;수령기는 아래 블로그 참고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[개봉기 및 간단 리뷰]&lt;/p&gt;
&lt;figure id=&quot;og_1587083764612&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;넥밴드형 샤오미 JeeBack G2 스마트 경추 마사지기 - 사용법 및 미홈 연동 방법&quot; data-og-description=&quot;허리디스크와 목디스크,, 산재인듯 아닌듯 지금은 당연한듯 안고 사는 직업병 비슷한,, 그래서 허리 지지대, 목배게 방석 등 다양한 소품들을 이용하여 통증을 커버하려고 애쓰고 있다. 정말 도움이 되는지는 알..&quot; data-og-host=&quot;mindeater.tistory.com&quot; data-og-source-url=&quot;https://mindeater.tistory.com/2404&quot; data-og-url=&quot;https://mindeater.tistory.com/2404&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HPO87/hyFHEu9NoJ/RaR0AOCC90EC8f9kKqFwA0/img.jpg?width=780&amp;amp;height=520&amp;amp;face=0_0_780_520,https://scrap.kakaocdn.net/dn/MUnaH/hyFHQI82v3/DkdFScaxKsVBrBQK8opAx1/img.jpg?width=780&amp;amp;height=520&amp;amp;face=0_0_780_520,https://scrap.kakaocdn.net/dn/jCVP7/hyFHIEj44F/73bIyNmKmanxeKxEN6nfu0/img.jpg?width=780&amp;amp;height=520&amp;amp;face=542_257_671_386&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2404&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mindeater.tistory.com/2404&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HPO87/hyFHEu9NoJ/RaR0AOCC90EC8f9kKqFwA0/img.jpg?width=780&amp;amp;height=520&amp;amp;face=0_0_780_520,https://scrap.kakaocdn.net/dn/MUnaH/hyFHQI82v3/DkdFScaxKsVBrBQK8opAx1/img.jpg?width=780&amp;amp;height=520&amp;amp;face=0_0_780_520,https://scrap.kakaocdn.net/dn/jCVP7/hyFHIEj44F/73bIyNmKmanxeKxEN6nfu0/img.jpg?width=780&amp;amp;height=520&amp;amp;face=542_257_671_386');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;넥밴드형 샤오미 JeeBack G2 스마트 경추 마사지기 - 사용법 및 미홈 연동 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;허리디스크와 목디스크,, 산재인듯 아닌듯 지금은 당연한듯 안고 사는 직업병 비슷한,, 그래서 허리 지지대, 목배게 방석 등 다양한 소품들을 이용하여 통증을 커버하려고 애쓰고 있다. 정말 도움이 되는지는 알..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;mindeater.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그런데 미홈 연동이 안된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;결론부터 말하면,, 이 제품은 아직 중국내 전용제품이고 연동을 위해서는 중국 서버를 이용해야한다.&lt;br /&gt;방법은 간단하게 MI HOME 앱의 Locale을 China MainLand로 설정하면 끝&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;지금부터는 추가 설명이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uR37n/btqDwc9L8nL/XTX3kTgk6u1Qad1w3n44L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uR37n/btqDwc9L8nL/XTX3kTgk6u1Qad1w3n44L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uR37n/btqDwc9L8nL/XTX3kTgk6u1Qad1w3n44L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuR37n%2FbtqDwc9L8nL%2FXTX3kTgk6u1Qad1w3n44L0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;장비를 스캔하면 사진처럼 전혀 잡히지 않는데...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmkaRx/btqDvyyGNzl/s8bQ0xaZZPWvdDyeyTOAxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmkaRx/btqDvyyGNzl/s8bQ0xaZZPWvdDyeyTOAxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmkaRx/btqDvyyGNzl/s8bQ0xaZZPWvdDyeyTOAxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmkaRx%2FbtqDvyyGNzl%2Fs8bQ0xaZZPWvdDyeyTOAxk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Mi Home Cap #01&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Reigion을 Chiese Mainlad 설정해준다.&lt;br /&gt;지역을 바꾸면 로그인을 다시 해야한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 다시 스캔을 진행하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qIm4z/btqDvyepifu/9eORkyGFKgFwWeScVwzTs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qIm4z/btqDvyepifu/9eORkyGFKgFwWeScVwzTs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qIm4z/btqDvyepifu/9eORkyGFKgFwWeScVwzTs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqIm4z%2FbtqDvyepifu%2F9eORkyGFKgFwWeScVwzTs0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;darr;&amp;darr;&amp;darr;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X8joA/btqDsaMCfer/OFAkWnZaf2r6UAYyYwTXrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X8joA/btqDsaMCfer/OFAkWnZaf2r6UAYyYwTXrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X8joA/btqDsaMCfer/OFAkWnZaf2r6UAYyYwTXrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8joA%2FbtqDsaMCfer%2FOFAkWnZaf2r6UAYyYwTXrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;등록 성공&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;darr;&amp;darr;&amp;darr;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lX4eB/btqDvyepwoH/5eRplKQKkVJY8hQDttVMDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lX4eB/btqDvyepwoH/5eRplKQKkVJY8hQDttVMDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lX4eB/btqDvyepwoH/5eRplKQKkVJY8hQDttVMDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlX4eB%2FbtqDvyepwoH%2F5eRplKQKkVJY8hQDttVMDK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;메인 화면에 리스트가 보인다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이제 본체를 3초이상 눌러 푸른색 LED가 점멸한 상태에서 앱이 정상적으로 연동된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDwHe/btqDwefphRX/FFkE2D9ppOSSL3NN8Vask0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDwHe/btqDwefphRX/FFkE2D9ppOSSL3NN8Vask0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDwHe/btqDwefphRX/FFkE2D9ppOSSL3NN8Vask0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDwHe%2FbtqDwefphRX%2FFFkE2D9ppOSSL3NN8Vask0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;여담이지만 이 경추 마사지기 꽤 쓸만하다..&lt;br /&gt;쎄!! 강도 6정도만해도 무지 쎄!!!&lt;/p&gt;</description>
      <category>Stuff Things../IT Stuff and Review</category>
      <category>경추마사지기</category>
      <category>리뷰</category>
      <category>미홈</category>
      <category>샤오미</category>
      <category>연동방법</category>
      <category>좁쌀</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/665</guid>
      <comments>https://sahngoh.tistory.com/665#entry665comment</comments>
      <pubDate>Fri, 17 Apr 2020 10:55:25 +0900</pubDate>
    </item>
    <item>
      <title>Serial 통신, UART, I2C, SPI 개요(펌)</title>
      <link>https://sahngoh.tistory.com/664</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span&gt;Serial Communication &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;개요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;한번에 한 바이트 또는 그 이상의 데이터를 한꺼번에 주고 받는 병렬 통신과 달리 직렬 통신은 데이터를 한 비트씩 순차적으로 주고 받는 통신 방법이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;병렬 통신과 비교할 때 직렬 통신은 상대적으로 속도는 느리지만 통신에 필요한 선의 수가 적어서 구조가 단순하다는 장점을 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;두세 가닥의 선만으로 양방향 통신이 가능하므로 직렬 통신을 사용하는&lt;span&gt;&amp;nbsp;IC&lt;/span&gt;는 병렬 통신을 사용하는&lt;span&gt;&amp;nbsp;IC&lt;/span&gt;에 비해 핀의 수가 적다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 이유로&lt;span&gt;&amp;nbsp;DAC, ADC, EEPROM&amp;nbsp;&lt;/span&gt;등의 매우 다양한 종류의 장치들이 직렬 통신을 사용하여 마이크로프로세서와 데이터를 주고 받는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;또한 대부분의 마이크로컨트롤러는 두 가지 이상의 직렬 통신 인터페이스를 가지고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;직렬 통신은 데이터를 한 비트씩 순차적으로 보내기 때문에 어느 시점부터 어느 시점 까지가 한 비트인지 수신자가 정확하게 알아낼 방법이 필요하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;아래 그림을 보자&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;313&quot; height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDQlKz/btqv4s5Zw81/8o0DZqWGBD52G4P88OeQrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDQlKz/btqv4s5Zw81/8o0DZqWGBD52G4P88OeQrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDQlKz/btqv4s5Zw81/8o0DZqWGBD52G4P88OeQrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDQlKz%2Fbtqv4s5Zw81%2F8o0DZqWGBD52G4P88OeQrK%2Fimg.png&quot; width=&quot;313&quot; height=&quot;142&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;신호의 상태를 어떤 시점에서 검사하느냐에 따라 동일한 신호가 여러 다른 값으로 해석될 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;송신 측에서 보낸 데이터를 수신한 쪽에서도 같은 값으로 인식하려면 송신자가 데이터를 보낼 때 사용한 시간 정보를 수신자도 알아야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;즉&lt;span&gt;,&amp;nbsp;&lt;/span&gt;송신자와 수신자는 서로 동기를 맞추어야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;수신자가 송신자와 상호 동기를 맞추기 위한 한가지 방법은 동기를 위한 &lt;span&gt;Clock &lt;/span&gt;신호를 추가로 사용하는 것이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 용도의 &lt;span&gt;Clock &lt;/span&gt;신호 사용 여부에 따라서 직렬 통신을 크게 동기&lt;span&gt;&amp;nbsp;(synchronous)&amp;nbsp;&lt;/span&gt;통신과 비동기&lt;span&gt;&amp;nbsp;(asynchronous)&amp;nbsp;&lt;/span&gt;통신으로 구분할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;동기&lt;span&gt;&amp;nbsp;(Synchronous)&amp;nbsp;&lt;/span&gt;통신과 비동기&lt;span&gt;&amp;nbsp;(Asynchronous)&amp;nbsp;&lt;/span&gt;통신&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;동기 통신은 데이터 전송을 위한 선 외에 송신자와 수신자의 동기를 위한 별도의 &lt;span&gt;Clock &lt;/span&gt;신호를 사용하는 통신 방법이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;동기 통신에서 송신자와 수신자는 서로 공유하는 &lt;span&gt;Clock &lt;/span&gt;신호에 맞추어 데이터를 주고 받는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일 송신자가 &lt;span&gt;Clock &lt;/span&gt;신호의 하강 &lt;span&gt;Edge&amp;nbsp;(falling edge)&lt;/span&gt;마다 한 비트씩의 데이터를 내보낸다면&lt;span&gt;,&amp;nbsp;&lt;/span&gt;하강 &lt;span&gt;Edge&lt;/span&gt;에서 다음 하강 &lt;span&gt;Edge&lt;/span&gt;까지가 한 비트에 해당하므로 수신자는 데이터가 변하지 않고 안정된 값을 유지하는 구간&lt;span&gt;,&amp;nbsp;&lt;/span&gt;예를 들어 상승 &lt;span&gt;Edge&lt;/span&gt;에서 값을 읽어가면 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;360&quot; height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVsldx/btqv0xnnH4v/iJdxK65KDg5K5B2UYGgLfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVsldx/btqv0xnnH4v/iJdxK65KDg5K5B2UYGgLfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVsldx/btqv0xnnH4v/iJdxK65KDg5K5B2UYGgLfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVsldx%2Fbtqv0xnnH4v%2FiJdxK65KDg5K5B2UYGgLfk%2Fimg.png&quot; width=&quot;360&quot; height=&quot;133&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;동기를 위한 &lt;span&gt;Clock &lt;/span&gt;신호에 맞추어 서로 데이터를 교환하기 때문에 통신에 참여하고 있는 양측은 정확한 통신 속도에 대해 미리 약속할 필요가 없다&lt;span&gt;.&amp;nbsp;Clock &lt;/span&gt;신호가 데이터 전송 시점을 알려주기 때문이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;하지만 &lt;span&gt;Clock &lt;/span&gt;신호의 어떤 시점을 기준으로 송신자가 데이터를 보내는지&lt;span&gt;,&amp;nbsp;&lt;/span&gt;즉 수신자는 &lt;span&gt;Clock &lt;/span&gt;신호의 어떤 &lt;span&gt;Edge&lt;/span&gt;에서 데이터를 읽어야 하는지에 대해서는 상호간의 약속이 필요하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;또한 정확한 통신 속도에 대해서는 미리 약속할 필요 없지만 최고 속도에 대한 제한은 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;너무 빠른 속도로 데이터를 보내면 수신자가 이를 제대로 수신할 수 없기 때문이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;나중에 설명할&lt;span&gt;&amp;nbsp;SPI&lt;/span&gt;와&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;프로토콜은 임베디드 시스템에서 가장 많이 사용되고 있는 동기 통신 규격이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;반면에 비동기 통신은 동기를 맞추기 위한 별도의 &lt;span&gt;Clock &lt;/span&gt;신호 없이 데이터를 주고 받는 방법이다&lt;span&gt;.&amp;nbsp;Clock &lt;/span&gt;신호가 없기 때문에 송신자는 한 바이트의 데이터를 전송하기 직전에 통신의 시작을 알리는 시작 비트&lt;span&gt;&amp;nbsp;(start bit)&lt;/span&gt;를 먼저 보내 데이터의 전송이 시작된다는 것을 수신자에게 알린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 비트를 보낸 다음부터 데이터를 한 비트씩 보내고 마지막에는 통신의 끝을 알리는 정지 비트&lt;span&gt;&amp;nbsp;(stop bit)&lt;/span&gt;를 보내 통신이 끝났음을 알린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 비트는 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;이며 정지 비트는 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;439&quot; height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIIN0/btqvZYZ4DoP/tle4cGdfcHWg95pfuiIUPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIIN0/btqvZYZ4DoP/tle4cGdfcHWg95pfuiIUPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIIN0/btqvZYZ4DoP/tle4cGdfcHWg95pfuiIUPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIIN0%2FbtqvZYZ4DoP%2Ftle4cGdfcHWg95pfuiIUPk%2Fimg.png&quot; width=&quot;439&quot; height=&quot;62&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;정지 비트가 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이므로 데이터 전송이 없는 상태에서 통신 선로는 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;을 유지하고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러므로 통신 선로의 상태가 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;을 유지하고 있다가 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 바뀌면 수신자는 이것으로부터 새로운 데이터의 전송이 시작됨을 인식한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이와 같이 데이터를 전송할 때마다 시작과 끝을 알리는 시작 비트와 정지 비트를 추가로 보내기 때문에 동기용 &lt;span&gt;Clock &lt;/span&gt;없이도 데이터의 송수신이 가능하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;하지만 이 경우에는 서로 정확한 통신 속도를 약속하고 있어야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;통신의 시작을 뜻하는 시작 비트를 받으면 수신자는 이 때부터 미리 약속한 통신 속도에 맞추어 데이터를 한 비트씩 읽어 들이기 때문이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;직렬 통신에서의 통신 속도는 보통&lt;span&gt;&amp;nbsp;bps (bits per second)&lt;/span&gt;라는 단위로 표현하는데 이 단위는 초당 전송되는 비트 수를 나타낸다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;몇&lt;span&gt;&amp;nbsp;bps&lt;/span&gt;의 속도로 통신할 것인가가 정해지면 한 비트의 시간 폭이 결정된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;통신 속도를 알고 있어야만 시작 비트를 받은 수신자가 그 이후 데이터를 한 비트씩 읽어 들이는 속도를 결정할 수 있다&lt;span&gt;. PC&lt;/span&gt;의 직렬 포트에 사용되는&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;표준은 비동기 통신 프로토콜의 대표적인 예다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;동기 통신과 비동기 통신은 각각 장단점을 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;동기 통신과 달리 비동기 통신은 &lt;span&gt;Clock &lt;/span&gt;신호를 사용하지 않기 때문에 통신에 필요한 선의 수가 더 적다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;송신용 선과 수신용 선 두 가닥이 있으면 두 주체가 동시에 데이터를 주고 받는 양방향 통신&lt;span&gt;,&amp;nbsp;&lt;/span&gt;즉 전이중&lt;span&gt;&amp;nbsp;(full duplex)&amp;nbsp;&lt;/span&gt;통신이 가능하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반면에 통신 속도 측면에서는 동기 통신이 더 유리하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;동기 통신에서는 동기를 위한 별도의 &lt;span&gt;Clock &lt;/span&gt;신호가 있으므로 데이터 길이의 제한 없이 한 바이트 이상의 데이터를 끊김 없이 연속해서 보낼 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;하지만 비동기 통신에서는 시작 비트와 정지 비트가 추가로 필요하므로 데이터만 연속해서 보낼 수 없다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;한 바이트의 데이터를 전송하기 위해서는 시작 비트와 정지 비트를 포함해서 적어도&lt;span&gt;&amp;nbsp;10&amp;nbsp;&lt;/span&gt;비트를 전송해야 하므로 상대적으로 효율이 떨어진다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이런 점 이외에도 동기 통신과 비동기 통신에는 또 다른 큰 차이가 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;비동기 통신을 사용할 때에는 통신에 참여하는 두 주체가 서로 대등한 관계에서 일대일 통신을 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 구조에서는 양쪽 모두 원하는 때에 언제든지 데이터를 보낼 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반면에 동기 통신에서는 두 주체 사이에 주종 관계가 있어 한쪽이 통신의 주도권을 가지는 &lt;span&gt;Master,&amp;nbsp;&lt;/span&gt;다른 쪽은 &lt;span&gt;Slave&lt;/span&gt;로 동작한다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 통신에 필요한 &lt;span&gt;Clock&lt;/span&gt;을 출력하며 &lt;span&gt;Slave&lt;/span&gt;는 &lt;span&gt;Master&lt;/span&gt;가 출력하는 &lt;span&gt;Clock &lt;/span&gt;신호에만 반응할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 데이터의 전송 방향에 상관없이 항상 &lt;span&gt;Master&lt;/span&gt;가 통신을 주도한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마이크로프로세서와 여러 주변 장치&lt;span&gt;&amp;nbsp;(peripheral)&amp;nbsp;&lt;/span&gt;사이의 통신에는 이러한 &lt;span&gt;Master-Slave &lt;/span&gt;기반의 동기 통신이 많이 사용되는데 이 때 당연히 프로세서는 &lt;span&gt;Master&lt;/span&gt;로&lt;span&gt;,&amp;nbsp;&lt;/span&gt;주변 장치는 &lt;span&gt;Slave&lt;/span&gt;로 동작하게 된다&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;직렬 통신은 프로토콜이 다양하기 때문에 대부분의 마이크로컨트롤러는 두 가지 이상의 직렬 통신 인터페이스를 지원한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그 중에서도&lt;span&gt;&amp;nbsp;UART, I2C, SPI&lt;/span&gt;는 가장 자주 사용되는 대표적인 예라고 할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;UART&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 개요&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;는&lt;span&gt;&amp;nbsp;Universal Asynchronous Receiver/Transmitter&lt;/span&gt;의 머리글자로서 비동기 통신을 위한 전용 하드웨어를 뜻한다&lt;span&gt;. UART&lt;/span&gt;가 없다면 비동기 통신 프로토콜을 프로그램으로 직접 구현해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터를 송신하려면 프로세서가 타이머를 사용하여 미리 정한 직렬 통신 속도에 맞추어 병렬 데이터를 한 비트씩 출력 핀으로 내보내야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;물론 시작 비트와 정지 비트도 함께 출력해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;수신의 경우는 조금 더 어렵다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;수신 핀의 상황을 계속 검사하거나 또는 인터럽트를 사용하여 시작 비트가 수신되는지 여부를 확인해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그리고 일단 시작 비트의 수신이 확인되면 그때부터 정해진 통신 속도에 맞추어 한 비트씩 값을 읽어 저장해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 작업은 어렵지는 않지만 매우 번거롭기도 하고 마이크로프로세서가 다른 일을 할 수 있는 시간을 뺏는 결과를 가져온다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;는 비동기 통신에 필요한 이런 직렬&lt;span&gt;-&lt;/span&gt;병렬 데이터 변환 작업을 자동으로 해주는 하드웨어 장치이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그렇기 때문에 비동기 통신을 해야 한다면&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;가 꼭 필요하다고 할 수 있다&lt;span&gt;. PC&lt;/span&gt;에는&lt;span&gt;&amp;nbsp;16550&lt;/span&gt;이라는 이름의&lt;span&gt;&amp;nbsp;UART IC&lt;/span&gt;가 사용되는데 이처럼&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;가 독립된 제품으로 판매되기도 하지만 거의 대부분의 마이크로컨트롤러는 내부에 하나 이상의&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;를 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일 마이크로컨트롤러가 가지고 있는&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;의 수보다 더 많은 비동기 통신 채널이 필요하다면 외부에&lt;span&gt;&amp;nbsp;UART IC&lt;/span&gt;를 추가로 연결해서 사용하면 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;에는 적어도 네 개 정도의 레지스터가 포함되어 있으며 각 레지스터의 주소는&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;의 기본 주소&lt;span&gt;&amp;nbsp;(base address)&lt;/span&gt;에 옵셋&lt;span&gt;&amp;nbsp;(offset)&amp;nbsp;&lt;/span&gt;값을 더한 값으로 정의된다&lt;span&gt;. CPU&lt;/span&gt;는&lt;span&gt;&amp;nbsp;UART&amp;nbsp;&lt;/span&gt;레지스터에 값을 쓰거나 레지스터 값을 읽는 방법으로 간단하게 비동기 통신을 진행할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다음은&lt;span&gt;UART&lt;/span&gt;의 동작에 반드시 필요한 레지스터들이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마이크로컨트롤러에 따라 이 레지스터들의 이름은 조금씩 다를 수도 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;TxD (&lt;/span&gt;송신 데이터&lt;span&gt;)&amp;nbsp;&lt;/span&gt;레지스터&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;로 송신할 데이터를 쓰기 위한 레지스터이다&lt;span&gt;. CPU&lt;/span&gt;가 이 레지스터에 값을 기록하면 미리 정해둔 직렬 통신 속도 및 다른 여러 설정에 맞추어 그 값이 한 비트씩 직렬로 출력된다&lt;span&gt;. TxD&amp;nbsp;&lt;/span&gt;레지스터에 어떤 값을 기록하면 이 시점부터 마지막 비트가 출력될 때까지 시간이 걸리므로 이전에 기록한 값의 송신이 완료되기 전에&lt;span&gt;&amp;nbsp;TxD&amp;nbsp;&lt;/span&gt;레지스터에 새로운 값을 기록하면 안 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이전 데이터의 송신이 완료되었는지 여부는 상태 레지스터를 읽어 확인할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;RxD (&lt;/span&gt;수신&lt;span&gt;)&amp;nbsp;&lt;/span&gt;레지스터&lt;/span&gt;&lt;br /&gt;&lt;span&gt;수신용 핀으로 한 비트씩 입력되어 수신 완료된 데이터가 저장되는 레지스터이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;상태 레지스터를 읽어서 새로운 데이터가 수신되었다는 것을 확인하면&lt;span&gt;&amp;nbsp;CPU&lt;/span&gt;는 이 레지스터의 값을 읽으면 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 레지스터에 저장된 값은 다음 데이터가 수신되는 동안은 그대로 유지되지만 다음 데이터의 수신이 완료되는 순간 새로운 값으로 갱신된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 데이터 손실을 막기 위해서는 다음 데이터의 수신이 완료되기 전까지는&lt;span&gt;&amp;nbsp;CPU&lt;/span&gt;가 이 레지스터의 값을 읽어 저장해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;제어&lt;span&gt;&amp;nbsp;(control)&amp;nbsp;&lt;/span&gt;레지스터&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;의 동작에 필요한 여러 설정을 하기 위한 레지스터이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;정지 비트의 길이&lt;span&gt;,&amp;nbsp;&lt;/span&gt;패리티&lt;span&gt;&amp;nbsp;(parity)&amp;nbsp;&lt;/span&gt;비트의 사용 유무&lt;span&gt;,&amp;nbsp;&lt;/span&gt;통신에 사용할 패킷의 길이 등을 설정한다&lt;span&gt;. UART&lt;/span&gt;를 동작시키기 전에 반드시 제어 레지스터를 적절하게 설정해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;상태&lt;span&gt;&amp;nbsp;(status)&amp;nbsp;&lt;/span&gt;레지스터&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;의 상태를 나타내는 레지스터이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;상태 레지스터의 각 비트는 특정한 의미를 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;예를 들면&lt;span&gt;,&amp;nbsp;&lt;/span&gt;수신 완료&lt;span&gt;&amp;nbsp;(receive complete)&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;1&lt;/span&gt;이면 새로운 데이터가 수신되어&lt;span&gt;&amp;nbsp;RxD&amp;nbsp;&lt;/span&gt;레지스터에 저장되어 있음을 뜻하며&lt;span&gt;,&amp;nbsp;&lt;/span&gt;송신 완료&lt;span&gt;&amp;nbsp;(transmit complete)&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;1&lt;/span&gt;이면&lt;span&gt;&amp;nbsp;TxD&lt;/span&gt;에 저장한 값의 출력이 완료되었음을 뜻한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 외에도&lt;span&gt;&amp;nbsp;TxD&amp;nbsp;&lt;/span&gt;레지스터가 비어 있는지 여부를 알려주는 비트를 가지고 있기도 하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;상태 레지스터의 각 비트는 인터럽트와 연결되어 있어서 인터럽트가 활성화되어 있다면 어떤 비트가&lt;span&gt;&amp;nbsp;1&lt;/span&gt;로 설정되는 순간 해당 인터럽트 핸들러&lt;span&gt;(interrupt handler)&lt;/span&gt;가 자동으로 호출된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;baud rate&amp;nbsp;&lt;/span&gt;설정 레지스터&lt;/span&gt;&lt;br /&gt;&lt;span&gt;직렬 통신의 속도인 보&lt;span&gt;&amp;nbsp;(baud)&amp;nbsp;&lt;/span&gt;값을 설정하기 위한 레지스터이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;여기에 설정한 통신 속도에 따라 직렬&lt;span&gt;-&lt;/span&gt;병렬 변환 속도가 결정된다&lt;span&gt;. baud&amp;nbsp;&lt;/span&gt;값은 통신에서의 변조율&lt;span&gt;&amp;nbsp;(modulation rate)&lt;/span&gt;을 나타내는 단위이므로&lt;span&gt;&amp;nbsp;baud rate&lt;/span&gt;는 초당 전송되는 비트의 수를 뜻하는&lt;span&gt;&amp;nbsp;bps&lt;/span&gt;와는 의미가 다르다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러나 한 심볼&lt;span&gt;&amp;nbsp;(symbol)&lt;/span&gt;이 한 비트에 해당할 때&lt;span&gt;&amp;nbsp;baud&amp;nbsp;&lt;/span&gt;값과&lt;span&gt;&amp;nbsp;bps&amp;nbsp;&lt;/span&gt;값은 같기 때문에 유선 통신에서는 흔히&lt;span&gt;&amp;nbsp;bps&lt;/span&gt;와 구분 없이 사용되고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;직렬 통신의 비트율 즉&lt;span&gt;, baud rate&lt;/span&gt;가 정해지면 한 비트의 시간 폭이 결정된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;예를 들어 통신 속도를&lt;span&gt;&amp;nbsp;38,400 baud&lt;/span&gt;로 한다면 한 비트의 시간 폭은&lt;span&gt;&amp;nbsp;1/38,400&amp;nbsp;&lt;/span&gt;초가 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 비트와 정지 비트가 각&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;비트씩이라면 한 바이트의 데이터를 송신하는데&lt;span&gt;&amp;nbsp;1/3,840&amp;nbsp;&lt;/span&gt;초가 걸린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;사용자가 지정한&lt;span&gt;&amp;nbsp;baud rate&lt;/span&gt;에 맞추어&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;가 직렬&lt;span&gt;-&lt;/span&gt;병렬 데이터 변환을 하려면 타이머&lt;span&gt;&amp;nbsp;(&lt;/span&gt;카운터&lt;span&gt;)&lt;/span&gt;가 반드시 필요하다&lt;span&gt;. baud rate&lt;/span&gt;에 비례하는 주파수를 가진 신호가 있어야 하기 때문이다&lt;span&gt;. 8051&amp;nbsp;&lt;/span&gt;계열 마이크로컨트롤러에서는 내부 타이머 중 하나가 이 용도로 지정되어 있어 직렬 통신을 사용할 때 그 타이머는 다른 용도로 사용할 수 없다&lt;span&gt;. AVR&amp;nbsp;&lt;/span&gt;마이크로컨트롤러의 경우에는 사용자가 프로그래밍 가능한 타이머 이외에&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;용의 전용 카운터가 따로 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;UART&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 타이밍&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;구현 방법에 따라 조금씩 다르지만 많은 경우&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 사용자가 지정한 통신 비트율보다&lt;span&gt;&amp;nbsp;16&amp;nbsp;&lt;/span&gt;배 높은 주파수의 내부 신호를 사용한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 내부 신호는 일반적으로&lt;span&gt;&amp;nbsp;CPU&lt;/span&gt;를 위한 오실레이터 입력을 카운터로 분주해서 만든다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이 내부 신호의 주파수는 사용자가 설정한 통신 비트율보다&lt;span&gt;&amp;nbsp;16&amp;nbsp;&lt;/span&gt;배 높기 때문에 데이터 한 비트의 시간 폭은 내부 신호의&lt;span&gt;&amp;nbsp;16&amp;nbsp;Clock Cycle(cycle)&lt;/span&gt;과 같다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터를 전송할 때에는 먼저 시작 비트를 출력하고 이 때부터 내부 신호&lt;span&gt;&amp;nbsp;16&amp;nbsp;Clock Cycle&lt;/span&gt;마다 한 비트씩을 출력하면 된다&lt;span&gt;. UART&lt;/span&gt;의 송신부만 생각한다면 통신 비트율의&lt;span&gt;&amp;nbsp;16&lt;/span&gt;배나 되는 높은 주파수가 필요할 것 같지는 않다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이렇게 높은 주파수의 신호가 필요한 것은 수신부 때문이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;396&quot; height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6hh5d/btqv0en8HOI/ASiA0CgVJg7gXSeuweOKB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6hh5d/btqv0en8HOI/ASiA0CgVJg7gXSeuweOKB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6hh5d/btqv0en8HOI/ASiA0CgVJg7gXSeuweOKB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6hh5d%2Fbtqv0en8HOI%2FASiA0CgVJg7gXSeuweOKB0%2Fimg.png&quot; width=&quot;396&quot; height=&quot;205&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;의 수신부는 수신 신호의 상태가 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;에서 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 변하는 하강 &lt;span&gt;Edge,&amp;nbsp;&lt;/span&gt;즉 시작 비트를 기다린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;하강 &lt;span&gt;Edge&lt;/span&gt;를 검출하면&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 이 때부터 카운터를 사용하여 내부 신호의 펄스 수를 세기 시작한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;신호의 각 비트가 변하는 순간은 전압이 불안정하므로&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 가능하면 각 데이터 비트의 한 가운데에서 입력의 논리 값을 읽는 것이 안정적이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 비트가 검출된 시점부터 내부 신호의&lt;span&gt;&amp;nbsp;8&amp;nbsp;Clock Cycle &lt;/span&gt;지점이 시작 비트의 한 가운데에 해당하고 이 시점부터 매&lt;span&gt;&amp;nbsp;16&amp;nbsp;Clock Cycle &lt;/span&gt;시점이 각 데이터 비트의 한 가운데가 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;우선 시작 비트가 검출된 순간 이후&lt;span&gt;&amp;nbsp;8&amp;nbsp;Clock Cycle &lt;/span&gt;지점에서 시작 비트의 상태를 다시 검사한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일 이 값이 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;이 아니라면&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 이것이 글리치&lt;span&gt;&amp;nbsp;(glitch)&amp;nbsp;&lt;/span&gt;의한 가짜 시작 비트&lt;span&gt;&amp;nbsp;(spurious start bit)&lt;/span&gt;라고 판단하고 이를 무시한 다음 다시 시작 비트를 기다린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;정상적인 시작 비트라고 판단되면&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 매 데이터 비트의 한 가운데 지점에서 신호의 상태를 세 번 검사한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;즉 내부 신호의&lt;span&gt;&amp;nbsp;7, 8, 9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Cycle &lt;/span&gt;시점에서 각 비트의 상태를&lt;span&gt;&amp;nbsp;3&lt;/span&gt;번 읽어서 두 번 이상 검출된 논리 값을 그 비트의 값으로 판단한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;물론 시작 비트의 상태 역시 내부 신호의&lt;span&gt;&amp;nbsp;7, 8, 9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Cycle &lt;/span&gt;시점에서 세 차례 검사할 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이렇게 함으로써&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;는 잡음에 의한 영향을 줄여 통신 선로에서 발생할 수 있는 오류의 확률을 낮춘다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;의 동작에 필요한 내부 신호는 보통&lt;span&gt;&amp;nbsp;CPU&lt;/span&gt;용 외부 오실레이터 입력을 분주해서 만드는데 송신부와 수신부가 사용하는 오실레이터 주파수가 다른 경우에는&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;의 송신 타이밍과 수신 타이밍이 정확하게 일치하지 않는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;비동기 통신에서는 매 데이터마다 시작 비트를 가지고 있어서 시작 비트부터 매번 동기를 새로 맞추기 때문에 송신 비트율과 수신 비트율의 차이가 있다 하더라도 허용 가능한 범위를 초과하지 않으면 통신 오류가 발생하지 않는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러면 허용 가능 주파수 차이의 한계에 대해 생각해보자&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;앞에서 설명했듯이&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;의 수신부는 각 데이터 비트의 한 가운데에서 신호의 논리 값을 읽는 것이 바람직하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그런데 송신 비트율이 수신 비트율에 비해 높다면 수신부는 각 데이터 비트의 한 가운데 이후에 그 값을 읽게 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반대로 송신부 비트율이 더 낮은 경우에 수신부는 각 비트의 한 가운데보다 이전에 값을 읽게 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 오차는 시작 비트부터 계속 누적되므로 이 정지 비트에서 가장 큰 타이밍 오차가 발생한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그렇기 때문에 정지 비트를 검출하는데 오류를 일으키지 않는 범위의 송&amp;middot;수신 주파수 차이는 비동기 통신에 문제를 야기하지 않는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;정지 비트의 한 가운데는 정지 비트의 시작부터&lt;span&gt;&amp;nbsp;8&amp;nbsp;Clock Cycle &lt;/span&gt;시점인데 정지 비트의 상태를 검사하는 시점이&lt;span&gt;&amp;nbsp;8&amp;nbsp;Clock Cycle&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;plusmn;&lt;span&gt;3&amp;nbsp;Clock Cycle &lt;/span&gt;이내라면 현실적으로 타이밍 차이로 인한 오차가 생길 가능성은 거의 없다고 판단할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;송신부와 수신부가 완전히 같은 주파수로 동작한다면 수신부의 내부 신호의&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Clock Cycle &lt;/span&gt;시점이 각 비트의 한 가운데가 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 비트에서부터 내부 신호의 펄스 수를 세면&lt;span&gt;,&amp;nbsp;&lt;/span&gt;정지 비트의 한 가운데는&lt;/span&gt;&lt;br /&gt;&lt;span&gt;(16&amp;nbsp;Clock Cycle&amp;nbsp;/&amp;nbsp;&lt;/span&gt;&lt;span&gt;비트&lt;span&gt;) x (1&amp;nbsp;&lt;/span&gt;시작 비트&lt;span&gt;&amp;nbsp;+ 8&amp;nbsp;&lt;/span&gt;데이터 비트&lt;span&gt;&amp;nbsp;+ &lt;/span&gt;&amp;frac12;&lt;span&gt;&amp;nbsp;&lt;/span&gt;정지 비트&lt;span&gt;) = 152&amp;nbsp;Clock Cycle&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;따라서&lt;span&gt;&amp;nbsp;152&amp;nbsp;Clock &lt;/span&gt;당&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;plusmn;&lt;span&gt;3&amp;nbsp;Clock &lt;/span&gt;이내의 오차까지 허용 가능하므로 이를 백분율로 따지면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;plusmn;&lt;span&gt;3/152&lt;/span&gt;인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;plusmn;&lt;span&gt;2 %&lt;/span&gt;에 해당한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;결과적으로 비동기 통신에 있어&lt;span&gt;&amp;nbsp;&lt;/span&gt;송&amp;middot;수신&lt;span&gt;&amp;nbsp;&lt;/span&gt;비트율의 차이가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;plusmn;&lt;span&gt;2 %&amp;nbsp;&lt;/span&gt;이내라면 이로 인한 문제는 거의 발생하지 않는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 값은&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 단위의 데이터 전송을 가정하고 계산한 값이며 전송 단위가&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;비트 이상이라면 허용 가능한 오차의 한계는 더 감소한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;송&amp;middot;수신&lt;span&gt;&amp;nbsp;&lt;/span&gt;통신 비트율 차이를 계산하면서 단순히 양쪽에서 사용된 오실레이터의 명목상 주파수만을 고려해서는 안 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;오실레이터는 그 자체로 어느 정도의 주파수 오차를 가지고 있으며 동작 온도에 따라서도 조금씩 출력 주파수가 변하기 때문이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;비동기 통신에서 사용되는 비트율의 대표적인 예로&lt;span&gt;&amp;nbsp;37400 bps, 57600 bps, 115200 bps&amp;nbsp;&lt;/span&gt;등을 들 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마이크로컨트롤러에&lt;span&gt;&amp;nbsp;7.3728 MHz&lt;/span&gt;나&lt;span&gt;22.1184 MHz&lt;/span&gt;와 같은 특이한 주파수의 오실레이터를 연결하는 경우를 종종 볼 수 있는데 그 이유는&lt;span&gt;&amp;nbsp;37400 bps, 57600 bps, 115200 bps&amp;nbsp;&lt;/span&gt;등의 비트율을 얻기 위해서는 이러한 비트율의 정수배 주파수가 필요하기 때문이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;특히&lt;span&gt;&amp;nbsp;8051&amp;nbsp;&lt;/span&gt;계열 프로세서가 이런 주파수의 오실레이터를 자주 사용하는데 그것은&lt;span&gt;&amp;nbsp;8051&lt;/span&gt;에서는&lt;span&gt;&amp;nbsp;(&lt;/span&gt;통신 비트율&lt;span&gt;&amp;nbsp;x 16)&lt;/span&gt;의 정수배 주파수가 필요하기 때문이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;RS-232&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;표준&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;RS-232&amp;nbsp;&lt;/span&gt;&lt;span&gt;표준은 비동기 직렬 통신 프로토콜의 가장 대표적인 예이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;지금까지의 비동기 통신에 관한 설명은&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;표준의 일부이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;요즘은&lt;span&gt;USB&amp;nbsp;&lt;/span&gt;인터페이스가 많이 사용되고 있어서&lt;span&gt;&amp;nbsp;PC&lt;/span&gt;에 직렬 포트가 아예 없는 경우도 많지만 아직도&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;표준은 여전히 많이 사용되고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;임베디드 소프트웨어 개발 과정에서&lt;span&gt;&amp;nbsp;PC&lt;/span&gt;와 임베디드 시스템을&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;인터페이스로 연결하고&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;를 간단한 디버거로 활용하는 경우는 매우 흔하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;RS-232&amp;nbsp;&lt;/span&gt;&lt;span&gt;표준은 비동기 직렬 통신에 필요한 전기적인 신호 특성&lt;span&gt;&amp;nbsp;(&lt;/span&gt;전압&lt;span&gt;,&amp;nbsp;&lt;/span&gt;타이밍 등&lt;span&gt;)&lt;/span&gt;과 기계적 특성&lt;span&gt;&amp;nbsp;(&lt;/span&gt;커넥터 모양&lt;span&gt;,&amp;nbsp;&lt;/span&gt;핀 배치&lt;span&gt;)&amp;nbsp;&lt;/span&gt;등 모든 사양을 규정하고 있는 미국&lt;span&gt;&amp;nbsp;Electronic Industries Association (EIA)&lt;/span&gt;라는 단체가 정한 표준이다&lt;span&gt;. PC&lt;/span&gt;의 뒤쪽에 나와 있는 직렬 포트용&lt;span&gt;&amp;nbsp;DB-9&amp;nbsp;&lt;/span&gt;커넥터의 모양과 핀 배치도 이 표준을 따른다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;송신 신호&lt;span&gt;&amp;nbsp;(TxD)&lt;/span&gt;와 수신 신호&lt;span&gt;&amp;nbsp;(RxD)&amp;nbsp;&lt;/span&gt;이외에도 다른 용도의 여러 신호들이 이 표준에 정의되어 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러나 데이터 흐름 제어&lt;span&gt;&amp;nbsp;(flow control)&lt;/span&gt;나 반송파 검출&lt;span&gt;&amp;nbsp;(carrier detection)&amp;nbsp;&lt;/span&gt;등의 다른 기능은 사용하지 않고 순수하게 통신만 하겠다면&lt;span&gt;&amp;nbsp;TxD&lt;/span&gt;와&lt;span&gt;&amp;nbsp;RxD&amp;nbsp;&lt;/span&gt;두 신호로 충분하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;UART&lt;/span&gt;&lt;span&gt;가 있으면 비동기 통신이 가능하지만&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;의 송수신 핀을&lt;span&gt;&amp;nbsp;PC&lt;/span&gt;의 직렬 포트에 바로 연결할 수는 없다&lt;span&gt;. RS-232&amp;nbsp;&lt;/span&gt;표준에서 규정하고 있는 전압 레벨은&lt;span&gt;&amp;nbsp;TTL&amp;nbsp;&lt;/span&gt;호환&lt;span&gt;&amp;nbsp;(TTL compatible)&lt;/span&gt;이 아니기 때문이다&lt;span&gt;. RS-232&amp;nbsp;&lt;/span&gt;표준은 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;에 해당하는 전압의 범위를&lt;span&gt;&amp;nbsp;-3 V ~ -15 V&lt;/span&gt;로 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;에 해당하는 전압의 범위를&lt;span&gt;&amp;nbsp;+3 V ~ +15 V&lt;/span&gt;로 규정한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 전압은 일반 디지털 회로에서 사용되는 범위를 벗어나기 때문에&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;표준을 따르기 위해서는&lt;span&gt;&amp;nbsp;0 V ~ 3 V (&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;3.3 V&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;5 V)&amp;nbsp;&lt;/span&gt;범위의 신호를&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;레벨 신호로 변환하고 또 그 반대 방향으로도 전압을 변환해 주는 전용 회로가 필요하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 역할을 하는&lt;span&gt;&amp;nbsp;IC&lt;/span&gt;를&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;트랜시버&lt;span&gt;&amp;nbsp;(transceiver)&lt;/span&gt;라고 한다&lt;span&gt;. Maxim&lt;/span&gt;사의&lt;span&gt;&amp;nbsp;MAX232&lt;/span&gt;라는 제품이 그 대표적 예이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;453&quot; height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pHvJJ/btqv3HPQNMb/XhyHjlg0jVPSmEl6sX8sx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pHvJJ/btqv3HPQNMb/XhyHjlg0jVPSmEl6sX8sx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pHvJJ/btqv3HPQNMb/XhyHjlg0jVPSmEl6sX8sx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpHvJJ%2Fbtqv3HPQNMb%2FXhyHjlg0jVPSmEl6sX8sx1%2Fimg.png&quot; width=&quot;453&quot; height=&quot;148&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;RS-232&amp;nbsp;&lt;/span&gt;&lt;span&gt;표준에 따른 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;과 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;의 전압 차이는 최소&lt;span&gt;&amp;nbsp;6 V&lt;/span&gt;에서 최대&lt;span&gt;&amp;nbsp;30 V&lt;/span&gt;이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 일반적인 디지털 회로의 신호와 비교하면&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;표준을 따르는 신호는 잡음 여유가 매우 크다&lt;span&gt;. RS-232&amp;nbsp;&lt;/span&gt;규격에 따르면 송신측과 수신측 사이의 통신 선로의 길이는 최대&lt;span&gt;&amp;nbsp;15 m&lt;/span&gt;에 이른다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일&lt;span&gt;RS-232&amp;nbsp;&lt;/span&gt;표준을 반드시 따라라 하는 것이 아니며 송신부와 수신부가 가깝다면&lt;span&gt;&amp;nbsp;RS-232&amp;nbsp;&lt;/span&gt;트랜시버를 사용하지 않고&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;끼리 직접 연결하면 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;I2C&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 개요&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;I2C (Inter-Integrated Circuit)&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스는 마이크로프로세서와 저속 주변 장치 사이의 통신을 위한 용도로&lt;span&gt;&amp;nbsp;Philips&lt;/span&gt;에서 개발한 규격인데 두 가닥의 선을 사용하므로&lt;span&gt;&amp;nbsp;TWI (Two Wire Interface)&lt;/span&gt;라고도 불리고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;특허권 때문인지 잘 모르겠으나&lt;span&gt;&amp;nbsp;Philips&amp;nbsp;&lt;/span&gt;이외의 회사들은 거의 대부분&lt;span&gt;&amp;nbsp;TWI&lt;/span&gt;라고 부른다&lt;span&gt;. I2C&amp;nbsp;&lt;/span&gt;버스는 양방향 오픈 드레인 선인&lt;span&gt;&amp;nbsp;SCL (serial clock)&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA (serial data)&lt;/span&gt;로 이루어져 있으며 &lt;span&gt;Master-Slave &lt;/span&gt;형태로 동작한다&lt;span&gt;. SCL&lt;/span&gt;은 통신의 동기를 위한 &lt;span&gt;Clock&lt;/span&gt;용 선이고&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;는 데이터용 선이다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;로 동기를 위한 &lt;span&gt;Clock&lt;/span&gt;을 출력하며 &lt;span&gt;Slave&lt;/span&gt;는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;로 출력되는 &lt;span&gt;Clock&lt;/span&gt;에 맞추어&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;를 통해 데이터를 출력하거나 입력 받는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;단지&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;한 선으로만 데이터를 주고 받기 때문에&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스는 반이중&lt;span&gt;&amp;nbsp;(half duplex)&amp;nbsp;&lt;/span&gt;통신만 가능하다&lt;span&gt;. SCL&amp;nbsp;&lt;/span&gt;선과&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;선은 모두 오픈 드레인므로 두 선에는 각각 풀업 저항을 연결해 주어야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다음 그림은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Master&lt;/span&gt;와 &lt;span&gt;Slave&lt;/span&gt;들 사이의 연결을 보여주고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;379&quot; height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn9hCc/btqv4sx9BMS/GjgzcX2gKaDkpRjQgOB6iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn9hCc/btqv4sx9BMS/GjgzcX2gKaDkpRjQgOB6iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn9hCc/btqv4sx9BMS/GjgzcX2gKaDkpRjQgOB6iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn9hCc%2Fbtqv4sx9BMS%2FGjgzcX2gKaDkpRjQgOB6iK%2Fimg.png&quot; width=&quot;379&quot; height=&quot;154&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;모든&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Master&lt;/span&gt;와 &lt;span&gt;Slave &lt;/span&gt;장치들의&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;은 서로 연결되며&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;또한 서로 연결된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;모든 장치들이&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;를 각각 공유하고 있으므로 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;를 개별적으로 지정하기 위한 방법이 있어야 한다&lt;span&gt;. I2C&amp;nbsp;&lt;/span&gt;버스에서 &lt;span&gt;Master&lt;/span&gt;가 각 &lt;span&gt;Slave&lt;/span&gt;를 구분하는 수단은 &lt;span&gt;Slave&lt;/span&gt;의 주소이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;모든&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Slave &lt;/span&gt;장치들은&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트의 고유한 주소를 가지고 있으며 &lt;span&gt;Master&lt;/span&gt;는 주소로 원하는 &lt;span&gt;Slave&lt;/span&gt;를 지정한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;주소의 길이가&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트이므로 &lt;span&gt;Master&lt;/span&gt;는 최대&lt;span&gt;&amp;nbsp;128&amp;nbsp;&lt;/span&gt;개의 &lt;span&gt;Slave &lt;/span&gt;장치들과 연결될 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;물론 &lt;span&gt;Slave &lt;/span&gt;장치들의 주소는 모두 달라야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;앞의 그림에는 &lt;span&gt;Master&lt;/span&gt;가 하나 밖에 없지만&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스에 두 개 이상의 &lt;span&gt;Master&lt;/span&gt;들이 존재할 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;버스에 연결된 장치의 수가 아무리 많아도 한 순간에는 오직 하나의 &lt;span&gt;Master&lt;/span&gt;와 하나의 &lt;span&gt;Slave&lt;/span&gt;만이 통신할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;현재 통신을 진행하고 있는 &lt;span&gt;Master&lt;/span&gt;가 버스 소유권을 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;두 개 이상의 &lt;span&gt;Master&lt;/span&gt;가 있는 경우에 현재 버스의 소유권을 가지고 있는 &lt;span&gt;Master &lt;/span&gt;및 &lt;span&gt;Master&lt;/span&gt;와 통신을 진행하고 있는 &lt;span&gt;Slave &lt;/span&gt;장치 이외의 나머지 장치들은 이들의 통신을 방해하지 않아야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;SCL&lt;/span&gt;&lt;span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;는 모두 오픈 드레인이므로 모든 장치들의&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;는 각각 와이어드&lt;span&gt;&amp;nbsp;AND&lt;/span&gt;로 연결 되어 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;와이어드&lt;span&gt;&amp;nbsp;AND&amp;nbsp;&lt;/span&gt;연결에서는 어느 한 장치라도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하면 해당 신호의 상태는 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;이 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이나&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;에 연결되어 있는 어떤 장치가 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력한다면 다른 장치가 그 신호의 상태를 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 만들 수 있는 방법은 없다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;통신에 참여하지 않은 장치가&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이나&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하면 &lt;span&gt;Master&lt;/span&gt;가 정상적으로 통신을 진행할 수 없다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이것은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스에 연결되어 있지만 현재 통신에 참여하지 않고 있는 장치들은 모두 자신의 출력을 플로우팅 상태로 유지해야 한다는 것을 뜻한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;통신이 진행되지 않는 상황에서 모든 장치의 출력은 플로우팅 상태이므로&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 상태는 모두 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 상황에서&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스의 사용을 원하는 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로 시작 조건을 출력하며 버스 소유권을 주장하고 통신을 시작할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;두 신호의 상태가 모두 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이 아니라면 현재 다른 &lt;span&gt;Master&lt;/span&gt;가 버스 소유권을 가지고 통신을 진행 중에 있다는 것을 뜻하므로 그 &lt;span&gt;Master&lt;/span&gt;가 버스 소유권을 반납할 때까지는 다른 &lt;span&gt;Master&lt;/span&gt;가 새로운 통신을 시작해서는 안 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다음 그림은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;프로토콜의 시작 조건&lt;span&gt;,&amp;nbsp;&lt;/span&gt;정지 조건&lt;span&gt;,&amp;nbsp;&lt;/span&gt;그리고 데이터 안정 구간을 보여주고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;409&quot; height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yQ3Ij/btqv15KE8Gz/lKmfkgmdpmSLf2IJUYIOyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yQ3Ij/btqv15KE8Gz/lKmfkgmdpmSLf2IJUYIOyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yQ3Ij/btqv15KE8Gz/lKmfkgmdpmSLf2IJUYIOyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQ3Ij%2Fbtqv15KE8Gz%2FlKmfkgmdpmSLf2IJUYIOyk%2Fimg.png&quot; width=&quot;409&quot; height=&quot;166&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;프로토콜에서&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;인 구간에서는&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 상태 변화가 허용되지만&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 구간에서는&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;는 안정된 논리 상태를 유지해야 한다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;로 데이터를 출력할 때&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;인 구간에서&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 비트 전환을 하며&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 구간에서는&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 상태를 그대로 유지한다&lt;span&gt;.&amp;nbsp;Slave&lt;/span&gt;가 데이터를 출력하고 &lt;span&gt;Master&lt;/span&gt;가 그 데이터를 읽을 때에도 마찬가지이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그래서&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 구간은 데이터가 안정한 구간이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;프로토콜에서&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;을 유지하고 있는 구간에서&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 상태가 변하는 것은 일반 데이터 전송이 아닌 특별한 조건을 의미한다&lt;span&gt;. SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 동안&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 바뀌는 것을 시작 조건&lt;span&gt;&amp;nbsp;(start condition, S)&lt;/span&gt;이라고 하며&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 동안&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 바뀌는 것을 정지 조건&lt;span&gt;&amp;nbsp;(stop condition, P)&lt;/span&gt;이라고 한다&lt;span&gt;. I2C&amp;nbsp;&lt;/span&gt;통신을 원하는 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;가 모두 논리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;일 때&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 상태를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 바꾸어 시작 조건을 출력하며 다른 장치들에게 통신의 시작을 알린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마찬가지로 통신을 끝낼 때에는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 동안&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 바꾸어 정지 조건을 출력하며 버스 소유권의 반납을 다른 장치에게 알린다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;I2C&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 패킷 형식&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;다음 그림은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스에서 사용되는 데이터 패킷의 형식을 보여준다&lt;span&gt;. ACK&lt;/span&gt;을 포함한&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;규격에서 통신의 기본 단위가 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;360&quot; height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3ExKw/btqvZYMztvj/49WJSMm2SXpctV8Vcr0A6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3ExKw/btqvZYMztvj/49WJSMm2SXpctV8Vcr0A6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3ExKw/btqvZYMztvj/49WJSMm2SXpctV8Vcr0A6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3ExKw%2FbtqvZYMztvj%2F49WJSMm2SXpctV8Vcr0A6K%2Fimg.png&quot; width=&quot;360&quot; height=&quot;122&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;Master&lt;/span&gt;&lt;span&gt;는&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;가 모두&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 상태에서&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 바꾸어&lt;span&gt;,&amp;nbsp;&lt;/span&gt;즉 시작 조건을 출력하면서 통신의 시작을 알린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;시작 조건 이후부터는&lt;span&gt;SCL&lt;/span&gt;의 상태가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;인 구간에서만&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;의 논리 값이 바뀐다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;SCL&lt;/span&gt;로 출력하는 &lt;span&gt;Clock&lt;/span&gt;에 동기를 맞추어&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로는 데이터가&lt;span&gt;&amp;nbsp;MSB&lt;/span&gt;부터 한 비트씩 출력된다&lt;span&gt;. SCL&lt;/span&gt;은 항상 &lt;span&gt;Master&lt;/span&gt;가 출력하는 신호이지만&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;는 현재의 동작이 &lt;span&gt;Master&lt;/span&gt;의 읽기냐 쓰기냐에 따라 &lt;span&gt;Master&lt;/span&gt;의 출력일 수도 &lt;span&gt;Slave&lt;/span&gt;의 출력일 수도 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;8&amp;nbsp;&lt;/span&gt;&lt;span&gt;비트 데이터가&lt;span&gt;&amp;nbsp;8&amp;nbsp;Clock Cycle &lt;/span&gt;동안&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로 출력되면 그 데이터를 수신한 쪽에서&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Clock&lt;/span&gt;에 맞추어 그&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 데이터의 수신 여부를 확인해 주는&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다시 말해서&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트는 직전의&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 정보를 수신한 쪽에서 그 정보의 송신자에게 직전&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 정보에 대한 수신 여부를 확인하는 값이다&lt;span&gt;. ACK&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;이면 정상 수신을 나타내며&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이면&lt;span&gt;&amp;nbsp;(&lt;/span&gt;항상 그런 것은 아니지만&lt;span&gt;)&amp;nbsp;&lt;/span&gt;정상 수신이 아님을 나타낸다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;값이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;인&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트와 구분하기 위하여 값이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를&lt;span&gt;&amp;nbsp;NACK (no acknowledgement)&lt;/span&gt;라고 부르기도 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;만일 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 정보를 출력했다면 그 정보를 수신한 &lt;span&gt;Slave&lt;/span&gt;가&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Clock&lt;/span&gt;에&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를 출력하여 &lt;span&gt;Master&lt;/span&gt;에게 수신 결과를 알린다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 때 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를 받으려면&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Clock Cycle &lt;/span&gt;동안 자신의&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;출력을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 유지하고 있어야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반대로&lt;span&gt;&amp;nbsp;SDA&lt;/span&gt;로 출력된&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 정보가 &lt;span&gt;Slave&lt;/span&gt;의 출력이라면 그것을 수신한 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 &lt;span&gt;Clock&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 때 &lt;span&gt;Master&lt;/span&gt;의&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트를 받기 위해 &lt;span&gt;Slave&lt;/span&gt;는 자신의&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;출력을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 유지하고 있어야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;8&amp;nbsp;&lt;/span&gt;&lt;span&gt;비트 정보와 이어지는&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트의 전송이 끝난 다음에는 &lt;span&gt;Master&lt;/span&gt;가 정지 조건을 출력할 수도 있고 시작 조건을 다시 출력할 수도 있으며 다음 바이트 전송이 이어질 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다음 동작은 현재 진행 중인 동작이 무엇인가에 따라 달라진다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;I2C&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 주소 지정 형식&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;모든&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Slave &lt;/span&gt;장치는&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트의 고유한 주소를 가지고 있으며 &lt;span&gt;Master&lt;/span&gt;는 이 주소를 사용하여 상대 &lt;span&gt;Slave &lt;/span&gt;장치를 지정한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다음 그림은 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;의 주소를 지정하고 데이터를 주고 받는 방법에 대한 설명이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;513&quot; height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWc3Gw/btqv4rzfcGw/WLvFk09tpbd5ibQ6ePvTh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWc3Gw/btqv4rzfcGw/WLvFk09tpbd5ibQ6ePvTh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWc3Gw/btqv4rzfcGw/WLvFk09tpbd5ibQ6ePvTh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWc3Gw%2Fbtqv4rzfcGw%2FWLvFk09tpbd5ibQ6ePvTh0%2Fimg.png&quot; width=&quot;513&quot; height=&quot;155&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;먼저 &lt;span&gt;Master&lt;/span&gt;는 시작 조건에 이어서 자신이 원하는 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트 주소를 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;버스에 연결되어 있는 모든 &lt;span&gt;Slave &lt;/span&gt;장치들은&lt;span&gt;&amp;nbsp;SDA&amp;nbsp;&lt;/span&gt;선을 계속 감시하면서 &lt;span&gt;Master&lt;/span&gt;가 출력한 주소가 자신의 주소와 일치하는지 여부를 검사한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일 &lt;span&gt;Master&lt;/span&gt;가 출력한 주소가 어떤 &lt;span&gt;Slave&lt;/span&gt;의 주소와 같으면 그 &lt;span&gt;Slave&lt;/span&gt;는&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하여 &lt;span&gt;Master&lt;/span&gt;에게 응답한다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 출력한 주소를 가진 &lt;span&gt;Slave&lt;/span&gt;가 없으면 아무도&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하지 않으므로&lt;span&gt;&amp;nbsp;ACK&amp;nbsp;&lt;/span&gt;비트의 상태는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;을 유지하여 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;NACK&lt;/span&gt;을 받게 된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Master&lt;/span&gt;&lt;span&gt;가&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 받으면 이것은 자신이 출력한 주소를 가진 &lt;span&gt;Slave&lt;/span&gt;가 응답했다는 뜻이므로 &lt;span&gt;Master&lt;/span&gt;는 다음 단계를 진행한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반면에 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;NACK&lt;/span&gt;을 받으면 이것은 자신의 호출에 응답하는 &lt;span&gt;Slave&lt;/span&gt;가 없다는 것을 뜻하므로 &lt;span&gt;Master&lt;/span&gt;가 더 이상 할 수 있는 일은 없다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;는 정지 조건을 출력하여 현재의 상황을 종료하고 통신을 다시 시작해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Slave &lt;/span&gt;&lt;span&gt;주소&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트 다음에 오는&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;번째 비트는 다음 동작이 &lt;span&gt;Master&lt;/span&gt;의 읽기인지 쓰기인지를 가리킨다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 이 비트로&lt;span&gt;&amp;nbsp;0&lt;/span&gt;을 출력했다면 이것은 &lt;span&gt;Master &lt;/span&gt;쓰기임을 뜻하므로 &lt;span&gt;Slave &lt;/span&gt;주소 다음의&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;바이트 데이터는 &lt;span&gt;Master&lt;/span&gt;의 출력이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 데이터는 앞서 주소가 지정된 &lt;span&gt;Slave&lt;/span&gt;를 위한 것이므로 그 &lt;span&gt;Slave&lt;/span&gt;가 이 값을 읽어 들인다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반면에 &lt;span&gt;Slave &lt;/span&gt;주소&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트 다음에 오는&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;번째 비트가&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;이면 이것은 다음 동작이 &lt;span&gt;Master&lt;/span&gt;의 읽기라는 것을 의미한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러므로 &lt;span&gt;Master&lt;/span&gt;에 의해 주소가 지정된 &lt;span&gt;Slave&lt;/span&gt;는&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 응답한 후 이어서 &lt;span&gt;Master&lt;/span&gt;에게 보낼 데이터를 출력한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;주의할 것은 &lt;span&gt;Slave &lt;/span&gt;주소는&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트이지만 패킷의 상위&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트로 정렬되고 마지막에&lt;span&gt;&amp;nbsp;R/W&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;LSB&amp;nbsp;&lt;/span&gt;위치에 추가된다는 것이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그렇기 때문에 &lt;span&gt;Slave&lt;/span&gt;의 주소를 왼쪽으로 한 비트 쉬프트 시킨 후의&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 값을 &lt;span&gt;Slave&lt;/span&gt;의 주소라고 생각하는 것이 더 편할 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;예를 들면&lt;span&gt;DS1037&lt;/span&gt;이라는&lt;span&gt;&amp;nbsp;RTC&amp;nbsp;&lt;/span&gt;칩의&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;주소는&lt;span&gt;&amp;nbsp;1101000b&lt;/span&gt;으로 고정되어 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;즉&lt;span&gt;&amp;nbsp;DS1037&lt;/span&gt;의&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;주소는&lt;span&gt;&amp;nbsp;0x68&lt;/span&gt;이다&lt;span&gt;. DS1037&lt;/span&gt;에 데이터를 기록해야 할 때 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스로 시작 조건을 출력한 다음&lt;span&gt;&amp;nbsp;11010000b&lt;/span&gt;을 출력한다&lt;span&gt;. DS1037&lt;/span&gt;의 데이터를 읽고자 한다면 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스로 시작 조건을 출력한 다음&lt;span&gt;&amp;nbsp;11010001b&lt;/span&gt;을 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러므로&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 값인&lt;span&gt;&amp;nbsp;0xd0&lt;/span&gt;을&lt;span&gt;&amp;nbsp;DS1037&lt;/span&gt;의 쓰기 주소&lt;span&gt;, 0xd1&lt;/span&gt;을&lt;span&gt;&amp;nbsp;DS1037&lt;/span&gt;의 읽기 주소로 생각할 수도 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스 규격은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스의 전기적 특성 및 타이밍과 함께 앞에서 설명한 시작 조건&lt;span&gt;,&amp;nbsp;&lt;/span&gt;정지 조건&lt;span&gt;,&amp;nbsp;&lt;/span&gt;주소 지정 방법 등에 대해서만 규정하고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;구체적인 통신 방법&lt;span&gt;,&amp;nbsp;&lt;/span&gt;즉 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;의 주소를 출력한 다음 정지 비트를 출력할 때까지 주고 받는 데이터의 바이트 수&lt;span&gt;,&amp;nbsp;Slave&lt;/span&gt;의 내부 레지스터 주소 지정 방법 등은 &lt;span&gt;Slave &lt;/span&gt;장치에 따라 달라진다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;매우 다양한 종류의&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Slave &lt;/span&gt;장치가 있으니 여러 가지 다양한 방법이 있을 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;대부분의 마이크로컨트롤러는&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;인터페이스를 지원한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그렇기 때문에&lt;span&gt;&amp;nbsp;UART&lt;/span&gt;를 사용할 때와 비슷하게&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;관련 몇 개의 레지스터를 설정한 후 레지스터 읽기&lt;span&gt;/&lt;/span&gt;쓰기를 통해 간단하게&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;통신을 실행할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마이크로컨트롤러가&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;인터페이스를 지원하지 않으면 프로그램을 통해 비교적 쉽게&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;프로토콜을 구현할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;송&lt;/span&gt;&lt;span&gt;·&lt;/span&gt;&lt;span&gt;수신 타이밍을 정확하게 맞추어야 하는 비동기 통신과 달리 &lt;span&gt;Master&lt;/span&gt;가 출력하는 &lt;span&gt;Clock&lt;/span&gt;에 맞추어 모든 동작이 이루어지므로 타이밍에 관련된 어려움이 특별히 없기 때문이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;통신의 예&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;직렬&lt;span&gt;&amp;nbsp;EEPROM, ADC, DAC, RTC&amp;nbsp;&lt;/span&gt;등을 포함한 다양한 매우 장치들이&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;인터페이스를 지원하고 있다&lt;span&gt;. I2C&amp;nbsp;Slave &lt;/span&gt;장치와 통신을 하려면 그 &lt;span&gt;Slave&lt;/span&gt;의 데이터쉬트를 참고하여 구체적인 통신 방법을 이해해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다음 그림은&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;라는&lt;span&gt;&amp;nbsp;64 Kbit&amp;nbsp;&lt;/span&gt;직렬&lt;span&gt;&amp;nbsp;EEPROM&lt;/span&gt;의 내부 데이터를 읽기 위한 여러 방법 중 하나이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;601&quot; height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q9kQE/btqv3IHZVYc/zuKRwFXmceKcXDRaAUD9m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q9kQE/btqv3IHZVYc/zuKRwFXmceKcXDRaAUD9m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q9kQE/btqv3IHZVYc/zuKRwFXmceKcXDRaAUD9m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq9kQE%2Fbtqv3IHZVYc%2FzuKRwFXmceKcXDRaAUD9m1%2Fimg.png&quot; width=&quot;601&quot; height=&quot;219&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;24LC64&lt;/span&gt;&lt;span&gt;의 주소는&lt;span&gt;&amp;nbsp;1010A2A1A0b&lt;/span&gt;로 정해져 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;앞&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;비트는&lt;span&gt;&amp;nbsp;1010&lt;/span&gt;로 고정되어 있지만 뒤의&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;비트&lt;span&gt;&amp;nbsp;A2A1A0&lt;/span&gt;는 사용자가 임의로 바꿀 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;주소의 마지막&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;비트를 사용자가 조절할 수 있도록&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;는 이&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;비트에 각각 대응되는&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;개의 입력 핀&lt;span&gt;&amp;nbsp;A2, A1, A0&lt;/span&gt;을 가지고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;주소의 일부를 사용자가 정하도록 만든 것은&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;에 여러 가지 다른 주소를 부여할 수 있도록 하기 위한 것이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;만일&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;의 주소가 완전히 고정되어 있다면&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;Master&lt;/span&gt;가 구동할 수 있는&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;는&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;개뿐이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;위의 그림은&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;의 저장된 값을 특정 주소부터 연속으로 읽는 방법이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;맨 먼저 &lt;span&gt;Master&lt;/span&gt;는 시작 조건을 출력한 다음&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;의&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트 주소를 출력하고&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;번째 비트로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하여 다음 동작이 쓰기라는 것을 알린다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 지정한 주소와 동일한 주소를 가진&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;가 있다면 그&lt;span&gt;&amp;nbsp;IC&lt;/span&gt;는&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 출력하여 &lt;span&gt;Master&lt;/span&gt;에게 응답한다&lt;span&gt;. ACK&lt;/span&gt;을 받은 &lt;span&gt;Master&lt;/span&gt;는 이어서&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;의 저장 공간 중에서 자신이 원하는 주소를&lt;span&gt;&amp;nbsp;MSB&lt;/span&gt;부터 연속해서 출력한다&lt;span&gt;. 24LC64&lt;/span&gt;의 저장 용량은&lt;span&gt;&amp;nbsp;64 Kbits,&amp;nbsp;&lt;/span&gt;즉&lt;span&gt;&amp;nbsp;8 K&amp;nbsp;&lt;/span&gt;바이트이므로 내부 주소 지정을 위해서는&lt;span&gt;&amp;nbsp;13&amp;nbsp;&lt;/span&gt;비트의 주소 정보가 필요하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그러므로 &lt;span&gt;Master&lt;/span&gt;는 두 번에 걸쳐 주소를 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;매 바이트를 받을 때마다&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;는 &lt;span&gt;Master&lt;/span&gt;에게&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 보낸다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;24LC64&amp;nbsp;&lt;/span&gt;&lt;span&gt;내부의 주소를 출력한 후&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 받으면 &lt;span&gt;Master&lt;/span&gt;는 시작 조건과 &lt;span&gt;Slave &lt;/span&gt;주소를 다시 한 번 더 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그런데 이번에는 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;24LC64&lt;/span&gt;의 데이터를 읽을 차례이므로&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트 &lt;span&gt;Slave &lt;/span&gt;주소 다음에 오는&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;번째 비트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 설정한다&lt;span&gt;. 24LC64&lt;/span&gt;가 다시 &lt;span&gt;Master&lt;/span&gt;에게&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;으로 응답하면 그 다음부터 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;가 출력하는 데이터를 연속해서 읽는다&lt;span&gt;. 24LC64&lt;/span&gt;의 출력을&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;바이트 받을 때마다 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;을 출력하여 이를&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;에게 알린다&lt;span&gt;. ACK&lt;/span&gt;을 받은&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;는 내부에서 주소를&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;증가시키고 새로운 주소의 데이터를 읽어서 다음&lt;span&gt;&amp;nbsp;SCL&amp;nbsp;Clock&lt;/span&gt;에 맞추어 출력하게 된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터를 연속해서 수신한 &lt;span&gt;Master&lt;/span&gt;는 자신이 원하는 마지막 데이터를 받으면 이번에는&lt;span&gt;&amp;nbsp;NACK&lt;/span&gt;을 출력하고 이어 정지 조건을 출력하여 통신을 끝낸다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;위의 예는&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;통신을 사용하는&lt;span&gt;&amp;nbsp;24LC64&lt;/span&gt;를 사용하기 위한 많은 방법들 중 하나일 뿐이다&lt;span&gt;. I2C&amp;nbsp;&lt;/span&gt;인터페이스를 가진 장치마다 사용법이 다르기도 하거니와 한 장치에서도 명령의 종류에 따라 다양한 방법이 있을 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;I2C&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 장&amp;middot;단점&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스의 가장 큰 장점으로 &lt;span&gt;Slave &lt;/span&gt;장치의 수에 관계 없이 두 가닥의 선만으로 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave &lt;/span&gt;사이의 양방향 통신이 가능하다는 것을 들 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;두 개 이상의 &lt;span&gt;Master&lt;/span&gt;를 사용할 수 있다는 사실은&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스가 가진 또 다른 장점이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;반면에&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스의 양방향 특성은 오픈 드레인 구조에 기반을 두고 있으므로 근본적으로 동시 양방향 통신이 불가능하고 통신 속도를 높이기 어렵다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;표준 모드에서&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;통신의 최대 속도는&lt;span&gt;&amp;nbsp;100 kHz&lt;/span&gt;이며 고속 모드에서는 최고&lt;span&gt;&amp;nbsp;400 kHz&lt;/span&gt;까지 가능하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다른 동기 통신 프로토콜&lt;span&gt;,&amp;nbsp;&lt;/span&gt;예를 들어 뒤에서 설명할&lt;span&gt;&amp;nbsp;SPI&lt;/span&gt;와 비교하면 매우 낮은 속도이므로&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스는 저속 주변 장치와의 데이터 통신이나 주변 장치의 동작 모드 설정 등의 용도로 많이 쓰인다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;동작 모드 설정은 사용 빈도가 높지 않기 때문에 낮은 속도가 별 문제가 되지 않는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;인터페이스를 사용하는 제품의 수는 무척 많은 반면 &lt;span&gt;Slave&lt;/span&gt;의 주소는&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트로 그 길이가 제한되어 있어서 다수의 &lt;span&gt;Slave &lt;/span&gt;장치를 사용할 때 &lt;span&gt;Slave &lt;/span&gt;주소가 충돌할 가능성이 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 문제에 대한 해결책으로 &lt;span&gt;Slave &lt;/span&gt;주소의 하위&lt;span&gt;&amp;nbsp;2 ~ 3&amp;nbsp;&lt;/span&gt;비트를 사용자가 임의로 설정할 수 있는 제품들이 많기는 하지만 주소가&lt;span&gt;&amp;nbsp;7&amp;nbsp;&lt;/span&gt;비트로 제한되어 있어서 근본적인 해결책이 될 수는 없다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;SPI&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 개요&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;SPI (Serial Peripheral Interconnect)&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스는&lt;span&gt;&amp;nbsp;Motorola&lt;/span&gt;에 의해 개발된 전이중&lt;span&gt;&amp;nbsp;(full duplex)&amp;nbsp;&lt;/span&gt;통신이 가능한 동기 통신 규격이다&lt;span&gt;. I2C&lt;/span&gt;와 마찬가지로 &lt;span&gt;Master Slave &lt;/span&gt;방식으로 동작하며 &lt;span&gt;Master&lt;/span&gt;가 동기를 위한 클럭을 출력한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;각&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Slave &lt;/span&gt;장치는&lt;span&gt;&amp;nbsp;chip enable (/CE)&amp;nbsp;&lt;/span&gt;입력을 가지고 있으며 이 입력이 활성화되었을 때에만 동작한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 &lt;span&gt;Master&lt;/span&gt;는 여러 개의&lt;span&gt;&amp;nbsp;slave select (SS)&amp;nbsp;&lt;/span&gt;선을 &lt;span&gt;Slave&lt;/span&gt;들의&lt;span&gt;&amp;nbsp;/CE&lt;/span&gt;에 연결하고 한 순간에 하나의 &lt;span&gt;Slave&lt;/span&gt;만 선택하는 방법을 사용하여 두 개 이상의 &lt;span&gt;Slave &lt;/span&gt;장치들을 구동할 수 있다&lt;span&gt;. SPI&lt;/span&gt;의 통신 속도는 최고&lt;span&gt;&amp;nbsp;70 MHz&lt;/span&gt;에 이르기 때문에&lt;span&gt;&amp;nbsp;I2C&lt;/span&gt;에 비해 훨씬 빠르다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다음 그림은&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;버스를 통해 &lt;span&gt;Master&lt;/span&gt;가 한 개의 &lt;span&gt;Slave&lt;/span&gt;와 일대일로 연결된 상황을 보여준다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;297&quot; height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5wAcc/btqv2Kfg30k/fmrP7AvW5aR0bF7zbSNMX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5wAcc/btqv2Kfg30k/fmrP7AvW5aR0bF7zbSNMX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5wAcc/btqv2Kfg30k/fmrP7AvW5aR0bF7zbSNMX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5wAcc%2Fbtqv2Kfg30k%2FfmrP7AvW5aR0bF7zbSNMX1%2Fimg.png&quot; width=&quot;297&quot; height=&quot;105&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;그림에 표시된&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;개의 신호는&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;버스에서 정의된 신호이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;SCLK : Serial Clock.&amp;nbsp;Master&lt;/span&gt;가 출력하는 동기용 클럭&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;MOSI : Master Output Slave Input.&amp;nbsp;Master&lt;/span&gt;의 출력이며 &lt;span&gt;Slave&lt;/span&gt;에게는 입력&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;MISO : Master Input Slave Output.&amp;nbsp;Slave&lt;/span&gt;의 출력이며 &lt;span&gt;Master&lt;/span&gt;에게는 입력&lt;/span&gt;&lt;br /&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;SS : Slave Select.&amp;nbsp;Master&lt;/span&gt;의 출력으로 &lt;span&gt;Slave&lt;/span&gt;를 선택하기 위한 신호&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;SCLK&lt;/span&gt;&lt;span&gt;는 &lt;span&gt;Master&lt;/span&gt;가 출력하는 클럭 신호이다&lt;span&gt;. SCLK&lt;/span&gt;를 기준으로 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave &lt;/span&gt;사이의 데이터 교환이 진행된다&lt;span&gt;. MOSI&lt;/span&gt;는 &lt;span&gt;Master&lt;/span&gt;의 출력으로 &lt;span&gt;Slave&lt;/span&gt;로 정보를 보내기 위한 선이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;반대로&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;는 &lt;span&gt;Slave&lt;/span&gt;의 출력으로 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;의 정보를 받기 위한 선이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;앞의 그림에서 보듯이 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;끼리 서로 연결되며&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;끼리 서로 연결된다&lt;span&gt;. SS&lt;/span&gt;는 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;를 선택하기 위한 &lt;span&gt;Master&lt;/span&gt;의 출력으로 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;입력에 연결된다&lt;span&gt;.&amp;nbsp;Slave&lt;/span&gt;는&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;입력이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;인 동안에만 활성화된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;통신을 진행하기 위해서 &lt;span&gt;Master&lt;/span&gt;는 우선&lt;span&gt;&amp;nbsp;SS&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;을 출력하여 해당 &lt;span&gt;Slave&lt;/span&gt;를 활성화시킨다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그런 다음 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;SLCK&lt;/span&gt;로 동기를 위한 클럭을 출력하는데 이 클럭에 맞추어&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 데이터를 한 비트씩 내보낸다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이와 동시에 &lt;span&gt;Master&lt;/span&gt;는 자신이 출력하는 클럭에 맞추어&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;를 한 비트씩 읽는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다시 말해서&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Master&lt;/span&gt;는 자신의 출력인&lt;span&gt;&amp;nbsp;SCLK&lt;/span&gt;에 맞추어&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 데이터를 내보내며 동시에&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;로는 데이터를 수신한다&lt;span&gt;. SPI&amp;nbsp;&lt;/span&gt;버스는 언제나 양방향 통신을 진행한다&lt;span&gt;. SCLK&lt;/span&gt;에 맞추어&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 데이터를 출력하는 동안&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;로는 데이터가 수신된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;수신되는 데이터는 상황에 따라 의미가 있는 값일 수도 있고 쓰레기 값일 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;마찬가지로 &lt;span&gt;Slave&lt;/span&gt;의 데이터를 읽기 위하여&lt;span&gt;&amp;nbsp;SLCK&lt;/span&gt;에 맞추어&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;로 입력을 받는 동안&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로는 데이터가 출력된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;보통&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;통신은&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 단위로 진행되지만&lt;span&gt;&amp;nbsp;12&amp;nbsp;&lt;/span&gt;비트나&lt;span&gt;&amp;nbsp;16&amp;nbsp;&lt;/span&gt;비트 또는 그 이상의 길이가 한 단위가 될 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;비트 전송 순서에 대한 규정은 없다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터의 전송은&lt;span&gt;&amp;nbsp;MSB&lt;/span&gt;부터 시작될 수도 있고&lt;span&gt;&amp;nbsp;LSB&lt;/span&gt;부터 시작될 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터를 연속 전송하는 경우 한 단위의 데이터를 보낼 때마다&lt;span&gt;SS&amp;nbsp;&lt;/span&gt;신호를 매번 인가할 수도 있지만&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;신호를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 설정한 후 모든 데이터를 다 보낼 때까지 이 상태를 유지하고 있다가 데이터의 전송이 끝났을 때&lt;span&gt;&amp;nbsp;SS&lt;/span&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 바꿀 수도 있다&lt;span&gt;. SPI&amp;nbsp;&lt;/span&gt;규격은 이런 부분까지 규정하고 있지 않으며 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave &lt;/span&gt;사이의 약속에 따라 결정된다&lt;span&gt;. SPI&amp;nbsp;Slave &lt;/span&gt;장치의 용도와 특성에 따라 사용 방법이 다르므로 &lt;span&gt;Slave &lt;/span&gt;장치의 데이터쉬트를 반드시 확인해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;어떤 마이크로컨트롤러는 설정된 전송 단위에 맞추어 데이터 전송 때마다 자동으로&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;신호를 출력해 주는 기능을 가지고 있다&lt;span&gt;. ATMEL&lt;/span&gt;사의&lt;span&gt;ARM7&amp;nbsp;&lt;/span&gt;기반&lt;span&gt;&amp;nbsp;AT91SAM7S&amp;nbsp;&lt;/span&gt;계열 마이크로컨트롤러가 그 예이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;데이터 전송 단위를&lt;span&gt;&amp;nbsp;16&amp;nbsp;&lt;/span&gt;비트로 설정했다면&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;SCLK&amp;nbsp;&lt;/span&gt;신호를 출력하기 전에 자동으로&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;신호를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 내리고 데이터가 출력되는 동안 이 상태를 유지하다 전송이 끝나면 이 신호를 다시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 올려준다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 용도로 사용할 수 있는&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;핀이 여러 개 있어서 사용자가 선택할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 기능이 있으면 정해진 길이의 데이터를 반복해서 출력하는 경우&lt;span&gt;,&amp;nbsp;&lt;/span&gt;예를 들면 주기적으로&lt;span&gt;&amp;nbsp;DAC&lt;/span&gt;에 값을 전송하는 경우에 매우 편리하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 기능이 없는 마이크로컨트롤러의 경우에는 사용자가 프로그램을 통해 수동으로&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;신호를 제어해야 한다&lt;span&gt;. AVR&amp;nbsp;&lt;/span&gt;마이크로컨트롤러는 이 기능을 지원하지 않으므로&lt;span&gt;&amp;nbsp;GPIO&amp;nbsp;&lt;/span&gt;핀을 &lt;span&gt;Slave &lt;/span&gt;선택용으로 정하고 수동으로 그 신호를 제어해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;SPI&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;모드&lt;span&gt;&amp;nbsp;(mode)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;SPI&amp;nbsp;Master&lt;/span&gt;&lt;span&gt;와 &lt;span&gt;Slave&lt;/span&gt;는 &lt;span&gt;Master&lt;/span&gt;의 출력인&lt;span&gt;&amp;nbsp;SCLK&lt;/span&gt;에 맞추어 데이터를 한 비트씩 교환한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그런데 클럭에 동기를 맞추는 방법은 한 가지만 있는 것이 아니다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;클럭이 출력되고 있지 않은 상황에서 클럭의 기본 값은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;일 수도 있고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;일 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그리고 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave&lt;/span&gt;가 매 클럭의 첫 번째 &lt;span&gt;Edge&lt;/span&gt;에서 데이터를 읽을 수도 있고 매 클럭의 두 번째 &lt;span&gt;Edge&lt;/span&gt;에서 데이터를 읽을 수도 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;앞의 특성을 클럭의 극성&lt;span&gt;&amp;nbsp;(polarity)&lt;/span&gt;이라고 하고 뒤의 특성을 클럭의 위상&lt;span&gt;&amp;nbsp;(phase)&lt;/span&gt;이라고 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;클럭의 극성과 위상의 조합에 따라 모두&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;가지 방법이 사용 가능하다&lt;span&gt;. SPI&amp;nbsp;Slave&lt;/span&gt;는&lt;span&gt;4&amp;nbsp;&lt;/span&gt;가지 가능한 방법 중 한 가지를 사용하도록 만들어지고 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;가지 방법을 모두 지원해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;AVR&amp;nbsp;&lt;/span&gt;&lt;span&gt;마이크로컨트롤러의&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;제어 레지스터에는&lt;span&gt;&amp;nbsp;CPOL&lt;/span&gt;과&lt;span&gt;&amp;nbsp;CPHA&lt;/span&gt;라는 비트가 있는데 이 비트의 설정에 따라 출력되는 클럭의 극성과 위상이 달라진다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다른 마이크로컨트롤러도 이와 같거나 비슷한 이름의 비트를 가지고 있다&lt;span&gt;. CPOL&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;0&lt;/span&gt;이면 클럭의 기본 상태가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;이며 이 비트가&lt;span&gt;&amp;nbsp;1&lt;/span&gt;이면 클럭의 기본 상태는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그리고&lt;span&gt;&amp;nbsp;CPHA&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;0&lt;/span&gt;이면 매 클럭의 첫 번째 &lt;span&gt;Edge&lt;/span&gt;에서 데이터가 샘플되며 이 값이&lt;span&gt;&amp;nbsp;1&lt;/span&gt;이면 두 번째 &lt;span&gt;Edge&lt;/span&gt;에서 데이터가 샘플된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다음 그림은&lt;span&gt;&amp;nbsp;CPHA&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;0&lt;/span&gt;일 때의 타이밍을 설명하고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;378&quot; height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYlXs/btqv3JmAIvn/KnQQX3Bip2dcGd4mZIG9y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYlXs/btqv3JmAIvn/KnQQX3Bip2dcGd4mZIG9y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYlXs/btqv3JmAIvn/KnQQX3Bip2dcGd4mZIG9y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYlXs%2Fbtqv3JmAIvn%2FKnQQX3Bip2dcGd4mZIG9y0%2Fimg.png&quot; width=&quot;378&quot; height=&quot;216&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;CPHA&amp;nbsp;&lt;/span&gt;&lt;span&gt;값이&lt;span&gt;&amp;nbsp;0&lt;/span&gt;이므로 클럭의 극성에 상관없이 &lt;span&gt;Master&lt;/span&gt;와 &lt;span&gt;Slave&lt;/span&gt;는 모두 매 클럭의 첫 번째 &lt;span&gt;Edge&lt;/span&gt;에서 데이터를 샘플한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 매 클럭의 두 번째 &lt;span&gt;Edge&lt;/span&gt;에서 비트 전환이 일어난다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다음은&lt;span&gt;&amp;nbsp;CPHA&amp;nbsp;&lt;/span&gt;비트가&lt;span&gt;&amp;nbsp;1&lt;/span&gt;일 때의 타이밍을 설명한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;378&quot; height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lx4p4/btqvZhS7dE6/nhNmKiqEspho0eTyHSP0bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lx4p4/btqvZhS7dE6/nhNmKiqEspho0eTyHSP0bK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lx4p4/btqvZhS7dE6/nhNmKiqEspho0eTyHSP0bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flx4p4%2FbtqvZhS7dE6%2FnhNmKiqEspho0eTyHSP0bK%2Fimg.png&quot; width=&quot;378&quot; height=&quot;216&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;클럭의 극성에 상관없이 매 클럭의 두 번째 &lt;span&gt;Edge&lt;/span&gt;가 데이터 샘플에 사용되며 따라서 매 클럭의 첫 번째 &lt;span&gt;Edge&lt;/span&gt;에서 비트 전환이 일어난다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;위의&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;가지 극성과 위상 조합에&lt;span&gt;&amp;nbsp;0&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;3&lt;/span&gt;까지의 숫자를 부여하여 이를&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;모드라고 부른다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;SPI mode&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;CPOL&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;CPHA&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;2&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;두 개 이상의&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Slave &lt;/span&gt;연결&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스처럼&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;버스에서도 한 개의 &lt;span&gt;Master&lt;/span&gt;가 두 개 이상의 &lt;span&gt;Slave&lt;/span&gt;와 연결될 수 있다&lt;span&gt;. I2C&amp;nbsp;Slave&lt;/span&gt;가 고유한 주소를 가지고 있는 것처럼 각각의&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Slave&lt;/span&gt;는&lt;span&gt;&amp;nbsp;chip enable (/CE)&amp;nbsp;&lt;/span&gt;신호를 가지고 있다&lt;span&gt;. SPI&amp;nbsp;Master&lt;/span&gt;는 각 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호를 제어하여 원하는 &lt;span&gt;Slave&lt;/span&gt;를 선택한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;다음 그림은 한 개의&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Master&lt;/span&gt;에 두 개의 &lt;span&gt;Slave&lt;/span&gt;들을 연결하는 방법을 설명한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;297&quot; height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C9GwV/btqvZidkwmt/1JcyiqZAPpvnpegcq1YGK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C9GwV/btqvZidkwmt/1JcyiqZAPpvnpegcq1YGK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C9GwV/btqvZidkwmt/1JcyiqZAPpvnpegcq1YGK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC9GwV%2FbtqvZidkwmt%2F1JcyiqZAPpvnpegcq1YGK1%2Fimg.png&quot; width=&quot;297&quot; height=&quot;200&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;세 장치의&lt;span&gt;&amp;nbsp;SCLK, MOSI, MISO&lt;/span&gt;는 각각 서로 연결되어 있지만 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호들은 서로 묶이지 않고 &lt;span&gt;Master&lt;/span&gt;의 다른 핀들로 연결된다&lt;span&gt;.&amp;nbsp;Slave&lt;/span&gt;의 수에 상관없이 한 순간에는 하나의 &lt;span&gt;Slave&lt;/span&gt;만 &lt;span&gt;Master&lt;/span&gt;와 통신할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;두 &lt;span&gt;Slave&lt;/span&gt;가 모두 활성화되면 &lt;span&gt;Slave&lt;/span&gt;의 출력인&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;에서 데이터의 충돌이 일어난다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그래서 &lt;span&gt;Master&lt;/span&gt;는 자신이 원하는 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 설정하여 활성화시키고 나머지 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&lt;/span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 두어야 한다&lt;span&gt;. /CE&amp;nbsp;&lt;/span&gt;입력이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 &lt;span&gt;Slave&lt;/span&gt;는 선택되지 않았기 때문에 자신의&lt;span&gt;&amp;nbsp;MISO&amp;nbsp;&lt;/span&gt;출력을&lt;span&gt;&amp;nbsp;hi-Z&amp;nbsp;&lt;/span&gt;상태로 만들어 선택된 &lt;span&gt;Slave&lt;/span&gt;와 &lt;span&gt;Master &lt;/span&gt;간의 통신에 영향을 주지 않는다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;따라서 모든&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;MISO&amp;nbsp;&lt;/span&gt;출력은&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;상태를 지원한다&lt;span&gt;. /CE&amp;nbsp;&lt;/span&gt;입력이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;인 &lt;span&gt;Slave&lt;/span&gt;는 당연히 &lt;span&gt;Master&lt;/span&gt;가 출력한&lt;span&gt;&amp;nbsp;SCLK&lt;/span&gt;와&lt;span&gt;&amp;nbsp;MOSI&amp;nbsp;&lt;/span&gt;신호를 무시한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;세 개 이상의 &lt;span&gt;Slave&lt;/span&gt;도 같은 방법으로 &lt;span&gt;Master&lt;/span&gt;와 연결할 수 있다&lt;span&gt;.&amp;nbsp;Slave&lt;/span&gt;의 수가 하나씩 늘어날 때마다 새로운 &lt;span&gt;Slave&lt;/span&gt;를 위한&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호만 하나 더 필요할 뿐이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그런데 이 때 &lt;span&gt;Master&lt;/span&gt;에 연결된 &lt;span&gt;Slave&lt;/span&gt;들이 사용하는&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;모드가 한 가지가 아니거나 비트 전송 순서가 다를 수 있는데 이런 경우에는 통신의 효율이 많이 낮아진다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;가령 어떤 &lt;span&gt;Slave&lt;/span&gt;는 모드&lt;span&gt;&amp;nbsp;0&lt;/span&gt;을 사용하고 또 다른 &lt;span&gt;Slave&lt;/span&gt;는 모드&lt;span&gt;&amp;nbsp;1&lt;/span&gt;을 사용한다면 &lt;span&gt;Master&lt;/span&gt;가 &lt;span&gt;Slave&lt;/span&gt;를 바꿀 때마다 동작 모드를 매번 다시 설정해야 한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;또한 동작 모드가 같아도 비트 전송 순서가 다르다면 마찬가지 문제가 생긴다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Master&lt;/span&gt;&lt;span&gt;가 하나의 &lt;span&gt;Slave&lt;/span&gt;만 구동한다면 &lt;span&gt;Slave&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호를&lt;span&gt;&amp;nbsp;GND&lt;/span&gt;로 고정시켜 두어도 상관없다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;어차피&lt;span&gt;&amp;nbsp;SCLK, MOSI, MISO&lt;/span&gt;를 공유할 다른 &lt;span&gt;Slave&lt;/span&gt;가 없기 때문에 이 선들은 하나뿐인 &lt;span&gt;Slave &lt;/span&gt;전용으로 사용된다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;그렇기 때문에 &lt;span&gt;Slave&lt;/span&gt;를 항상 활성화시켜 둬도 기능상의 문제는 생기지는 않는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;SPI&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;통신의 예&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;AT45DB161D&lt;/span&gt;&lt;span&gt;은&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;인터페이스를 사용하는&lt;span&gt;&amp;nbsp;16 Mbit&amp;nbsp;&lt;/span&gt;직렬 플래쉬 메모리이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 플래쉬 메모리에 정보를 기록하거나 저장된 정보를 읽기 위한 여러 방법 중 다음 그림은&lt;span&gt;&amp;nbsp;main memory page read&amp;nbsp;&lt;/span&gt;명령을 설명하고 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 그림에서 데이터는 바이트 단위로 표시되어 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;539&quot; height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BMH5V/btqvZhS7dHm/ExSY0psRcmUoMi9iWqv4m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BMH5V/btqvZhS7dHm/ExSY0psRcmUoMi9iWqv4m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BMH5V/btqvZhS7dHm/ExSY0psRcmUoMi9iWqv4m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBMH5V%2FbtqvZhS7dHm%2FExSY0psRcmUoMi9iWqv4m1%2Fimg.png&quot; width=&quot;539&quot; height=&quot;111&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;main memory page read&amp;nbsp;&lt;/span&gt;&lt;span&gt;명령은&lt;span&gt;&amp;nbsp;AT45DB161D&amp;nbsp;&lt;/span&gt;내부의 특정 페이지의 내용을 연속으로 읽기 위한 것이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 플래쉬 메모리의 용량은&lt;span&gt;&amp;nbsp;2 Mbytes&lt;/span&gt;이므로 주소를 지정하기 위해서&lt;span&gt;&amp;nbsp;21&amp;nbsp;&lt;/span&gt;비트가 필요하다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;는 가장 먼저&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;0&lt;/span&gt;&amp;rsquo;으로 만든 다음&lt;span&gt;&amp;nbsp;main memory page read&lt;/span&gt;를 위한&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트 명령을 출력하고 이어서 읽기를 원하는 주소&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;바이트를 출력한다&lt;span&gt;. (AT45DB161D&lt;/span&gt;는&lt;span&gt;&amp;nbsp;MSB&amp;nbsp;&lt;/span&gt;우선의 비트 전송 순서를 사용한다&lt;span&gt;.) main memory page read&amp;nbsp;&lt;/span&gt;명령과&lt;span&gt;&amp;nbsp;3&amp;nbsp;&lt;/span&gt;바이트 주소를 받으면&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;는 저장된 데이터를 읽어서 출력할 준비를 하는데 이 과정에 시간이 필요하다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이를 위해 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;바이트를 더 출력한다&lt;span&gt;.&amp;nbsp;Master&lt;/span&gt;가 추가로 전송하는&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;바이트를 전송하는 것은&lt;span&gt;&amp;nbsp;SLCK&lt;/span&gt;를 출력하기 위한 동작이므로 출력하는 데이터는 어떤 값이든 상관없다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이렇게&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;바이트를&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 출력하는 동안 계속해서 &lt;span&gt;Master&lt;/span&gt;의&lt;span&gt;&amp;nbsp;MISO&lt;/span&gt;로&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;의 출력이 들어오지만 이 값은 아무런 의미가 없는 쓰레기 값이다&lt;span&gt;. AT45DB161D&lt;/span&gt;의 데이터 전송은&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 바이트부터 시작된다&lt;span&gt;. AT45DB161D&lt;/span&gt;는&lt;span&gt;&amp;nbsp;9&amp;nbsp;&lt;/span&gt;번째 바이트에서 &lt;span&gt;Master&lt;/span&gt;가 지정한 주소의 내용을&lt;span&gt;MISO&lt;/span&gt;로 출력한 후 내부 카운터를 사용하여 주소를&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;증가시킨다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이 후 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 한 바이트씩 출력할 때마다&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;는 데이터를 출력하고 주소를&lt;span&gt;&amp;nbsp;1&amp;nbsp;&lt;/span&gt;증가시키는 과정을 계속 되풀이한다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;이런 과정을 통해 &lt;span&gt;Master&lt;/span&gt;는&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;의 데이터를 필요한 만큼 연속해서 읽고 마지막으로&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;의&lt;span&gt;&amp;nbsp;/CE&amp;nbsp;&lt;/span&gt;신호를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;span&gt;1&lt;/span&gt;&amp;rsquo;로 만들어 통신을 끝낸다&lt;span&gt;. 9&amp;nbsp;&lt;/span&gt;번째 바이트부터 &lt;span&gt;Master&lt;/span&gt;가&lt;span&gt;&amp;nbsp;SCLK&lt;/span&gt;를 출력할 뿐&lt;span&gt;&amp;nbsp;MOSI&lt;/span&gt;로 출력해야 하는 데이터는 없으므로 어떤 값을 보내도 상관 없다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이 명령 외에도&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;을 사용에 필요한 다른 많은 명령들이 더 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;각 명령마다 위 그림과 비슷한 타이밍도를 가지고 있으므로 각 명령의 쓰임새와 사용법을 알려면&lt;span&gt;&amp;nbsp;AT45DB161D&lt;/span&gt;의 데이터쉬트를 참고해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;SPI&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 장&amp;middot;단점&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;SPI&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스의 가장 큰 장점으로는 최고&lt;span&gt;&amp;nbsp;70 MHz&lt;/span&gt;에 이르는 빠른 통신 속도와 동시 양방향 통신이 가능하다는 점을 들 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;전송 데이터 단위에 대한 제약이 없어서&lt;span&gt;&amp;nbsp;8&amp;nbsp;&lt;/span&gt;비트&lt;span&gt;, 16&amp;nbsp;&lt;/span&gt;비트&lt;span&gt;, 24&amp;nbsp;&lt;/span&gt;비트 등 원하는 길이를 한 워드로 설정할 수 있다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;비트 순서에 대한 제약도 없으므로 필요에 따라&lt;span&gt;MSB&lt;/span&gt;부터 전송할 수도 있고&lt;span&gt;&amp;nbsp;LSB&lt;/span&gt;부터 전송할 수도 있다&lt;span&gt;. I2C&amp;nbsp;Slave&lt;/span&gt;와 달리&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;Slave&lt;/span&gt;는 자체 주소를 가지고 있지 않으므로 주소 충돌의 문제도 발생하지 않는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I2C&amp;nbsp;&lt;/span&gt;&lt;span&gt;버스와 달리&lt;span&gt;&amp;nbsp;SPI&amp;nbsp;&lt;/span&gt;버스에는 한 개의 버스 &lt;span&gt;Master&lt;/span&gt;만 있을 수 있으며&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스에 비해 필요한 핀의 수가 더 많다&lt;span&gt;. SPI&amp;nbsp;&lt;/span&gt;버스는 기본적으로&lt;span&gt;&amp;nbsp;4&amp;nbsp;&lt;/span&gt;가닥의 선을 사용하며 &lt;span&gt;Master&lt;/span&gt;에 연결된 &lt;span&gt;Slave&lt;/span&gt;의 숫자가 많아질수록 &lt;span&gt;Slave&lt;/span&gt;를 선택하기 위한&lt;span&gt;&amp;nbsp;SS&amp;nbsp;&lt;/span&gt;핀의 수 역시 &lt;span&gt;Slave &lt;/span&gt;수에 비례해서 늘어난다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;또한&lt;span&gt;&amp;nbsp;I2C&amp;nbsp;&lt;/span&gt;버스의&lt;span&gt;&amp;nbsp;ACK&lt;/span&gt;와 같은 메커니즘이 없어서 &lt;span&gt;Master&lt;/span&gt;는 자신이 통신하고 있는 장치가 실제 존재하는지 여부를 확인할 수 없다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[출처]&lt;/b&gt; &lt;a href=&quot;http://blog.naver.com/nortul/221139711208&quot;&gt;Serial 통신, UART, I2C, SPI 개요(펌)&lt;/a&gt;&lt;span&gt;|&lt;/span&gt;&lt;b&gt;작성자&lt;/b&gt; &lt;a href=&quot;http://blog.naver.com/nortul&quot;&gt;노털&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT Tech/Computing</category>
      <category>I2C</category>
      <category>spi</category>
      <category>uart</category>
      <category>직렬통신</category>
      <category>펌글</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/664</guid>
      <comments>https://sahngoh.tistory.com/664#entry664comment</comments>
      <pubDate>Thu, 13 Jun 2019 13:01:08 +0900</pubDate>
    </item>
    <item>
      <title>점점 이상해지는 2019년 카카오톡 PC버전 유감 ㅋ</title>
      <link>https://sahngoh.tistory.com/663</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdQJEa/btqt4zHgK0q/qdkC6otl924rXP2PvAzpX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdQJEa/btqt4zHgK0q/qdkC6otl924rXP2PvAzpX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdQJEa/btqt4zHgK0q/qdkC6otl924rXP2PvAzpX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdQJEa%2Fbtqt4zHgK0q%2FqdkC6otl924rXP2PvAzpX0%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;여기서 더이상 작게 조절이 안됨..&lt;br /&gt;광고는 뭐 그런가보다 하지만 누구맘대로 최소크기를 지정해놓은겨??&lt;br /&gt;도대채 왜 이러는 거냐?? 응!?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;+&lt;br /&gt;이런저런 악담을 길게 씨부리다가 조금 진정이 되서 쓴 글 다 지우고 간단하게 하소연 하는 글!!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Tech/Windows</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/663</guid>
      <comments>https://sahngoh.tistory.com/663#entry663comment</comments>
      <pubDate>Thu, 4 Apr 2019 13:30:25 +0900</pubDate>
    </item>
    <item>
      <title>iMAX B6 매뉴얼</title>
      <link>https://sahngoh.tistory.com/662</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913C2355C63AD111E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913C2355C63AD111E&quot; width=&quot;500&quot; height=&quot;333&quot; filename=&quot;15.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9910CC375C63AD2725&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/pdf.gif&quot; style=&quot;vertical-align: middle;&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;/&gt;iMAX_B6설명서.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Stuff Things../D.I.Y</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/662</guid>
      <comments>https://sahngoh.tistory.com/662#entry662comment</comments>
      <pubDate>Wed, 13 Feb 2019 14:38:11 +0900</pubDate>
    </item>
    <item>
      <title>중국산 멀티메터, VC99 한글 매뉴얼</title>
      <link>https://sahngoh.tistory.com/661</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 285px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B9DD4A5C63AB7C1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B9DD4A5C63AB7C1F&quot; width=&quot;285&quot; height=&quot;426&quot; filename=&quot;01.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99E4BA3B5C63AB9424&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/pdf.gif&quot; style=&quot;vertical-align: middle;&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;/&gt;vc99_한글_매뉴얼.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Stuff Things../D.I.Y</category>
      <category>vc99</category>
      <category>한글 매뉴얼</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/661</guid>
      <comments>https://sahngoh.tistory.com/661#entry661comment</comments>
      <pubDate>Wed, 13 Feb 2019 14:31:42 +0900</pubDate>
    </item>
    <item>
      <title>여행에 앞서 사이판 역사 간단 정리해보기!?</title>
      <link>https://sahngoh.tistory.com/660</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EB68415C4EA5BC07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EB68415C4EA5BC07&quot; width=&quot;860&quot; height=&quot;579&quot; filename=&quot;IMG_20190128_154147.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;대략적으로다가,,,&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;챠모로족(원주민) -&amp;gt; 스페인 -&amp;gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 캐롤라이나인들 대거 유입(빈집털이) &lt;/span&gt;-&amp;gt; 독일 --&amp;gt; 일본 -&amp;gt; 미국 -&amp;gt; UN -&amp;gt; 미국(자치령)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;으로 간단하게 정리할 수 있겠고,,&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;3.1운동&lt;/b&gt;을 기점으로 사탕수수 재배를 위한 노농력으로 &lt;b&gt;한인&lt;/b&gt;들이 대거 투입되어 노동력을 제공했다라는 점이 흥미롭다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;일본놈들 2차대전에 패하고 &lt;b&gt;자살절벽&lt;/b&gt;과 &lt;b&gt;만세절벽&lt;/b&gt;에서 대거 뛰어내렸는데,,&lt;br /&gt;&amp;nbsp;그 시체로 바다가 뒤뎦혀 배가 접근하기도 힘들었다고 하니 그 현장 중 만세절벽 쯤은 한번 쯤 봐두는 것도 좋을 것 같다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;끝!!&lt;/p&gt;</description>
      <category>Humanities/Wissen</category>
      <category>사이판</category>
      <category>여행준비</category>
      <category>역사</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/660</guid>
      <comments>https://sahngoh.tistory.com/660#entry660comment</comments>
      <pubDate>Mon, 28 Jan 2019 16:01:34 +0900</pubDate>
    </item>
    <item>
      <title>블로그 카테고리 썸네일 이미지로 보기(masonry?) 적용과 문제점</title>
      <link>https://sahngoh.tistory.com/659</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/category/Photo%20Sketch/flower&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 651px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99111B355C4BE8922E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99111B355C4BE8922E&quot; width=&quot;651&quot; height=&quot;800&quot; filename=&quot;01.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;그러니깐 티스토리 처음 시작할 당시부터 - 10년은 된 것 같다. ㅋ -&amp;nbsp; 고민했다가 방법을 몰라 포기하고,,&lt;br /&gt;최근에 티스토리 블로그가 이것저것 정책적으로 변경이 된다하여 이것저것 살펴보던중&lt;br /&gt;소위 핀터레스트 방식의 &lt;b&gt;masonry&lt;/b&gt; 정렬 방법이 있어 적용해보았다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;이미 소개된 방법과 크게 다르지 않게 느리고 렌더링시 뻑뻑대는 느낌이 적잖다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;아직도 티스토리에서 썸네일 이미지를 가져오는 치환자를 지원하지 않아 범용 기법을 적용하기에는 무리가 있다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;댓글의 URL 링크도 아직까지 지원하지 않는 걸 보면 뭐랄까... 설치형 플랫폼이 면죄부가 되면 안되는데 여튼 의욕이 없어보인다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;각설하고,,&lt;br /&gt;그냥 널리 알려진 방법을 적용해보았으나,,&lt;br /&gt;위 첨부 그림처럼 &lt;b&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(204, 61, 61);&quot;&gt;자동 정렬이 안되는 문제&lt;/span&gt;&lt;/b&gt;가 있다..&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;누가 좀 속 시원하게 알려줬으면 좋겠다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;inline, block 과 같은 속석의 문제인건지.... 이휴~&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt; font-family: 맑은 고딕, sans-serif;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/category/Photo%20Sketch/flower&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;위 예제의 블로그&lt;/a&gt;&lt;/span&gt;이다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://mindeater.tistory.com/category/Photo%20Sketch/flower&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217); font-size: 12pt;&quot;&gt;https://mindeater.tistory.com/category/Photo%20Sketch/flower&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 489px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F38A3E5C4BEEE930&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F38A3E5C4BEEE930&quot; width=&quot;489&quot; height=&quot;93&quot; filename=&quot;hr01.gif&quot; filemime=&quot;image/gif&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Skin.html&lt;/h2&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99F737415C4BEB602F&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&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;/&gt;ygal.js&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;

&lt;pre class=&quot;brush: cpp; ruler: true; &quot;&gt;&lt;!-- for category thumbnail --&gt;
&lt;script src=&quot;./images/ygal.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;
&lt;script&gt;
	var col = 4;
	var width = 280;
&lt;/script&gt;

&lt;/pre&gt;

&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;CSS&lt;/h2&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;pre class=&quot;brush: cpp; ruler: true; &quot;&gt;.searchList ul {
    display: inline-block;
    clear: both;
    list-style: none;
    content: &quot;&quot;
}

.searchRplist ul {
    list-style: none;
    padding: 10px;
    margin: 0;
}

/* .searchList li,
.searchRplist li { line-height:100%; padding-bottom:2px; margin-bottom:4px;}
.searchList .date,
.searchRplist .date { font-size:9px; margin-left:10px; }
.searchList .cnt { font-size:9px; color:#7aa;}
.searchRplist .name { font-size:11px; color:#999; padding-left:8px;}
*/
/* *****  for a new thumbnail category, 190113  ***** */
.searchList li {
    position: relative;
    float: left;
    margin: 0 1% 20px;
    border-radius: 5px;
    width: 22%;
}

.searchList .thumb img {
    width: 100%;
    height: auto;
    border-radius: 5px 5px 5px 5px;
    overflow: hidden;
    background: #fff;
    display: block
}

.searchList .caption {
    padding: 1px;
    margin-top: 1px;
    font-size: 0.8rem;
}

/* fixed_img_col */
.searchList {
    text-align: center;
}

.fixed_img_col li {
    overflow: hidden;
    display: block;
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT Tech/Programming</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>Masonry</category>
      <category>블로그</category>
      <category>정렬이 안됩니다. ㅠㅠ</category>
      <category>카테고리 썸네일 이미지보기</category>
      <category>티스토리</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/659</guid>
      <comments>https://sahngoh.tistory.com/659#entry659comment</comments>
      <pubDate>Sat, 26 Jan 2019 14:26:07 +0900</pubDate>
    </item>
    <item>
      <title>[WEB]  티스토리 블로그 로딩 속도 관련 튜닝 요소...(Continued...)</title>
      <link>https://sahngoh.tistory.com/658</link>
      <description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;티스토리 블로그 로딩속도 튜닝 !?&lt;/span&gt;&lt;br /&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;요즘 CSS파일과 HTML을 조금씩 보고 또 브라우저에서 지원하는 디버깅 툴을 보고 살짝 놀라고 있다. 파이어폭스나 크롬에서 F12를 누르면 튀어나오는 디버깅 툴이 매일 리눅스에서 VI와 Ctags를 이용하여 코딩을 하고 기십분씩 컴파일을 돌려 타겟보드에 올려 확인을 해야하는 필자에겐 살짝 놀라움이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 730px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E4A83A5C4BB2E132&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E4A83A5C4BB2E132&quot; width=&quot;730&quot; height=&quot;367&quot; filename=&quot;01.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;티스토리 특히 기본 제공 모바일 스킨이 느려서 찾아보게 된 내용을 정리하고 자한다. 필요한 사람이 우물을 판다고 하지 않나... 바꾸어 말하면 잘 동작하면 굳이 알아보지지 않았을 내용이다. 덕분에 공부를 하게 되니 고맙기도 하다..&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;사용하고 있는 스킨이 반응형이라면 스킨을 직접 제어할 수 있지만, 구형 스킨 사용자의 경우 티스토리에서 자동연결이 되어 수정할 수 있는 방법이 있는지도 모르겠다. 필자는 여러가지 이유로 &lt;b&gt;&lt;a href=&quot;https://mindeater.tistory.com&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;메인 블로그&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;의 디자인을 도저히 버릴 수가 없다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9966AA3C5C4BCA8911&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9966AA3C5C4BCA8911&quot; width=&quot;860&quot; height=&quot;516&quot; filename=&quot;01_001.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;조금은 애매한 것이 모바일 브라우저 마다 로딩 매카니즘이 다른 것인지 차이가 난다. 특이 최근에 베타테스트하고 있는 네이버앱으로 페이지를 열면 미칠지경으로 느리다. 그래서 네이버앱은 바로 삭제하고 그나마 빠른 크롬을 사용하고 있지만,,, 역시 4~5초를 넘겼고 지금은 조금은 빨라진 듯 하지만 그래도 &lt;b&gt;티스토리에서 기본 제공하는 모바일 페이지에 문제가 있는 건 분명&lt;/b&gt;한 것 같다. (아래 설명하겠지만 동기식으로 수행하는 스크립트가 많은 듯..)&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;여담이지만, 요즘 같으면 10년 넘게 사용하고 있는 티스토리가 앞으로 또 10년 20년을 가줄지 답답한 마음 없지 않다.&lt;br /&gt;지금이라도 도메인 연결을 해야하는 건지..도메인 연결을 한다면 평생을 가져 갈만큼 유지비를 지불할 가치가 있는지 말이다.분명한건 가까운 미래에 지금의 고민은 현실로 다가올 듯한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;각설,, 필자는 웹프로그래밍을 모른다. 20년 전에 메모장을 이용하여 html 태그만을 사용해 홈페이지를 만들 어본 것이 전부고, 티스토리를 운영하면서 그때그때 찾아본 기억이 전부다. 따라서 구글링을 통해 적용해본 요소이고 상식선 혹은 체감상 효과가 있는 것들을 정리할 생각이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아래 정리된 내용은 추후에 수정가감될 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;script async=&quot;&quot; src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display:block; text-align:center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-5827841599108585&quot; data-ad-slot=&quot;5384980430&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;
&lt;br /&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;※ 이미지 ※&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;이미지는 가장 많이 사용하는 요소라 손 쉽게 튜닝이 가능하다. &lt;br /&gt;하지만 이동 통신이 5G세대에 접어든 시점에 이미지 용량을 고민해야하는 것도 아이러니 하다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1) 이미지 자체 용량 줄이기&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;최근에 공개된 미디어타입을 쓰거나,, 우리가 흔히 사용하는 JPEG의 경우 &lt;b&gt;저장품질을 85~90%&lt;/b&gt;정도로 낮추어도 100%대비 1/3 이상으로 떨어져 엄청난 용량의 이득을 볼 수 있다. 사진 블로그의 경우에도 92% 이상은 눈으로 구분이 힘들다.&lt;br /&gt;&lt;br /&gt;다만, 품질 80~90%에서 눈에 띄는 이상픽셀이 눈에 띈다면 적절하게 타협하면 되겠다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2) 사이즈 지정&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;img .. &amp;gt; 에 &lt;b&gt;width=&quot;xxx&quot; height=&quot;yyy&quot;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;gt; 사이즈를 지정하면 렌더링시 이득이 생긴다. (실제 테스트는 안해봄)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3) 사용할 크기로 미리 리사이징하기&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;width, height에 사이즈를 지정할 때 로딩한 이미지의 크기가 다르면 내부적으로 리사이징을 수행하면서 리소스를 잡어먹는다.&lt;br /&gt;고퀄의 사진을 보여줄 용도가 아니라면 사용할 크기로 미리 리사이징 하는 것을 추천한다.&lt;br /&gt;참고로 &lt;b&gt;Lanczos&lt;/b&gt;나&lt;b&gt; Sync&lt;/b&gt;와 같은 알고리즘을 사용하여 re-sizing 한다면 고퀄의 이미지를 얻을 수 있다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;.....(추가중)&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;※ Java Script ※&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1) js파일 로컬 계정으로 옮기기&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;js 파일이 원격에 존재한다면 다운로드 해서 본인 계정에 업로드하는 것을 추천한다. &lt;br /&gt;sync 모드에서 파일을 가져올 수 없을 때 timeout 동안 멍청하게 기다릴 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2) async 속성 사용&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;스크립트 파일을 원격서버에서 가져와야 할 경우 async 를 사용하면 비동기 모드로 가져올 수 있다. 순서에 상관없이 백그라운드로 로딩되면 수행된다.&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;lt;script src=&quot;./xxx.js&quot; &lt;b&gt;async&lt;/b&gt;&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3) defer 속성 사용&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;async와 비슷한 효과를 내지만 내부적으로 처리 메카니즘이 다르다. 일반적으로 &lt;b&gt;로딩 순서가 중요한 경우에 defer&lt;/b&gt;를 사용한다.&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;lt;script src=&quot;./xxx.js&quot; &lt;b&gt;defer&lt;/b&gt;&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;....(추가중)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4) skin.html의 &amp;lt;/body&amp;gt; 앞에 배치하기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;gt; 렌더링에 필요한 태그를 먼저 파싱하게 하고 스크립트 파일을 로딩하도록 함..&lt;br /&gt;&amp;gt; 순서에 유의를 해야한다. &lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;※ HTML ※&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1) 코드 압축&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;최대한 빠른 파싱을 위해 html과 css 코드를 압축해주는 사이트를 이용한다.&lt;/div&gt;&lt;div&gt;티스토리에서 제공하는 자체 툴로 수정시 번거로우니 성능상 체감이 크지 않을 경우 추천하지 않지만 수정할 필요가 많지 않다면 시도해 볼만하다.&lt;/div&gt;&lt;div&gt;백업은 필수다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;코드 압축 사이트 --&amp;gt; &lt;a href=&quot;https://htmlcompressor.com/compressor/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217);&quot;&gt;https://htmlcompressor.com/compressor/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2) &amp;lt;table&amp;gt; 사용하지 않기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;lt;table&amp;gt; 은 구시대의 유물로 취급받는 듯 하다. Obsolete... 셀의 모든 내용을 가져온&amp;nbsp; 이후에 화면에 뿌려지는 구조라 느리다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;lt;div&amp;gt;로 대체가 가능하고 실제 테이블 코드를 넣으면 div로 컨버팅 해주는 툴사이트도 많다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;...(추가중)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;※ 티스토리 플러그인&lt;/span&gt;&lt;br /&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1) 디자인과 성능사이에서 적절한 타협&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;티스토리 플러그인을 이것저것 사용하면 무거워 질터 적절하게 타협하여 꼭 필요하다고 판단되는 모듈만 사용하도록 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2) 구글 광고&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;구글 광고때문에 티스토리를 시작하는 사람이 많다.&lt;br /&gt;테스트해보니 구글 광고가 매우 느리다. 요즘엔 async 모드로 동작하는 코드가 제공되지만 그럼에도 느리다. 적절한 타협이 필요하다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;...(추가중)&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 489px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99313F435C4BC1840B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99313F435C4BC1840B&quot; width=&quot;489&quot; height=&quot;93&quot; filename=&quot;hr01.gif&quot; filemime=&quot;image/gif&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;XX. 속도 테스트 사이트&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://developers.google.com/speed/pagespeed/insights/?hl=ko&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(65, 116, 217);&quot;&gt;Google PageSpeed Insights&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://testmysite.withgoogle.com/intl/en-gb&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://testmysite.withgoogle.com/intl/en-gb&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(65, 116, 217);&quot;&gt;Google Mobile Speed&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://tools.pingdom.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(65, 116, 217);&quot;&gt;pingdom&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(65, 116, 217);&quot;&gt;&lt;a href=&quot;https://www.webpagetest.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217);&quot;&gt;https://www.webpagetest.org/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT Tech/Web</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>모바일페잊</category>
      <category>블로그</category>
      <category>속도</category>
      <category>튜닝</category>
      <category>티스토리</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/658</guid>
      <comments>https://sahngoh.tistory.com/658#entry658comment</comments>
      <pubDate>Sat, 26 Jan 2019 11:33:29 +0900</pubDate>
    </item>
    <item>
      <title>[HTML][CSS] 옛날 티스토리 스킨에 관련글(Related Articles) 추가하기</title>
      <link>https://sahngoh.tistory.com/654</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;Related Articles&lt;/span&gt;&lt;br /&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;- 구형 &lt;b&gt;非&lt;/b&gt;반응형 스킨 손보기 -&lt;br /&gt;- 이 글은 일종의 개인 작업의 로그이며 &lt;b&gt;&quot;How To&quot;&lt;/b&gt;입니다.&lt;b&gt; -&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;옛날.. 아주 아주 옛날 스킨을 조금씩 손보고 있습니다.&lt;br /&gt;그 중 요즘 스킨에서 쓸만하다고 생각되는 모듈을 조금씩 이식하고 있습니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;그 중에 &lt;b&gt;관련글 추가(Related Articles)&lt;/b&gt;의 방법입니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;참고한 스킨은 &lt;b&gt;Poster &lt;/b&gt;입니다.&lt;br /&gt;썸네일 사이즈를 조정하면 이미지를 못가져오는 것 같은데 이부분은 잘 모르겠습니다.&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;skin.html 수정&lt;/h2&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[
                      &lt;s_article_related&gt;
                        &lt;div class=&quot;related-articles&quot;&gt;
                            &lt;h2&gt;&lt;strong&gt;''&lt;/strong&gt; Related Articles&lt;/h2&gt;
                            &lt;ul&gt;
                                &lt;s_article_related_rep&gt;
                                    &lt;li style=&quot;list-style:none&quot;&gt;
                                        &lt;a href=&quot;&quot;&gt;
                                            &lt;span class=&quot;thum&quot;&gt;
                                                &lt;s_article_related_rep_thumbnail&gt;
                                                    &lt;img src=&quot;//i1.daumcdn.net/thumb/C264x200/?fname=&quot; alt=&quot;&quot;&gt;
                                                &lt;/s_article_related_rep_thumbnail&gt;
                                            &lt;/span&gt;
                                            &lt;span class=&quot;title&quot;&gt;&lt;/span&gt;
                                        &lt;/a&gt;
                                    &lt;/li&gt;
                                &lt;/s_article_related_rep&gt;
                            &lt;/ul&gt;
                        &lt;/div&gt;
                    &lt;/s_article_related&gt;         
]]&gt;&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;style.css 파일 수정&lt;/h2&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[
.related-articles {	overflow: hidden;	width: 100%;	margin: 80px 0 60px; }
.related-articles h2 {	margin-bottom: 28px;	font-weight: 400;	font-size: 0.8 rem; }
.related-articles h2 rem {	border-bottom: 1px solid #000; 	font-style: normal; }
.related-articles ul {	padding : 0; }
.related-articles ul li { float: left; width: 24.0625%; margin: 0 0 12px; padding-left: 1.25%; }
.related-articles ul li:first-child {	padding-left: 0;}
.related-articles ul li a {	display: block;	text-decoration: none; }
.related-articles ul li .thum {	display: block;	position: relative;	overflow: hidden;	height: 0;	margin-bottom: 19px;	padding-bottom: 75.757575757575758%;	background-color: #ebebeb;}
.related-articles ul li .thum:before {	content: &quot;NO IMAGE&quot;;	position: absolute;	top: 50%;	left: 0;	z-index: 0;	width: 100%;	height: 18px;	margin: -9px 0 0 0;	text-align: center;	font-family: 'Arial';	font-weight: bold;	font-size: 0.875em;	color: #cbcbcb; }
.related-articles ul li .thum img {	position: absolute;	top:0;	left:0;	z-index:10;	width:100%; height:100%; }
.related-articles ul li .category {	display: inline-block;	margin-bottom: 16px;	border-bottom: 1px solid #a3a3a3;	font-family: gulim, serif;	font-size: 0.875em;	color: #808080;}
.related-articles ul li .date {	display: block;	font-size: 0.8125em;	color: #999; }

]]&gt;&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;b&gt;적용 예시&lt;/b&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/1920&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217); font-size: 14pt;&quot;&gt;https://mindeater.tistory.com/1920&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 800px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99875C3E5C4BAD4328&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99875C3E5C4BAD4328&quot; width=&quot;800&quot; height=&quot;419&quot; filename=&quot;01.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT Tech/Web</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>Tistory</category>
      <category>관련글</category>
      <category>블로그</category>
      <category>스킨</category>
      <category>티스토리</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/654</guid>
      <comments>https://sahngoh.tistory.com/654#entry654comment</comments>
      <pubDate>Sat, 26 Jan 2019 09:55:01 +0900</pubDate>
    </item>
    <item>
      <title>EQ(EQualizing)에 대한 단상 - 쉬운게 하나도 없다!!</title>
      <link>https://sahngoh.tistory.com/566</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;div style=&quot;text-align: left; width: 95%;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px; width: 500px; height: 279px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2147413E555DDD1E39&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2147413E555DDD1E39&quot; width=&quot;500&quot; height=&quot;279&quot; filename=&quot;cats.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 500px; height: 279px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; width: 95%;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; width: 95%;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; width: 95%;&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;모든 것은 우리가 보는 것과 듣는 것을 카메라나 녹음기로 저장해서 이후에 다시 꺼내 보거나 들을 때의 문제이다.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;사진으로 예를 들면 내가 작업한 사진이 집에서 컴퓨터로 볼 때와 스마트폰으로 볼 때 회사에서 노트북으로 볼 때의 색감은 모두 
다르다. 이러한 현상이 나타나는 이유는 눈으로 인지한 색과 카메라 센서의 광 다이오드가 인지한 색의 수치가 카메라 벤더마다 
다르며, 존재하는 모든 모니터나 프린터가 RGB 데이타에 반응하는 색 또한 모두 다르다.&amp;nbsp; (이런 문제는 그래픽전문가나 사진가와 
같은 사람들에게는 엄청난 스트레스일 것이다.)&amp;nbsp; 그래서 비교적 고가의 캘리브레이션 툴을 이용하여 모니터와 프린터에 기준을 정하는 
작업을 기본으로 하게 되는데, 이러한 작업은 심적인 - 적어도 기준이 틀리지 않는다는 확신하에 - 안정을 가져다준다. &lt;br /&gt;&lt;br /&gt;이러한 생각을 소리에 그대로 대입해보자.&lt;br /&gt;&lt;br /&gt;가수가 녹음실에서 노래를 부른다. 노래는 마이크를 통해서 디지탈로 저장이 되고 저장된 음악은 듣기 좋게(?) 보정(필터)이 되어 
음반이 제작된다. 그 음반을 각종 플레이어에서 다양한 청음기기(Output Device) - 이어폰,헤드폰,스피커 - 를 통해서 
들을 때의 문제이다. 즉, 극 저음부터 극 고음에 이르는 각각의 주파수에 출력 장치마다 반응하는 크기(dB)가 모두 같을 수는 
없다. 심지어는 출력되는 소리를 인지하는 청각마저 개인차가 존재한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;흔히 Flat 하다는 의미가 
각각의 주파수별 반응 하는 수치가 정확하다는 의미로 이것에 준하는 잘 튜닝된 헤드폰이나 스피커가 레퍼런스급이라고 말하기도 한다. 
즉, &quot;Flat 하게 만들다&quot;는 위에서 말한 기준을 세우는 작업이다. 이럴 때 사용되는 방법이 SW나 HW방식의 Equalizer
 를 이용하는데 주파수에 반응 데시벨을 증폭 또는 감쇠하는 필터를 두게 된다. 이렇게 Flat에 준하게 조절한 후에야 주파수별로 
본인의 취향을 반영하는 것 - 이제 EQ라 부르자 - 은 마치 사진 보정에 앞서 칼리브레이션 된 모니터에서 보정을 하는 이유와 
같은 맥락이다. 하지만, 모든 출력장치가 EQ만으로 FALT하게 되지는 않는다. 일부 저가의 출력장치들은 관용도를 심하게 벗어나 
EQ로 보상이 안 될 수도 있다.&lt;br /&gt;&lt;br /&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;script async=&quot;&quot; src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display:block; text-align:center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-5827841599108585&quot; data-ad-slot=&quot;5384980430&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;그런데,, 요놈의 &lt;b&gt;EQ, 나처럼 일반인의 관점에선 절대 쉽지 않다. &lt;/b&gt;&lt;br /&gt;물론, 모니터의 캘리브레이션 툴처럼 헤드폰이나 스피커의 소리를 측정하는 전문적인 계측장비가 없지는 않지만, 역시 일반인이 쉽게 
접근할 수 있는 영역은 아니다. 대안으로 소스의 출력 스펙트럼을 분석하고 직접 귀로 들어보고 심봉사 문고리 잡듯이 조금씩 조절을 
해가며 때에 따라 같은 출력장치를 사용하는 다른 사람들의 보편적 의견에 자신의 귀를 적응시키기도 한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;구글링을 해본 바 Pink Noise와 &lt;b&gt;SignGen&lt;/b&gt; 툴을 이용한 비교적 잘 알려진 방법이 있다.&lt;br /&gt;&lt;a class=&quot;tx-link&quot; target=&quot;_blank&quot; href=&quot;http://www.head-fi.org/a/how-to-equalize-your-headphones-a-tutorial&quot;&gt;&lt;span style=&quot;color: rgb(102, 153, 255);&quot;&gt;http://www.head-fi.org/a/how-to-equalize-your-headphones-a-tutorial&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;평소 자신이 듣는 수준의 크기에서 주파수를 단계별로 이동하면서 싸인파를 발생시키다가 불편한 소리가 나오는 주파수를 발견하면 레벨을 
조정하는 방식으로 EQ을 기록하고, 이렇게 수치화된 값을 Electri Q와 같은 Parametric Equalizer를 이용하여
 적용하는 방법이다. 청음자의 청각에 의지하는 방법인데 훈련만 된다면 가장 좋은 방법일 것이다. 개인적으로 몇 번 시도를 
해보지만, 이것 또한 적잖은 훈련이 필요한 듯 역시 쉽지 않다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;+&lt;br /&gt;대다수의 사람이 EQ 조절없이 그냥 음악을 듣는다. 아니 EQ가 있는지도 모른다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;나도 얼마전까지는 그랬었다. (밥먹을 때 동료에게 이런 고민을 해봤더니 한심한 듯 쳐다보더라..ㅠㅠ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;이 글은 음악을 듣는것 보다 단지 &quot;EQ는 어떻게 하는 거지?&quot;라는 질문에서 출발한 며칠동안 궁금함의 결과이다.&lt;br /&gt;아울러 EQ에 대해 누가 좀 자세하게 알려주면 좋겠다. Plz...ㅠㅠ&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;+&lt;br /&gt;다 필요없다.&lt;br /&gt;들을 때 좋으면 그게 장땡이다.&lt;br /&gt;이 정도 대충 지적 허영심을 채운 것으로 만족하는 것이 가장 행복하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT Tech/Computing</category>
      <category>EQ</category>
      <category>Hi-fi</category>
      <category>음악</category>
      <category>이퀄라이징</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/566</guid>
      <comments>https://sahngoh.tistory.com/566#entry566comment</comments>
      <pubDate>Sun, 6 Jan 2019 22:41:19 +0900</pubDate>
    </item>
    <item>
      <title>파세코 초절전(490W) 무소음 Eco 카본 히터 수령 및 테스트</title>
      <link>https://sahngoh.tistory.com/649</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://mindeater.tistory.com/2108&quot; target=&quot;_blank&quot;&gt;Moved to &lt;/a&gt;&lt;br /&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://mindeater.tistory.com/2108&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(65, 116, 217); font-size: 14pt;&quot;&gt;http://mindeater.tistory.com/2108&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://mindeater.tistory.com/2108&quot; target=&quot;_blank&quot;&gt;&amp;lt;블로그 통합작업으로 게시글이 이동되었습니다.&amp;gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Stuff Things../IT Stuff and Review</category>
      <category>490W</category>
      <category>개봉기</category>
      <category>겨울</category>
      <category>난방기구</category>
      <category>리뷰</category>
      <category>카본히터</category>
      <category>테스트</category>
      <category>파세코</category>
      <category>히터</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/649</guid>
      <comments>https://sahngoh.tistory.com/649#entry649comment</comments>
      <pubDate>Sun, 2 Dec 2018 21:32:40 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 알리표 DIY 키트 인두기 유무선 겸용으로 개조튜닝</title>
      <link>https://sahngoh.tistory.com/636</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998ABC485BB0A45928&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998ABC485BB0A45928&quot; width=&quot;650&quot; height=&quot;433&quot; filename=&quot;09301882_tistory.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;후면과 상단에 DC잭을 달아 맥뱅을 전원소스로 활용할 수 있도록 튜닝함&lt;br /&gt;거치대는 뒤에 보이는 하얀색의 거치대에서 탈거해서 옮겼다.&lt;br /&gt;&lt;br /&gt;훨씬 편하다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;흔히 내장된 smps를 드러내고 대신 18650 배터리를 추가해서 충전식으로 만들지만,,&lt;br /&gt;맥주캔 파워뱅크를 전원으로 연결하는 것이 훨씬 활용도가 좋아보여,,&lt;br /&gt;dc잭만 달아주었다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997DC2485BB0AAFE0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997DC2485BB0AAFE0C&quot; width=&quot;650&quot; height=&quot;433&quot; filename=&quot;09131719.JPG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;아래 노란색 둥그런 녀석은 케이스가 PVC라서 가벼워 안정감을 위해 넣어둔 납이다.&lt;br /&gt;인두 회로는 맨 아래의 전면 패널이고, &lt;br /&gt;중앙의 회로가 220V 교류를 24V DC로 변환후 정류해주는 SMPS이다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;요녀석은 12~24v 모두 가능하지만,&lt;br /&gt;맥뱅의 12V는 달구어지는데 24V보다는 상대적으로 오래 걸린다.&lt;br /&gt;그래서 맨 위 23.7V를 보이고 있는 조그마한 상자에 24V승압회로를 넣어서 활용했다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992667345BB0A45916&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992667345BB0A45916&quot; width=&quot;650&quot; height=&quot;433&quot; filename=&quot;09301877_tistory.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;후면의 모습이다.&lt;br /&gt;&amp;nbsp;이번에 추가된 거치대와 DC잭인데, 아무래도 상단의 DC잭이 편하기 하다.&lt;br /&gt;안정된 전원이 필요한 경우에는 220V를 소스로 사용하면 되겠다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 650px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BB7F495BB0A4591F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BB7F495BB0A4591F&quot; width=&quot;650&quot; height=&quot;433&quot; filename=&quot;09301878_tistory.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;상단의 DC잭,&lt;br /&gt;그리고 인두 거치대,,&lt;br /&gt;그리고.... 스티커 ㅎ&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;[관련 동영상]&lt;br /&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/3bHe6Ss8XkI?rel=0&quot; width=&quot;720&quot; height=&quot;405&quot; allow=&quot;autoplay; encrypted-media&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;관련글&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2262&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AE083E5C91F9AB0D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AE083E5C91F9AB0D&quot; width=&quot;400&quot; height=&quot;267&quot; filename=&quot;zak.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2262&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217);&quot;&gt;[DIY] T12 핸들 온도조절 인두기를 충전식 휴대용 인두기로 개조&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2075&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; width: 400px; height: 266px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B1294F5C6939A203&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B1294F5C6939A203&quot; width=&quot;400&quot; height=&quot;266&quot; filename=&quot;99C0FC455B39DBF408.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 400px; height: 266px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;https://mindeater.tistory.com/2075&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217); font-size: 12pt;&quot;&gt;[D.I.Y] 알리발 온도조절 짝퉁 하코(Hakko) T12 핸들 인두기 DIY 키트(kit) 조립 후기&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2081&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; width: 400px; height: 267px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990BC0415C69390830&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990BC0415C69390830&quot; width=&quot;400&quot; height=&quot;267&quot; filename=&quot;111.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 400px; height: 267px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://mindeater.tistory.com/2081&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(65, 116, 217);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2018/11/19 - [DIY] 컴퓨터 파워서플라이를 이용한&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; DC 가변 전원공급기!겸 T12 온도조절 인두기&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;(DC PowerSupply T12 Solder Station) 만들기!! ^▽^)/&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Stuff Things../D.I.Y</category>
      <category>DIY</category>
      <category>거치대</category>
      <category>다이</category>
      <category>맥뱅</category>
      <category>맥주캔 파워뱅크</category>
      <category>알리표 인두기</category>
      <category>인두기</category>
      <author>MindEater&amp;trade;</author>
      <guid isPermaLink="true">https://sahngoh.tistory.com/636</guid>
      <comments>https://sahngoh.tistory.com/636#entry636comment</comments>
      <pubDate>Mon, 1 Oct 2018 09:09:54 +0900</pubDate>
    </item>
  </channel>
</rss>