<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>http://lhdangerous.godohosting.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PN532_NFC_shield</id>
		<title>PN532 NFC shield - 편집 역사</title>
		<link rel="self" type="application/atom+xml" href="http://lhdangerous.godohosting.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PN532_NFC_shield"/>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;action=history"/>
		<updated>2026-04-18T12:15:29Z</updated>
		<subtitle>이 문서의 편집 역사</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=230&amp;oldid=prev</id>
		<title>2018년 6월 12일 (화) 08:25에 Doguin님의 편집</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=230&amp;oldid=prev"/>
				<updated>2018-06-12T08:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='ko'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2018년 6월 12일 (화) 08:25 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l247&quot; &gt;247번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;247번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;```&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;```&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##주의점&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##주의점&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;아두이노 d12, d13번핀에 입력장치 연결되면 간섭일으키는 것으로 보임. 회로도상에는 12,13번 핀과 아무런 연결없는데 왜 이런 현상일어나는지 모르겠음....&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* 하드웨어 인터럽트 사용시 충돌 일으키는 것으로 보임. 소프트웨어 인터럽트를 사용하는 것으로 해결 [[Software_Interrupt_(소프트웨어_인터럽트)]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* &lt;/ins&gt;아두이노 d12, d13번핀에 입력장치 연결되면 간섭일으키는 것으로 보임. 회로도상에는 12,13번 핀과 아무런 연결없는데 왜 이런 현상일어나는지 모르겠음....&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;좀 더 테스트 필요&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;좀 더 테스트 필요&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=216&amp;oldid=prev</id>
		<title>2018년 6월 11일 (월) 04:01에 Doguin님의 편집</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=216&amp;oldid=prev"/>
				<updated>2018-06-11T04:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='ko'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2018년 6월 11일 (월) 04:01 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l246&quot; &gt;246번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;246번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;```&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;```&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;##주의점&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;아두이노 d12, d13번핀에 입력장치 연결되면 간섭일으키는 것으로 보임. 회로도상에는 12,13번 핀과 아무런 연결없는데 왜 이런 현상일어나는지 모르겠음....&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;좀 더 테스트 필요&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:NFC]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:NFC]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:MiFare]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:MiFare]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:RFID]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:RFID]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	<entry>
		<id>http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=211&amp;oldid=prev</id>
		<title>Doguin: 새 문서: #PN532 NFC shield ![||600](https://cl.ly/s6tV/Image%202018-06-07%20at%203.09.44%20PM.png)   아두이노의 ICSP핀(SPI)을 사용해 다른핀을 충분히 활용할 수 있어 좋...</title>
		<link rel="alternate" type="text/html" href="http://lhdangerous.godohosting.com/wiki/index.php?title=PN532_NFC_shield&amp;diff=211&amp;oldid=prev"/>
				<updated>2018-06-08T06:13:02Z</updated>
		
		<summary type="html">&lt;p&gt;새 문서: #PN532 NFC shield ![||600](https://cl.ly/s6tV/Image%202018-06-07%20at%203.09.44%20PM.png)   아두이노의 ICSP핀(SPI)을 사용해 다른핀을 충분히 활용할 수 있어 좋...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#PN532 NFC shield&lt;br /&gt;
![||600](https://cl.ly/s6tV/Image%202018-06-07%20at%203.09.44%20PM.png)&lt;br /&gt;
&lt;br /&gt;
 아두이노의 ICSP핀(SPI)을 사용해 다른핀을 충분히 활용할 수 있어 좋다나... Adafruit의 PN532 라이브러리를 활용한다.&lt;br /&gt;
&lt;br /&gt;
 ***카드 구입할 때 MIFARE ISO14443A cards/tags 호환을 확인한다!!***&lt;br /&gt;
&lt;br /&gt;
[구입한곳 디바이스마트](http://www.devicemart.co.kr/1383144)&lt;br /&gt;
&lt;br /&gt;
[제조사 위키](https://www.elecrow.com/wiki/index.php?title=NFC_Shield)&lt;br /&gt;
&lt;br /&gt;
##RFID, NFC 그리고 MiFare&lt;br /&gt;
참고: http://baator9.tistory.com/7&lt;br /&gt;
간단히 말하자면 RFID는 NFC를 포함하고 NFC는 MiFare를 포함하는 표준이다. 버스카드, 출입카드 등 어플리케이션에서 mifare가 가장 널리 사용된다. mifare는 저장 용량과 보안유무에 따라 다시 MiFare classic과 Mifare Ultralight로 구분된다.&lt;br /&gt;
&lt;br /&gt;
[MiFare 프로토콜에 대한 자세한 설명 ](https://learn.adafruit.com/adafruit-pn532-rfid-nfc/mifare)&lt;br /&gt;
&lt;br /&gt;
###Mifare Classic&lt;br /&gt;
Mifare Classic 카드(태그)는 저장용량에 따라 1K, 2K, 4K가 있고, 데이터는 아래 표와 같이 16바이트가 하나의 블록으로, 4블록이 하나의 섹터로 구분되어 저장되고 기록된다.&lt;br /&gt;
![||600](https://upload.wikimedia.org/wikipedia/commons/3/39/MiFare_Byte_Layout.png)&lt;br /&gt;
&lt;br /&gt;
기억할 점은 사용자가 기록할 수 있는 블록이 정해져있다는 것.&lt;br /&gt;
&lt;br /&gt;
| block | 용도 |&lt;br /&gt;
|--|--|&lt;br /&gt;
| block#0 				| 제조자 블록으로 카드 아이디번호 등이 담기므로 사용금지. |&lt;br /&gt;
| block#1,2 			| Mifare application 용으로  단순 데이터 저장용으로 사용금지. |&lt;br /&gt;
| block#3,7,11,15,19...	| sector trailer로 보안을 위한 key를 저장하는 곳. (특정한 기기만 특정한 태그를 인식 가능토록 함) |&lt;br /&gt;
| **block#4,5,6, 8,9,10, 12,13,14,...** | **여기에 데이터 저장하자.** |&lt;br /&gt;
&lt;br /&gt;
기초적인 방식의 보안적용되어 블록에 데이터 쓰고 읽을 때 키을 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight&lt;br /&gt;
더 싸고 가벼운 버전의 태그시스템이다. 보안따위는 전혀 없고, 한 블록은 4개 바이트로 이루어져있다. 맨 앞의 4개 블록은 사용자가 쓸 수 없고, 0x04블록부터 사용자 데이터 저장가능하다.&lt;br /&gt;
![||600](https://www.researchgate.net/profile/Flavio_Garcia/publication/255593385/figure/fig6/AS:297841592422425@1448022377757/Memory-of-a-Mifare-Ultralight-tag11.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##라이브러리 설치&lt;br /&gt;
[라이브러리 다운로드](https://www.elecrow.com/wiki/index.php?title=File:PN532_SPI.zip)에서 다운로드 받은 후 아두이노 IDE 메뉴 &amp;gt; 스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; .zip 라이브러리 포함에서 다운받은 zip파일 선택하면 라이브러리 설치 됨.&lt;br /&gt;
&lt;br /&gt;
라이브러리 설치 후 메뉴&amp;gt; 파일 &amp;gt; 예제 &amp;gt; PN532-SPI &amp;gt; readMifareMemory 예제 불러들여 태그 잘 읽히는 지 테스트.&lt;br /&gt;
![||600](https://cl.ly/s6vD/Image%202018-06-07%20at%203.29.43%20PM.png)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##태그서 DATA 읽기&lt;br /&gt;
###MiFare Classic 읽기&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기 ...&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`boolean SAMConfig(void)` 명령으로 장치를 normal mode 로 설정한다. 여기에서 SAM은 'Security Access Module'로, PN532장치를 의미함. 모드는 Normal mode, Virtual Card mode, Wired Card mode, Dual Card mode가 있다.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readPassiveTargetID(uint8_t cardbaudrate)` 명령은 카드를 읽어들인 후 카드의 고유ID를 리턴함. 카드가 없을 때는 0을 리턴.&lt;br /&gt;
&lt;br /&gt;
`uint32_t authenticateBlock(uint8_t cardnumber, uint32_t cid, uint8_t blockaddress, uint8_t authtype, uint8_t* keys)` 명령은 카드의 특정 메모리 블럭에 접근권한 획득.&lt;br /&gt;
&lt;br /&gt;
* cardnumber can be 1 or 2 ( 최대 2장 동시 감지)&lt;br /&gt;
* cid is 32-bit Card ID&lt;br /&gt;
* blockaddress is block number (any number between 0 - 63 for MIFARE card)&lt;br /&gt;
* authtype is which key is to be used for authentication (either KEY_A or KEY_B)&lt;br /&gt;
* keys points to the byte-array holding 6 keys.&lt;br /&gt;
&lt;br /&gt;
`uint32_t readMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드로 실제 블록 데이터를 읽어들여 미리 만들어둔 버퍼(uint8_t 배열 )에 저장한다. 읽기 성공하면 true를 리턴한다.&lt;br /&gt;
&lt;br /&gt;
###MiFare Ultralight 읽기&lt;br /&gt;
classic에서 보안관련 부분만 빼고 데이터 블록 크기는 16 -&amp;gt; 4바이트로.&lt;br /&gt;
&lt;br /&gt;
```C++&lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// SPI로 2개 이상의 장치가 동시에 연결될 때, SS(CS)핀을 D9,혹은 D10을 선택한다. 디폴트는 D10번핀.&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(void){&lt;br /&gt;
	Serial.begin(9600); // 디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// PN532를 Normal Mode로 설정. &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 1block 은 4Byte.&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX);	Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);	&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 태그에 데이터 쓰기&lt;br /&gt;
### Mifare Classic 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[16];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x08, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[16];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x08,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 16; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`uint32_t writeMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block)` 메소드 사용해 인식된 카드중 cardnumber 번째 카드의 blockaddress 블록에 block배열의 내용을 기록함 (16바이트)&lt;br /&gt;
&lt;br /&gt;
### Mifare Ultralight 쓰기&lt;br /&gt;
```C++ &lt;br /&gt;
#include &amp;lt;PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PN532_CS 10&lt;br /&gt;
&lt;br /&gt;
PN532 nfc(PN532_CS);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
	Serial.begin(9600);	//디버깅용&lt;br /&gt;
	nfc.begin();&lt;br /&gt;
	nfc.SAMConfig();	// normal모드 설정 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
	uint32_t id;&lt;br /&gt;
	id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A); 	// 카드 접근 인식&lt;br /&gt;
	if (id != 0){	// 인식 성공하면,&lt;br /&gt;
&lt;br /&gt;
		/*  보안따위 없다.&lt;br /&gt;
		// 블록 0x08에 접근 승인받기&lt;br /&gt;
		uint8_t keys[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};	// 기본 키&lt;br /&gt;
		if (nfc.authenticateBlock(1, id, 0x08, KEY_A, keys)) {	//승인 성공하면, &lt;br /&gt;
		*/&lt;br /&gt;
			// 기록할 데이터&lt;br /&gt;
			uint8_t writeBuffer[4];&lt;br /&gt;
			for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				writeBuffer[i] = i;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 데이터 기록하기&lt;br /&gt;
			bool written = nfc.writeMemoryBlock(1, 0x04, writeBuffer);&lt;br /&gt;
			if (written){&lt;br /&gt;
				Serial.println(&amp;quot;write Successful&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// 기록한 데이터 확인&lt;br /&gt;
			uint8_t readBuffer[4];&lt;br /&gt;
			if (nfc.readMemoryBlock(1,0x04,readBuffer)){		// 읽기 성공하면...&lt;br /&gt;
&lt;br /&gt;
				// 데이터 보여주기&lt;br /&gt;
				 for (int i = 0; i &amp;lt; 4; i++){&lt;br /&gt;
				 	Serial.print(readBuffer[i],HEX); Serial.print(&amp;quot; &amp;quot;);	&lt;br /&gt;
				 }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		Serial.println();&lt;br /&gt;
	}&lt;br /&gt;
	delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
[[category:NFC]]&lt;br /&gt;
[[category:MiFare]]&lt;br /&gt;
[[category:RFID]]&lt;/div&gt;</summary>
		<author><name>Doguin</name></author>	</entry>

	</feed>