一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Adafruit PN532 RFID / NFC的快速入門指南

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-27 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

Adafruit PN532 RFID / NFC的快速入門指南

嘿!因此,這不是完整的教程,它只是快速入門指南,而我們對(duì)RFID/NFC進(jìn)行了更多研究。這里有很多信息,但是沒有詳細(xì)解釋所有內(nèi)容。我們希望填寫本教程,但關(guān)于NFC的信息并不多,因此需要花費(fèi)一些時(shí)間!

突破接線

本部分專門針對(duì)突破板。我們展示了如何在SPI中使用它。該突破還支持TTL串行和I2C,但我們沒有使用該方式的教程,因?yàn)镾PI是最跨平臺(tái)的通信方法。

如果您使用屏蔽,請(qǐng)檢查下一頁

為SPI接線接線 PN532芯片和接線設(shè)計(jì)用于3.3V系統(tǒng)。要將其與Arduino等5V系統(tǒng)一起使用,需要電平轉(zhuǎn)換器高壓轉(zhuǎn)換為3.3V。如果您使用的是3.3V嵌入式系統(tǒng),則當(dāng)然不必使用移位器!

首先,我們將插頭焊接到分線板上。您將需要兩個(gè)小的3針接頭和一個(gè)8針接頭。您可以將它們分解成大塊。

將兩個(gè)小塊焊接到 SEL0 和 SEL1 墊。這些是芯片的接口選擇器。根據(jù)跳線的插入方式,芯片將以TTL串行,i2c或SPI方式進(jìn)行通信。 。/span》

連接如圖所示,將4050電平轉(zhuǎn)換器芯片連接到Arduino。 4050的槽口在此圖中的“頂部”。

Arduino數(shù)字引腳 2 已連接到4050引腳 9 (橙色線)

Arduino數(shù)字引腳 3 連接到4050引腳 11 (黃色線)

Arduino數(shù)字引腳 4 連接到4050引腳 14 (綠線)

在分支板上

3.3Vin 連接到Arduino 3.3V pn

SCK 已連接到4050引腳 10 (橙色線)

MISO 連接到Arduino引腳 5 (藍(lán)線)

MOSI 連接到4050引腳 12 (黃色電線)

SSEL 連接到4050引腳 15&(綠色電線)

GND 連接到Ardui否接地(黑線)

也將4050引腳#1連接到 3.3V ,將引腳#8連接到地面。

點(diǎn)擊查看大圖。紅色電源線應(yīng)連接到Arduino上的 3.3v 引腳!

此外,我們需要選擇SPI作為接口,以便在 SEL1 上將跳線置于 ON 位置。對(duì)于 SEL0 ,將跳線置于 OFF 位置。

就是這樣!稍后您可以更改您使用的Arduino引腳,但是對(duì)于開始的測試,我們建議匹配我們的接線。

《如果您在I2C模式下使用Breakout,則您還需要在SCL/SDA線上添加兩個(gè)1.5K上拉電阻,因?yàn)锽reakout和Arduino不包含上拉電阻。只需在SCL和3.3V之間以及SDA和3.3V之間焊接或添加一個(gè)1.5K電阻,然后按照通常的方式連接該分支即可。

屏蔽線

焊接標(biāo)題第一步是將插頭焊接到屏蔽層上。將標(biāo)題條切成一定長度,然后將各部分(長針向下)插入Arduino。然后將屏蔽層放在頂部并焊接每個(gè)引腳。

Adafruit NFC防護(hù)罩與I2C一起使用 Adafruit NFC防護(hù)罩設(shè)計(jì)用于默認(rèn)情況下為I2C。 I2C僅使用兩個(gè)引腳(模擬4和5,它們?cè)谟布泄潭ㄇ也荒芨模┻M(jìn)行通信,而一個(gè)引腳用作“中斷”引腳(數(shù)字2-可以更改)。 I2C的優(yōu)點(diǎn)是它是一種“共享”總線-與SPI和TTL串行不同-因此,只要它們的地址不沖突/沖突,就可以在同一兩個(gè)引腳上放置任意數(shù)量的傳感器。 Interrupt針很方便,因?yàn)樗粫?huì)不斷詢問NFC防護(hù)罩“是否有卡片視圖?現(xiàn)在怎么辦?”不斷地,當(dāng)NFC目標(biāo)進(jìn)入天線范圍時(shí),芯片會(huì)提醒我們。

該屏蔽罩與ATmega168或‘328等任何經(jīng)典Arduino(UNO,Duemilanove,Diecimilla等)兼容)以及任何Mega R3或更高版本。

Mega R2 Arduino也可以正常工作,但是您需要將 SDA 和 SCL 引腳孔中的導(dǎo)線焊接到數(shù)字#20和#21上的Mega的I2C引腳上。 》

與Arduino Leonardo和Yun

默認(rèn)情況下,IRQ引腳連接到數(shù)字引腳2。但是,在Arduino Leonardo和Yun上,數(shù)字2用于I2C,將無法使用。如果與Leonardo或Yun一起使用,請(qǐng)剪斷IRQ引腳和數(shù)字2之間的走線,并將IRQ引腳上的導(dǎo)線焊接到數(shù)字4或更高版本。然后更改示例代碼,以便將IRQ引腳聲明為新引腳(例如#6),而不是#2

以下是將IRQ引腳設(shè)置為數(shù)字引腳的一些照片6.首先,使用一把鋒利的業(yè)余刀將跡線從IRQ剪切為2

從IRQ到#6

Arduino庫

哪個(gè)庫?

過去,有兩個(gè)單獨(dú)的Arduino庫用于使用Adafruit NFC板。一個(gè)庫支持通過SPI連接的中斷,而另一個(gè)庫支持通過I2C連接的中斷或屏蔽。但是,這兩個(gè)庫都已合并到一個(gè)Arduino庫Adafruit-PN532中。/寫入EEPROM塊。它可以使用SPI或I2C連接與分接器和屏蔽一起使用。

庫安裝

從github下載Adafruit PN532庫。解壓縮該文件夾并重命名文件夾 Adafruit_PN532 。在文件夾內(nèi),您應(yīng)該會(huì)看到 Adafruit_PN532.cpp 和 Adafruit_PN532.h 文件。通過將 Adafruit_PN532 庫文件放置在您的 arduinosketchfolder /libraries 文件夾中,進(jìn)行安裝。如果這是您的第一個(gè)庫,則可能必須創(chuàng)建庫子文件夾。您可以在我們的教程中閱讀有關(guān)安裝庫的更多信息。

重新啟動(dòng)Arduino IDE?,F(xiàn)在,您應(yīng)該可以選擇文件》示例》 Adafruit_PN532》 readMifare 草圖。

如果您通過SPI連接使用NFC分支,使用前一頁上顯示的布線,您可以立即將草圖上載到Arduino,然后跳到“測試MiFare”部分。連接,那么您必須進(jìn)行一些小的更改才能為I2C配置示例。向下滾動(dòng)到草圖頂部附近的這些行:

下載:文件

復(fù)制代碼

// Uncomment just _one_ line below depending on how your breakout or shield

// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:

Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection. Note that

// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino’s

// hardware SPI SCK, MOSI, and MISO pins. On an Arduino Uno these are

// SCK = 13, MOSI = 11, MISO = 12. The SS line can be any digital IO pin.

//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:

//Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); // Uncomment just _one_ line below depending on how your breakout or shield

// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:

Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection. Note that

// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino‘s

// hardware SPI SCK, MOSI, and MISO pins. On an Arduino Uno these are

// SCK = 13, MOSI = 11, MISO = 12. The SS line can be any digital IO pin.

//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:

//Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

更改它們,使第二行不加注釋,第一行加注釋。這將配置草圖,以使庫使用I2C與NFC屏蔽或分支進(jìn)行通信。修改后的代碼應(yīng)如下所示:

下載:文件

復(fù)制代碼

// Uncomment just _one_ line below depending on how your breakout or shield

// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:

//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection. Note that

// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino’s

// hardware SPI SCK, MOSI, and MISO pins. On an Arduino Uno these are

// SCK = 13, MOSI = 11, MISO = 12. The SS line can be any digital IO pin.

//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); // Uncomment just _one_ line below depending on how your breakout or shield

// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:

//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection. Note that

// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino‘s

// hardware SPI SCK, MOSI, and MISO pins. On an Arduino Uno these are

// SCK = 13, MOSI = 11, MISO = 12. The SS line can be any digital IO pin.

//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

然后將示例上傳到Arduino并繼續(xù)。 請(qǐng)注意,您需要進(jìn)行類似的更改以從庫中選擇其他NFC示例的界面。

測試MiFare 在串行監(jiān)視器中,您應(yīng)該看到它找到了 PN532 芯片。然后,您可以將標(biāo)簽放在附近,它將顯示4個(gè)字節(jié)的ID碼(這個(gè)是0xAE 0x4C 0xF0 0x6C),然后是所有四個(gè)字節(jié)的整數(shù)版本。您可以使用該號(hào)碼來識(shí)別每張卡。最近,恩智浦制造了如此多的卡,以至于實(shí)際上它們可以遍歷所有4個(gè)字節(jié)(2 ^ 32),因此不能保證數(shù)字絕對(duì)唯一。但是,您將擁有兩張具有相同ID的卡的機(jī)會(huì)非常渺茫,只要您不將這些卡用于非常重要的事情(例如轉(zhuǎn)賬),就可以將其用作唯一標(biāo)識(shí)符

Python和CircuitPython

很容易將PN532分支和屏蔽與Python和CircuitPython以及Adafruit CircuitPython PN532模塊一起使用。此模塊可讓您輕松編寫可在RFID/NFC標(biāo)簽之間進(jìn)行數(shù)據(jù)讀寫的Python代碼。

您可以將Breakout與任何CircuitPython微控制器板或具有GPIO和Python的計(jì)算機(jī)配合使用,這是由于Adafruit_Blinka,我們的CircuitPython-for-Python兼容性庫。

CircuitPython微控制器接線

首先完全按照前一頁所示組裝PN532分支或屏蔽。

下面是使用I2C將Feather M0接線到分支的示例:

板3V 至突破3.3V

板GND 至突破GND

主板SCL 到突破SCL

主板SDA 到突破SDA

D6板到突破RSTOUT_N

I2C要求SCL和SDA上的外部上拉電阻!

您必須設(shè)置跳線以在PN532上啟用I2C!對(duì)于I2C:

SEL0 = ON

SEL1 = OFF

div》

下面是使用SPI將Feather M0連接到突破的示例:

3V板以突破3.3V

板GND 至斷開GND

板MISO 至突破MISO

Board MOSI 至突破MOSI

Board SCK 到突破SCK

D5板到突破SSEL

您必須設(shè)置跳線以在PN532上啟用SPI!對(duì)于SPI:

SEL0 = OFF

SEL1 = ON

下面是使用UART將Feather M0連接到突破口的示例:

3V板以突破3.3V

電路板GND 至斷開GND

電路板RX 至突破TX

板TX 到突破RX

您必須設(shè)置跳線以在PN532上啟用UART!對(duì)于UART:

SEL0 = OFF

SEL1 = OFF

下面是使用I2C將Metro M0連接到屏蔽的示例:

按照前幾頁所示組裝防護(hù)罩,然后將其插入Metro M0。

您必須設(shè)置跳線以在PN532上啟用I2C!對(duì)于I2C:

SEL0 = ON

SEL1 = OFF

div》

Python計(jì)算機(jī)接線

由于可以使用數(shù)十臺(tái) Linux計(jì)算機(jī)/主板,我們將顯示Raspberry Pi的接線。對(duì)于其他平臺(tái),請(qǐng)?jiān)L問Linux上的CircuitPython指南,以了解您的平臺(tái)是否受支持。

此突破口旨在與I2C,SPI和UART配合使用,但是I2C和UART在RASPBERRY PI上不能可靠地工作。如果您將PN532與Raspberry Pi一起使用,請(qǐng)使用SPI!

以下是與SPI相連的Raspberry Pi:

Pi 3V 》至突破3.3V

Pi GND 至突破GND

Pi MOSI 到突破MOSI

Pi MISO 到突破MISO

Pi SCLK 到突破SCK

Pi D5 到突破SSEL

您必須設(shè)置跳線以在PN532上啟用SPI!對(duì)于SPI:

SEL0 = OFF

SEL1 = ON

我們不建議使用I2C ,但這是與I2C相連的Raspberry Pi:

Pi 3V 至突破3.3V

Pi GND 至突破GND

Pi SCL 到突破SCL

Pi SDA 到突破SDA

Pi D6 以突破RSTPD_N

Pi D12 以突破P32

您必須設(shè)置跳線以在PN532上啟用I2C!對(duì)于I2C:

SEL0 = ON

SEL1 = OFF

div》

我們不建議使用UART ,但這是與UART相連的Raspberry Pi:

您必須設(shè)置跳線以在PN532上啟用UART!對(duì)于UART:

Pi 3V 至突破3.3V

Pi GND 至突破GND

Pi RXD 到突破TX

Pi TXD 到突破RX

SEL0 = OFF

SEL1 = OFF

CircuitPython安裝

下一步,您需要在CircuitPython板上安裝Adafruit CircuitPython PN532庫。

首先請(qǐng)確保您正在為板運(yùn)行最新版本的Adafruit CircuitPython。

下一步,您需要安裝必要的庫才能使用硬件-仔細(xì)按照以下步驟從Adafruit的CircuitPython庫包中查找并安裝這些庫。我們的簡介指南上有一個(gè)很棒的頁面,介紹如何為快速和非表達(dá)板安裝庫包。

請(qǐng)記住非表達(dá)板,例如,您需要從束中手動(dòng)安裝必要的庫:

adafruit_pn532.mpy

adafruit_bus_device

在繼續(xù)制作之前確保您開發(fā)板上的lib文件夾或根文件系統(tǒng)已復(fù)制 adafruit_pn532.mpy 和 adafruit_bus_device 文件和文件夾。

下一步連接到開發(fā)板的串行REPL,這樣您就可以在CircuitPython上運(yùn)行》》》 提示。

PN532庫的Python安裝

您將需要安裝Adafruit_Blinka庫,該庫在Python中提供了CircuitPython支持。這可能還需要在您的平臺(tái)上啟用I2C并驗(yàn)證您正在運(yùn)行Python3。由于每個(gè)平臺(tái)都略有不同,并且Linux經(jīng)常更改,請(qǐng)?jiān)L問Linux上的CircuitPython指南以準(zhǔn)備好您的計(jì)算機(jī)!

完成后,從命令行運(yùn)行以下命令:

sudo pip3 install adafruit-circuitpython-pn532

如果您的默認(rèn)Python是版本3,則可能需要改為運(yùn)行“ pip”。只要確保您不嘗試在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python使用情況

為演示該突破的用法,我們將對(duì)其進(jìn)行初始化,并使用開發(fā)板的Python REPL從標(biāo)簽讀取ID

運(yùn)行以下代碼以導(dǎo)入必要的模塊,并將復(fù)位引腳分配到板上的數(shù)字引腳。我們使用了D6:

下載:文件

復(fù)制代碼

import board

import busio

from digitalio import DigitalInOut

from adafruit_pn532.i2c import PN532_I2C

reset_pin = DigitalInOut(board.D6) import board

import busio

from digitalio import DigitalInOut

from adafruit_pn532.i2c import PN532_I2C

reset_pin = DigitalInOut(board.D6)

在Raspberry Pi上,還必須將引腳連接到P32“ H_Request”以進(jìn)行硬件喚醒。這樣可以避免I2C時(shí)鐘延長。

下載:文件

復(fù)制代碼

req_pin = DigitalInOut(board.D12) req_pin = DigitalInOut(board.D12)

初始化I2C對(duì)象:

下載:文件

復(fù)制代碼

i2c = busio.I2C(board.SCL, board.SDA)

pn532 = PN532_I2C(i2c, debug=False, reset=reset_pin, req=req_pin) i2c = busio.I2C(board.SCL, board.SDA)

pn532 = PN532_I2C(i2c, debug=False, reset=reset_pin, req=req_pin)

現(xiàn)在我們可以開始進(jìn)行交互了具有以下功能的NFC/RFID標(biāo)簽:

get_firmware_version -獲取最新的固件版本。

SAM_configuration-將PN532配置為讀取MiFare卡。

read_passive_target-等待MiFare卡可用并返回

call_function-將指定的命令發(fā)送到PN532,并期望返回最多response_length個(gè)字節(jié)。

mifare_classic_authenticate_block-驗(yàn)證MiFare經(jīng)典卡的指定塊號(hào)。

mifare_classic_read_block-從卡中讀取數(shù)據(jù)塊。

mifare_classic_write_block-將數(shù)據(jù)塊寫入卡中。

ntag2xx_read_block-從卡中讀取數(shù)據(jù)塊。

ntag2xx_write_block-寫入

首先,我們將驗(yàn)證PN532是否已連接并檢查固件。

下載:文件

復(fù)制代碼

ic, ver, rev, support = pn532.get_firmware_version()

print(’Found PN532 with firmware version: {0}。{1}‘.format(ver, rev)) ic, ver, rev, support = pn532.get_firmware_version()

print(’Found PN532 with firmware version: {0}。{1}‘.format(ver, rev))

《現(xiàn)在,我們將配置PN532以讀取MiFare卡。然后,我們將等待卡可用并打印UID。

首先,我們檢查卡是否可用。在等待時(shí),我們將。打印到串行輸出,因此我們知道它仍在查找。如果找不到卡,我們將繼續(xù)尋找。找到卡后,我們將打印UID。

下載:文件

復(fù)制代碼

pn532.SAM_configuration()

while True:

uid = pn532.read_passive_target(timeout=0.5)

print(’?!?, end=“”, flush=True)

if uid is None:

continue

print(’Found card with UID:‘, [hex(i) for i in uid]) pn532.SAM_configuration()

while True:

uid = pn532.read_passive_target(timeout=0.5)

print(’。‘, end=“”, flush=True)

if uid is None:

continue

print(’Found card with UID:‘, [hex(i) for i in uid])

觸摸MiFare卡即可突破!

使用CircuitPython從卡中讀取UID就是全部還有PN532!有關(guān)更多信息,請(qǐng)查看文檔。

完整示例代碼

下載:Project Zip 或 pn532_simpletest.py | 在Github上查看

復(fù)制代碼

“”“

This example shows connecting to the PN532 with I2C (requires clock

stretching support), SPI, or UART. SPI is best, it uses the most pins but

is the most reliable and universally supported.

After initialization, try waving various 13.56MHz RFID cards over it!

”“”

import board

import busio

from digitalio import DigitalInOut

#

# NOTE: pick the import that matches the interface being used

#

from adafruit_pn532.i2c import PN532_I2C

#from adafruit_pn532.spi import PN532_SPI

#from adafruit_pn532.uart import PN532_UART

# I2C connection:

i2c = busio.I2C(board.SCL, board.SDA)

# Non-hardware

#pn532 = PN532_I2C(i2c, debug=False)

# With I2C, we recommend connecting RSTPD_N (reset) to a digital pin for manual

# harware reset

reset_pin = DigitalInOut(board.D6)

# On Raspberry Pi, you must also connect a pin to P32 “H_Request” for hardware

# wakeup! this means we don’t need to do the I2C clock-stretch thing

req_pin = DigitalInOut(board.D12)

pn532 = PN532_I2C(i2c, debug=False, reset=reset_pin, req=req_pin)

# SPI connection:

#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

#cs_pin = DigitalInOut(board.D5)

#pn532 = PN532_SPI(spi, cs_pin, debug=False)

# UART connection

#uart = busio.UART(board.TX, board.RX, baudrate=115200, timeout=100)

#pn532 = PN532_UART(uart, debug=False)

ic, ver, rev, support = pn532.get_firmware_version()

print(‘Found PN532 with firmware version: {0}。{1}’.format(ver, rev))

# Configure PN532 to communicate with MiFare cards

pn532.SAM_configuration()

print(‘Waiting for RFID/NFC card.。.’)

while True:

# Check if a card is available to read

uid = pn532.read_passive_target(timeout=0.5)

print(‘?!?, end=“”)

# Try again if no card is available.

if uid is None:

continue

print(‘Found card with UID:’, [hex(i) for i in uid])

“”“

This example shows connecting to the PN532 with I2C (requires clock

stretching support), SPI, or UART. SPI is best, it uses the most pins but

is the most reliable and universally supported.

After initialization, try waving various 13.56MHz RFID cards over it!

”“”

import board

import busio

from digitalio import DigitalInOut

#

# NOTE: pick the import that matches the interface being used

#

from adafruit_pn532.i2c import PN532_I2C

#from adafruit_pn532.spi import PN532_SPI

#from adafruit_pn532.uart import PN532_UART

# I2C connection:

i2c = busio.I2C(board.SCL, board.SDA)

# Non-hardware

#pn532 = PN532_I2C(i2c, debug=False)

# With I2C, we recommend connecting RSTPD_N (reset) to a digital pin for manual

# harware reset

reset_pin = DigitalInOut(board.D6)

# On Raspberry Pi, you must also connect a pin to P32 “H_Request” for hardware

# wakeup! this means we don‘t need to do the I2C clock-stretch thing

req_pin = DigitalInOut(board.D12)

pn532 = PN532_I2C(i2c, debug=False, reset=reset_pin, req=req_pin)

# SPI connection:

#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

#cs_pin = DigitalInOut(board.D5)

#pn532 = PN532_SPI(spi, cs_pin, debug=False)

# UART connection

#uart = busio.UART(board.TX, board.RX, baudrate=115200, timeout=100)

#pn532 = PN532_UART(uart, debug=False)

ic, ver, rev, support = pn532.get_firmware_version()

print(’Found PN532 with firmware version: {0}。{1}‘.format(ver, rev))

# Configure PN532 to communicate with MiFare cards

pn532.SAM_configuration()

print(’Waiting for RFID/NFC card.。.‘)

while True:

# Check if a card is available to read

uid = pn532.read_passive_target(timeout=0.5)

print(’?!?, end=“”)

# Try again if no card is available.

if uid is None:

continue

print(’Found card with UID:‘, [hex(i) for i in uid])

關(guān)于NFC

NFC(近場)通信) NFC(近場通信)是一組短距離(通常長達(dá)10厘米)的無線通信技術(shù),旨在在兩個(gè)設(shè)備之間提供輕巧安全的通信。 NFC是由NXP(當(dāng)時(shí)為Phillips),諾基亞和Sony發(fā)明的,如今NFC“標(biāo)準(zhǔn)”背后的主體是NFC論壇,負(fù)責(zé)發(fā)布和維護(hù)與NFC技術(shù)有關(guān)的各種標(biāo)準(zhǔn)。 》 NFC以13.56MHz的頻率運(yùn)行,并基于“啟動(dòng)器”和“目標(biāo)”模型,其中啟動(dòng)器會(huì)產(chǎn)生一個(gè)小的磁場來為目標(biāo)供電,這意味著目標(biāo)不需要電源。這種通信方式稱為 Passive Communication (被動(dòng)通信),用于根據(jù)ISO14443A等標(biāo)準(zhǔn)讀寫小型,廉價(jià)的13.56MHz RFID標(biāo)簽。當(dāng)兩個(gè)設(shè)備都通電時(shí),主動(dòng)通信(對(duì)等)也是可能的,其中每個(gè)設(shè)備交替創(chuàng)建自己的磁場,以輔助設(shè)備為目標(biāo),反之亦然。/div》

被動(dòng)通信:ISO14443A卡(Mifare等)雖然NXP的PN53x收發(fā)器系列與許多13.56MHz RFID卡標(biāo)準(zhǔn)兼容,但到目前為止,最受歡迎的標(biāo)準(zhǔn)是ISO14443A。許多制造商都生產(chǎn)與ISO14443A兼容的卡或芯片,但最常見的是基于NXP的 Mifare 系列。盡管也存在許多具有改進(jìn)的安全性和加密功能的標(biāo)簽(Mifare DESFire等),但Mifare Classic和Mifare Ultralight可能是最常遇到且對(duì)基礎(chǔ)項(xiàng)目有用的標(biāo)簽。 adafruit.com上出售的所有標(biāo)簽均為Mifare Classic 1K,這意味著它們包含1K(1024字節(jié))的可編程EEPROM存儲(chǔ)器,可以由啟動(dòng)器設(shè)備(PN532)以被動(dòng)模式讀取和修改。

所有ISO14443A卡在最高級(jí)別上具有某些共同的特征(由四部分標(biāo)準(zhǔn)定義),每組Mifare芯片(經(jīng)典,超輕,Plus,DESFire等)都有其自身的功能和特點(diǎn)。以下是兩種最常見的格式:

Mifare Classic:這些卡極為常見,包含1K或4K EEPROM,每64字節(jié)(1K/4K卡)具有基本安全性。 )或256字節(jié)(4K卡)扇區(qū)。

Mifare Ultralight:包含512字節(jié)的EEPROM,包括32位的OTP內(nèi)存。這些標(biāo)簽價(jià)格便宜,通常采用不干膠標(biāo)簽格式,并經(jīng)常用于交通票務(wù),音樂會(huì)票等。

主動(dòng)通信(點(diǎn)對(duì)點(diǎn)) 主動(dòng)或“點(diǎn)對(duì)點(diǎn)”通信仍然基于先前描述的啟動(dòng)器/目標(biāo)模型,但是兩個(gè)設(shè)備都處于主動(dòng)供電狀態(tài),并且在通信期間將角色從啟動(dòng)器或目標(biāo)切換為目標(biāo)。當(dāng)一個(gè)設(shè)備發(fā)起與另一設(shè)備的對(duì)話時(shí),它會(huì)啟用它的磁場,而接收設(shè)備會(huì)監(jiān)聽(禁用自己的磁場)。此后,目標(biāo)/接收設(shè)備可能需要響應(yīng)并依次激活其自身的磁場,而原始設(shè)備將被配置為目標(biāo)。盡管存在兩個(gè)設(shè)備,但一次僅激活一個(gè)磁場,每個(gè)設(shè)備都會(huì)不斷啟用或禁用自己的磁場。

ToDo:添加對(duì)激活模式的更好描述,但是我需要先自己測試一下!

NFC數(shù)據(jù)交換格式(NDEF) NFC數(shù)據(jù)交換格式(NDEF)是一種標(biāo)準(zhǔn)化的數(shù)據(jù)格式,可用于在任何兼容的NFC設(shè)備與另一個(gè)NFC設(shè)備或標(biāo)簽之間交換信息。數(shù)據(jù)格式由 NDEF郵件和 NDEF記錄組成。該標(biāo)準(zhǔn)由NFC論壇維護(hù),可以免費(fèi)進(jìn)行協(xié)商,但需要接受許可協(xié)議才能下載。

NDEF格式用于存儲(chǔ)和交換URI,純文本等信息,使用的是一種常見的格式。 ??梢詫ifare Classic卡之類的NFC標(biāo)簽配置為NDEF標(biāo)簽,并且任何其他NDEF兼容設(shè)備都可以理解和訪問由一個(gè)NFC設(shè)備寫入它們的數(shù)據(jù)(NDEF記錄)。 NDEF消息還可以用于在“對(duì)等”模式下的兩個(gè)活動(dòng)NFC設(shè)備之間交換數(shù)據(jù)。通過在通信過程中遵守NDEF數(shù)據(jù)交換格式,原本互不了解或沒有通用語言的設(shè)備便能夠以一種有組織的,可相互理解的方式共享數(shù)據(jù)。

NDEF標(biāo)準(zhǔn)包括許多 Record類型定義(RTD),用于定義應(yīng)如何存儲(chǔ)諸如URI之類的信息,并且每個(gè)NDEF設(shè)備,標(biāo)簽或消息可以包含多個(gè)RTD。 NFC論壇維護(hù)的“ NFC記錄類型定義(RTD)規(guī)范”中描述了標(biāo)準(zhǔn)RTD定義。

* NDEF概述:此頁面提供了NDEF的更詳細(xì)說明,包括如何使用Mifare Classic卡存儲(chǔ)NDEF。消息。

注意:NDEF專用頁面仍在開發(fā)中,某些信息當(dāng)前不完整。

閱讀有關(guān)NFC/RFID和該芯片的更多詳細(xì)信息,我們建議使用以下精彩資源:

RFID選擇指南-大量有關(guān)RFID的詳細(xì)信息

諾基亞NFC簡介-大量有關(guān)NFC的詳細(xì)信息

NXP S50芯片數(shù)據(jù)表,芯片內(nèi)部 MiFare經(jīng)典標(biāo)簽

NXP PN532簡短數(shù)據(jù)表

NXP PN532長格式數(shù)據(jù)表

NXP PN532用戶手冊(cè)

NXP PN532應(yīng)用筆記

在libnfc中使用PN532

NFC詞匯表

MiFare卡和標(biāo)簽

MiFare是四個(gè)13.56MHz卡“協(xié)議”之一(FeliCa是另一個(gè)著名的協(xié)議)。所有在Adafruit出售的卡和標(biāo)簽商店使用廉價(jià)且流行的MiFare Classic卡組

MiFare Classic卡 MIFARE Classic卡有1K和4K兩種。盡管存在幾種芯片,但以下公開可獲得的文檔中描述了使用的兩個(gè)主要芯片組:

MF1S503x Mifare Classic 1K數(shù)據(jù)表

MF1S70yyX MIFARE Classic 4K數(shù)據(jù)表

Mifare Classic卡通常具有 4字節(jié)NUID ,可唯一地(在值的數(shù)字范圍內(nèi))識(shí)別卡??赡芤部梢杂?個(gè)字節(jié)的ID,但4字節(jié)模型在Mifare Classic中更為常見。

EEPROM存儲(chǔ)器 Mifare Classic卡具有1K或4K的EEPROM存儲(chǔ)器。每個(gè)內(nèi)存塊可以配置有不同的訪問條件,每個(gè)內(nèi)存塊中都有兩個(gè)單獨(dú)的身份驗(yàn)證密鑰。

Mifare Classic卡分為扇區(qū)和 blocks 部分。每個(gè)“扇區(qū)”都有各自的訪問權(quán)限,并包含由這些訪問權(quán)限控制的固定數(shù)量的“塊”。每個(gè)塊包含16個(gè)字節(jié),扇區(qū)包含4個(gè)塊(1K/4K卡),每個(gè)扇區(qū)總共64個(gè)字節(jié),或者16個(gè)塊(僅4K卡),每個(gè)扇區(qū)總共256個(gè)字節(jié)。卡的類型如下:

1K卡-16個(gè)扇區(qū),每個(gè)扇區(qū)4個(gè)塊(扇區(qū)0..15)

4K卡-32個(gè)扇區(qū),每個(gè)4塊(扇區(qū)0..31)和8個(gè)扇區(qū),每個(gè)16塊(扇區(qū)32..39)

4個(gè)塊扇區(qū) 1K和4K卡都使用16個(gè)扇區(qū),每個(gè)扇區(qū)4個(gè)塊,并且出于兼容性方面的考慮,4K卡上的底部1K內(nèi)存與1K型號(hào)組織相同。這些單獨(dú)的4個(gè)塊扇區(qū)(每個(gè)塊包含64個(gè)字節(jié))具有基本的安全功能,每個(gè)扇區(qū)都可以配置有單獨(dú)的讀/寫訪問權(quán)限和兩個(gè)不同的6字節(jié)身份驗(yàn)證密鑰(每個(gè)扇區(qū)的密鑰可以不同)。由于這些安全功能(存儲(chǔ)在最后一個(gè)塊中,稱為 Sector Trailer ),每個(gè)扇區(qū)的最后3個(gè)塊實(shí)際上才可用于數(shù)據(jù)存儲(chǔ),這意味著每64字節(jié)有48字節(jié)供您自己使用的扇區(qū)。

每個(gè)4塊扇區(qū)的組織方式如下,每行四個(gè)16字節(jié)的行,每個(gè)扇區(qū)總共64字節(jié)。顯示任何卡的前兩個(gè)扇區(qū):

下載:文件

復(fù)制代碼

Sector Block Bytes Description

------ ----- ----- -----------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Sector Block Bytes Description

------ ----- ----- -----------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

下載:文件

復(fù)制代碼

1 3 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer

2 [ Data ] Data

1 [ Data ] Data

0 [ Data ] Data 1 3 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer

2 [ Data ] Data

1 [ Data ] Data

0 [ Data ] Data

下載:文件

復(fù)制代碼

0 3 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer

2 [ Data ] Data

1 [ Data ] Data

0 [ Manufacturer Data ] Manufacturer Block 0 3 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer

2 [ Data ] Data

1 [ Data ] Data

0 [ Manufacturer Data ] Manufacturer Block

部門預(yù)告片(第3塊)

扇區(qū)尾部塊包含兩個(gè)密鑰(密鑰A和密鑰B),以及這四個(gè)塊的訪問條件。它具有以下結(jié)構(gòu):

下載:文件

復(fù)制代碼

Sector Trailer Bytes

--------------------------------------------------------------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

[ Key A ] [Access Bits] [ Key B ] Sector Trailer Bytes

--------------------------------------------------------------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

[ Key A ] [Access Bits] [ Key B ]

有關(guān)使用鍵訪問時(shí)鐘內(nèi)容的更多信息,請(qǐng)參見下面的訪問數(shù)據(jù)塊。

數(shù)據(jù)塊(0..2塊)

數(shù)據(jù)塊為16字節(jié)寬,根據(jù)訪問位中設(shè)置的權(quán)限,可以讀取和寫入數(shù)據(jù)塊。您可以隨意使用16個(gè)數(shù)據(jù)字節(jié)。您可以輕松地存儲(chǔ)文本輸入,存儲(chǔ)四個(gè)32位整數(shù)值,一個(gè)16個(gè)字符的uri等。

數(shù)據(jù)塊作為“值塊”

將隨機(jī)數(shù)據(jù)存儲(chǔ)在16個(gè)字節(jié)寬的塊將它們配置為“值塊”。價(jià)值塊允許執(zhí)行電子錢包功能(有效命令為:讀取,寫入,遞增,遞減,還原,傳輸)。每個(gè)價(jià)值塊均包含一個(gè)帶符號(hào)的32位值,該值存儲(chǔ)3次以確保數(shù)據(jù)完整性和安全性原因。它被存儲(chǔ)兩次不取反,一次取反。后4個(gè)字節(jié)用于1個(gè)字節(jié)的地址,該地址存儲(chǔ)4次(兩次非反相,兩次反相)。

配置為“值塊”的數(shù)據(jù)塊具有以下結(jié)構(gòu):

下載:文件

復(fù)制代碼

Value Block Bytes

--------------------------------------------------------------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

[ Value ] [ ~Value ] [ Value ] [A ~A A ~A] Value Block Bytes

--------------------------------------------------------------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

[ Value ] [ ~Value ] [ Value ] [A ~A A ~A]

制造商塊(扇區(qū)0,塊0)

扇區(qū)0是特殊的,因?yàn)樗圃焐虊K。該塊包含制造商數(shù)據(jù),并且是只讀的。除非您知道自己在做什么,否則應(yīng)該避免。

16個(gè)塊扇區(qū) 16個(gè)塊扇區(qū)與4個(gè)塊扇區(qū)相同,但具有更多的數(shù)據(jù)塊。上面4個(gè)塊扇區(qū)中描述的結(jié)構(gòu)相同。

下載:文件

復(fù)制代碼

Sector Block Bytes Description

------ ----- ----- ----------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Sector Block Bytes Description

------ ----- ----- ----------

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

下載:file

復(fù)制代碼

32 15 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer 32

14 [ Data ] Data

13 [ Data ] Data

。..

2 [ Data ] Data

1 [ Data ] Data

0 [ Data ] Data 32 15 [-------KEY A-------] [Access Bits] [-------KEY B-------] Sector Trailer 32

14 [ Data ] Data

13 [ Data ] Data

。..

2 [ Data ] Data

1 [ Data ] Data

0 [ Data ] Data

訪問EEPROM內(nèi)存要訪問卡上的EEPROM,您需要執(zhí)行以下步驟:

您必須檢索4字節(jié)的NUID卡(有時(shí)也可以是7字節(jié)長,盡管Mifare Classic卡很少)。這對(duì)于后續(xù)的身份驗(yàn)證過程是必需的。

您必須通過傳遞適當(dāng)?shù)?字節(jié)身份驗(yàn)證密鑰,根據(jù)該扇區(qū)的“扇區(qū)尾部”塊中定義的訪問規(guī)則,對(duì)希望訪問的扇區(qū)進(jìn)行身份驗(yàn)證。例如:新卡0xFF 0xFF 0xFF 0xFF 0xFF 0xFF。

一旦身份驗(yàn)證成功,然后根據(jù)扇區(qū)權(quán)限,您就可以讀取/寫入/遞增/遞減特定塊的內(nèi)容。請(qǐng)注意,您需要為訪問的每個(gè)扇區(qū)重新進(jìn)行身份驗(yàn)證,因?yàn)槊總€(gè)扇區(qū)可以具有自己的不同訪問密鑰和權(quán)限!

身份驗(yàn)證注意事項(xiàng) 在可以訪問扇區(qū)的內(nèi)存之前,您首先需要“驗(yàn)證”根據(jù)存儲(chǔ)在Sector Trailer中的安全設(shè)置。默認(rèn)情況下,通常將任何新卡配置為允許使用密鑰A和值0xFF 0xFF 0xFF 0xFF 0xFF 0xFF完全訪問扇區(qū)中的每個(gè)塊。如果這不起作用,您可能希望嘗試使用其他一些常見的密鑰:

下載:文件

復(fù)制代碼

0XFF 0XFF 0XFF 0XFF 0XFF 0XFF

0XD3 0XF7 0XD3 0XF7 0XD3 0XF7

0XA0 0XA1 0XA2 0XA3 0XA4 0XA5

0XB0 0XB1 0XB2 0XB3 0XB4 0XB5

0X4D 0X3A 0X99 0XC3 0X51 0XDD

0X1A 0X98 0X2C 0X7E 0X45 0X9A

0XAA 0XBB 0XCC 0XDD 0XEE 0XFF

0X00 0X00 0X00 0X00 0X00 0X00

0XAB 0XCD 0XEF 0X12 0X34 0X56 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF

0XD3 0XF7 0XD3 0XF7 0XD3 0XF7

0XA0 0XA1 0XA2 0XA3 0XA4 0XA5

0XB0 0XB1 0XB2 0XB3 0XB4 0XB5

0X4D 0X3A 0X99 0XC3 0X51 0XDD

0X1A 0X98 0X2C 0X7E 0X45 0X9A

0XAA 0XBB 0XCC 0XDD 0XEE 0XFF

0X00 0X00 0X00 0X00 0X00 0X00

0XAB 0XCD 0XEF 0X12 0X34 0X56

新Mifare Classic 1K卡的示例 以下內(nèi)存轉(zhuǎn)儲(chǔ)說明了1K Mifare Classic卡的結(jié)構(gòu),其中數(shù)據(jù)和扇區(qū)可以清楚看到預(yù)告片:

下載:文件

復(fù)制代碼

[--------------------------Start of Memory Dump--------------------------]

------------------------Sector 0-------------------------

Block 0 8E 02 6F 66 85 08 04 00 62 63 64 65 66 67 68 69 ?.of?。..bcdefghi

Block 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 3 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 1-------------------------

Block 4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 7 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 2-------------------------

Block 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 11 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 3-------------------------

Block 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 15 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 4-------------------------

Block 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 19 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 5-------------------------

Block 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 23 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 6-------------------------

Block 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 27 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 7-------------------------

Block 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 31 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 8-------------------------

Block 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 35 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 9-------------------------

Block 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 39 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 10-------------------------

Block 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 43 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 11-------------------------

Block 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 47 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 12-------------------------

Block 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 51 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 13-------------------------

Block 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 55 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 14-------------------------

Block 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 59 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 15-------------------------

Block 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 63 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

[---------------------------End of Memory Dump---------------------------] [--------------------------Start of Memory Dump--------------------------]

------------------------Sector 0-------------------------

Block 0 8E 02 6F 66 85 08 04 00 62 63 64 65 66 67 68 69 ?.of?。..bcdefghi

Block 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 3 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 1-------------------------

Block 4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 7 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 2-------------------------

Block 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 11 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 3-------------------------

Block 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 15 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 4-------------------------

Block 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 19 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 5-------------------------

Block 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 23 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 6-------------------------

Block 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 27 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 7-------------------------

Block 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 31 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 8-------------------------

Block 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 35 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 9-------------------------

Block 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 39 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 10-------------------------

Block 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 43 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 11-------------------------

Block 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 47 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 12-------------------------

Block 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 51 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 13-------------------------

Block 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 55 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 14-------------------------

Block 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 59 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

------------------------Sector 15-------------------------

Block 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 63 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 。..。..?。?i??????

[---------------------------End of Memory Dump---------------------------]

MiFare Ultralight卡 MiFare Ultralight卡通常包含512位(64字節(jié))的內(nèi)存,其中包括4字節(jié)(32位)的OTP(一次性可編程)內(nèi)存,可以在其中寫入各個(gè)位,但

MF0ICU1 MiFare Ultralight功能規(guī)范

MiFare Ultralight卡具有 7字節(jié)UID 唯一地標(biāo)識(shí)卡。

EEPROM存儲(chǔ)器 MiFare Ultralight卡具有512位(64字節(jié))的EEPROM存儲(chǔ)器,其中包括4字節(jié)(32位)的OTP存儲(chǔ)器。與Mifare Classic卡不同,盡管可以使用鎖定字節(jié)(如下所述)將塊設(shè)置為“只讀”模式,但每個(gè)塊都沒有身份驗(yàn)證。EEPROM存儲(chǔ)器分為16頁,每頁四個(gè)字節(jié),順序如下:

下載:文件

復(fù)制代碼

Page Description

---- ------------

0 Serial Number (4 bytes)

1 Serial Number (4 bytes)

2 Byte 0: Serial Number

Byte 1: Internal Memory

Byte 2..3: lock bytes

3 One-time programmable memory (4 bytes)

4..15 User memory (4 bytes) Page Description

---- ------------

0 Serial Number (4 bytes)

1 Serial Number (4 bytes)

2 Byte 0: Serial Number

Byte 1: Internal Memory

Byte 2..3: lock bytes

3 One-time programmable memory (4 bytes)

4..15 User memory (4 bytes)

以下是按表格格式排列的頁面和塊:

下載:文件

復(fù)制代碼

Page Block 0 Block 1 Block 2 Block 3

----- ---------------------------------------

0 [ Serial Number ]

1 [ Serial Number ]

2 [Serial] - [Intern] - [ Lock Bytes ]

3 [ One Time Programmable Memory ]

4 [ User Data ]

5 [ User Data ]

6 [ User Data ]

7 [ User Data ]

8 [ User Data ]

9 [ User Data ]

10 [ User Data ]

11 [ User Data ]

12 [ User Data ]

13 [ User Data ]

14 [ User Data ]

15 [ User Data ] Page Block 0 Block 1 Block 2 Block 3

----- ---------------------------------------

0 [ Serial Number ]

1 [ Serial Number ]

2 [Serial] - [Intern] - [ Lock Bytes ]

3 [ One Time Programmable Memory ]

4 [ User Data ]

5 [ User Data ]

6 [ User Data ]

7 [ User Data ]

8 [ User Data ]

9 [ User Data ]

10 [ User Data ]

11 [ User Data ]

12 [ User Data ]

13 [ User Data ]

14 [ User Data ]

15 [ User Data ]

鎖定字節(jié)(第2頁)第2頁的字節(jié)2和3稱為“鎖定字節(jié)” ??梢酝ㄟ^將相應(yīng)的鎖定位設(shè)置為“ 1”來分別鎖定從0x03開始的頁面,以防止進(jìn)一步的寫訪問,從而有效地使存儲(chǔ)器變?yōu)橹蛔x。

有關(guān)鎖定字節(jié)機(jī)制的更多信息,請(qǐng)參見8.5.2節(jié)。數(shù)據(jù)表的內(nèi)容(上面已引用)。

OTP字節(jié)(頁3) 第3頁是OTP存儲(chǔ)器,默認(rèn)情況下,此頁上的所有位都設(shè)置為0??梢允褂肕iFare WRITE命令按位修改這些位,并且可以將各個(gè)位設(shè)置為1。但不能更改回0。

數(shù)據(jù)頁(第4-15頁)只要與上述“鎖定字節(jié)”沒有沖突,就可以自由地讀取和寫入第4至15頁。

生產(chǎn)后,字節(jié)具有以下默認(rèn)值:

下載:文件

復(fù)制代碼

Page Byte Values

---- ----------------------

0 1 2 3

4 0xFF 0xFF 0xFF 0xFF

5..15 0x00 0x00 0x00 0x00

訪問數(shù)據(jù)塊要訪問卡,您必須執(zhí)行以下兩個(gè)步驟:

“連接”到Mifare Ultralight卡并檢索卡的7字節(jié)UID。

內(nèi)存可以一旦建立了被動(dòng)模式連接,就可以直接讀寫。 Mifare Ultralight卡不需要身份驗(yàn)證。

讀取/寫入長度 出于兼容性原因,對(duì)Mifare Ultralight卡的“讀取”請(qǐng)求將一次檢索16個(gè)字節(jié)(4頁)(與Mifare Classic的塊大小相對(duì)應(yīng))卡)。例如,如果您指定要讀取第3頁,則實(shí)際上將讀取并返回第3、4、5和6頁,并且如果不需要它們,可以簡單地丟棄最后12個(gè)字節(jié)。如果選擇更高的頁面,則讀取的16個(gè)字節(jié)將換回到第0頁。例如,讀取第14頁實(shí)際上將返回第14、15、0和1頁。

“寫”請(qǐng)求出現(xiàn)在頁面(4個(gè)字節(jié))中,因此覆蓋后續(xù)頁面上的數(shù)據(jù)沒有問題。

關(guān)于NDEF格式

NDEF( NFC數(shù)據(jù)交換格式)。NFC數(shù)據(jù)交換格式(NDEF)是一種標(biāo)準(zhǔn)化的數(shù)據(jù)格式,可用于在任何兼容的NFC設(shè)備與另一個(gè)NFC設(shè)備或標(biāo)簽之間交換信息。數(shù)據(jù)格式由 NDEF郵件和 NDEF記錄組成。該標(biāo)準(zhǔn)由NFC論壇維護(hù),可以免費(fèi)查閱,但需要接受許可協(xié)議才能下載。

NDEF格式用于存儲(chǔ)和交換URI,純文本等信息,其中包括常用格式。可以將Mifare Classic卡之類的NFC標(biāo)簽配置為NDEF標(biāo)簽,并且任何其他NDEF兼容設(shè)備都可以理解和訪問由一個(gè)NFC設(shè)備寫入它們的數(shù)據(jù)(NDEF記錄)。 NDEF消息還可以用于在“對(duì)等”模式下的兩個(gè)活動(dòng)NFC設(shè)備之間交換數(shù)據(jù)。通過在通信過程中遵循NDEF數(shù)據(jù)交換格式,原本互不了解彼此或通用語言的設(shè)備能夠以一種有組織的,可相互理解的方式共享數(shù)據(jù)。

有些幫助與NDEF相關(guān)的應(yīng)用筆記和白皮書如下:

NFC數(shù)據(jù)交換格式(NDEF)技術(shù)規(guī)范(需要接受許可條款)

NFC記錄類型定義(RTD)規(guī)范(需要接受許可條款)

NXP白皮書-NFC論壇類型標(biāo)簽

NDEF消息 NDEF消息是NDEF記錄的基本“傳輸”機(jī)制,每個(gè)郵件包含一個(gè)或多個(gè)NDEF記錄。

NDEF記錄 NDEF記錄包含特定的有效負(fù)載,并具有以下結(jié)構(gòu)來標(biāo)識(shí)記錄的內(nèi)容和大?。?/p>

下載:文件

復(fù)制代碼

Bit 7 6 5 4 3 2 1 0

------ ------ ------ ------ ------ ------ ------ ------

[ MB ] [ ME ] [ CF ] [ SR ] [ IL ] [ TNF ]

[ TYPE LENGTH ]

[ PAYLOAD LENGTH ]

[ ID LENGTH ]

[ RECORD TYPE ]

[ ID ]

[ PAYLOAD ] Bit 7 6 5 4 3 2 1 0

------ ------ ------ ------ ------ ------ ------ ------

[ MB ] [ ME ] [ CF ] [ SR ] [ IL ] [ TNF ]

[ TYPE LENGTH ]

[ PAYLOAD LENGTH ]

[ ID LENGTH ]

[ RECORD TYPE ]

[ ID ]

[ PAYLOAD ]

記錄頭(字節(jié)0)記錄頭包含許多重要字段,其中包括一個(gè)3位字段,用于標(biāo)識(shí)隨后的記錄類型(類型名稱格式或TNF ):

TNF:類型名稱格式字段

NDEF記錄的類型名稱格式或 TNF字段是一個(gè)描述記錄類型的3位值,并設(shè)置對(duì)其余記錄的結(jié)構(gòu)和內(nèi)容的期望。可能的記錄類型名稱包括:

下載:文件

復(fù)制代碼

TNF Value Record Type

--------- -----------------------------------------

0x00 Empty Record

Indicates no type, id, or payload is associated with this NDEF Record.

This record type is useful on newly formatted cards since every NDEF tag

must have at least one NDEF Record.

0x01 Well-Known Record

Indicates the type field uses the RTD type name format. This type name is used

to stored any record defined by a Record Type Definition (RTD), such as storing

RTD Text, RTD URIs, etc., and is one of the mostly frequently used and useful

record types.

0x02 MIME Media Record

Indicates the payload is an intermediate or final chunk of a chunked NDEF Record

0x03 Absolute URI Record

Indicates the type field contains a value that follows the absolute-URI BNF

construct defined by RFC 3986

0x04 External Record

Indicates the type field contains a value that follows the RTD external

name specification

0x05 Unknown Record

Indicates the payload type is unknown

0x06 Unchanged Record

Indicates the payload is an intermediate or final chunk of a chunked NDEF Record TNF Value Record Type

--------- -----------------------------------------

0x00 Empty Record

Indicates no type, id, or payload is associated with this NDEF Record.

This record type is useful on newly formatted cards since every NDEF tag

must have at least one NDEF Record.

0x01 Well-Known Record

Indicates the type field uses the RTD type name format. This type name is used

to stored any record defined by a Record Type Definition (RTD), such as storing

RTD Text, RTD URIs, etc., and is one of the mostly frequently used and useful

record types.

0x02 MIME Media Record

Indicates the payload is an intermediate or final chunk of a chunked NDEF Record

0x03 Absolute URI Record

Indicates the type field contains a value that follows the absolute-URI BNF

construct defined by RFC 3986

0x04 External Record

Indicates the type field contains a value that follows the RTD external

name specification

0x05 Unknown Record

Indicates the payload type is unknown

0x06 Unchanged Record

Indicates the payload is an intermediate or final chunk of a chunked NDEF Record

IL:ID長度字段

IL標(biāo)志指示ID長度字段是否存在。如果將其設(shè)置為0,則記錄中將省略“ ID長度”字段。

SR:短記錄位

如果PAYLOAD LENGTH字段為1,則SR標(biāo)志設(shè)置為1。字節(jié)(8位/0-255)或更小。

CF:塊標(biāo)志

CF標(biāo)志指示這是第一個(gè)記錄塊還是中間記錄塊。

ME:消息結(jié)束

ME標(biāo)志指示這是否是消息中的最后一條記錄。MB:消息開始MB標(biāo)志指示這是否是NDEF消息的開始。

類型長度 指示“記錄類型”字段的長度(以字節(jié)為單位)。對(duì)于使用上述TNF字段定義的某些類型的記錄,該值始終為零。

有效載荷長度 指示記錄有效載荷的長度(以字節(jié)為單位)。如果在記錄頭中將SR字段(如上所述)設(shè)置為1,則此值將為1個(gè)字節(jié)長(有效負(fù)載長度為0-255個(gè)字節(jié))。如果SR字段設(shè)置為0,則此值為32位值,占4個(gè)字節(jié)。

ID長度 表示ID字段的長度(以字節(jié)為單位)。僅當(dāng)在記錄標(biāo)題中將IL標(biāo)志(如上所述)設(shè)置為1時(shí),此字段才存在。

記錄類型 此值描述了隨后的記錄的“類型”。類型字段的值必須與在記錄頭的TNF位中輸入的值相對(duì)應(yīng)。

記錄ID 如果包含ID(記錄標(biāo)題中的IL位設(shè)置為1),則ID字段的值。如果IL位設(shè)置為0,則忽略此字段。

有效載荷 記錄有效載荷,這將恰好是前面“有效載荷長度”字段中描述的字節(jié)數(shù)。

知名記錄(TNF記錄類型0x01)可能是最有用的記錄類型為“ NFC論壇知名類型” (TNF類型0x01)。遵循“嚴(yán)格定義”類型的記錄類型均由稱為RTD或記錄類型定義的內(nèi)容進(jìn)行描述。當(dāng)前定義良好的一些RTD是:

URI記錄(0x55/’U‘) URI URI 記錄的“知名類型”為0x55(’U‘),并且該記錄類型可用于存儲(chǔ)各種有用的信息,例如電話號(hào)碼(tel :),網(wǎng)站地址, FTP 文件位置的鏈接等。

URI 記錄已定義在NFC論壇的“ URI 記錄類型定義”文檔中,它具有以下結(jié)構(gòu):

下載:文件

復(fù)制代碼

Name Offset Size Description

---- ------ ---- -----------

Identifier Code 0 1 byte See table below

URI Field 1 N bytes The rest of the URI (depending on byte 0 above) Name Offset Size Description

---- ------ ---- -----------

Identifier Code 0 1 byte See table below

URI Field 1 N bytes The rest of the URI (depending on byte 0 above)

URI標(biāo)識(shí)符代碼用于縮短URI長度,并且可以具有以下任意值:

下載:文件

復(fù)制代碼

Value Protocol

----- --------

0x00 No prepending is done 。.. the entire URI is contained in the URI Field

0x01 http://www.

0x02 https://www.

0x03 http://

0x04 https://

0x05 tel:

0x06 mailto:

0x07 ftp://anonymous:[email protected]

0x08 ftp://ftp.

0x09 ftps://

0x0A sftp://

0x0B smb://

0x0C nfs://

0x0D ftp://

0x0E dav://

0x0F news:

0x10 telnet://

0x11 imap:

0x12 rtsp://

0x13 urn:

0x14 pop:

0x15 sip:

0x16 sips:

0x17 tftp:

0x18 btspp://

0x19 btl2cap://

0x1A btgoep://

0x1B tcpobex://

0x1C irdaobex://

0x1D file://

0x1E urn:epc:id:

0x1F urn:epc:tag:

0x20 urn:epc:pat:

0x21 urn:epc:raw:

0x22 urn:epc:

0x23 urn:nfc: Value Protocol

----- --------

0x00 No prepending is done 。.. the entire URI is contained in the URI Field

0x01 http://www.

0x02 https://www.

0x03 http://

0x04 https://

0x05 tel:

0x06 mailto:

0x07 ftp://anonymous:[email protected]

0x08 ftp://ftp.

0x09 ftps://

0x0A sftp://

0x0B smb://

0x0C nfs://

0x0D ftp://

0x0E dav://

0x0F news:

0x10 telnet://

0x11 imap:

0x12 rtsp://

0x13 urn:

0x14 pop:

0x15 sip:

0x16 sips:

0x17 tftp:

0x18 btspp://

0x19 btl2cap://

0x1A btgoep://

0x1B tcpobex://

0x1C irdaobex://

0x1D file://

0x1E urn:epc:id:

0x1F urn:epc:tag:

0x20 urn:epc:pat:

0x21 urn:epc:raw:

0x22 urn:epc:

0x23 urn:nfc:

URI標(biāo)識(shí)符代碼后是 URI字段。此字段提供根據(jù)RFC 3987的URI,并包含在前綴URI標(biāo)識(shí)符對(duì)應(yīng)的值之后的其余URI(除非URI ID為0x00,在這種情況下,完整的URI將包含在URI字段中)。/div》

測試記錄要做的事情

智能海報(bào)記錄要做的事情

NDEF記錄示例

眾所周知的記錄

URI記錄

“帶有NDEF的Mifare Classic 1K卡的內(nèi)存轉(zhuǎn)儲(chǔ)”中顯示了URI記錄的示例。記錄”。

文本記錄

要執(zhí)行

Smartposter Record

要做的事情

絕對(duì)URI記錄

待辦事項(xiàng)

使用Mifare Classic卡作為NDEF標(biāo)簽 可以配置Mifare Classic 1K和4K卡作為NFC論壇兼容的NDEF標(biāo)簽,但必須以某種特定方式進(jìn)行組織。以下NXP的應(yīng)用筆記中說明了制作Mifare Classic卡“符合NFC論壇”的要求:

AN1304-NFC類型的MIFARE Classic標(biāo)簽操作

同時(shí),以上應(yīng)用筆記為作為此問題的權(quán)威消息來源,以下說明還可以簡要概述使用Mifare Classic卡作為NFC論壇兼容的“ NDEF”標(biāo)簽所涉及的關(guān)鍵概念:

Mifare應(yīng)用程序目錄(MAD),以形成基于扇區(qū)的內(nèi)存之間的關(guān)系Mifare Classic卡和單個(gè)NDEF記錄均使用 Mifare應(yīng)用程序目錄(MAD)結(jié)構(gòu)。 MAD指示哪個(gè)扇區(qū)包含哪個(gè)NDEF記錄。關(guān)于Mifare應(yīng)用程序目錄的權(quán)威信息是以下應(yīng)用筆記:

AN10787-MIFARE應(yīng)用程序目錄(MAD)

為便于參考,兩種類型的MAD(取決于卡的大?。﹩栴})定義如下:

Mifare應(yīng)用程序目錄1(MAD1) MAD1可以在任何Mifare Classic卡中使用,而不管EEPROM的大小如何,盡管如果它用于大于1KB的卡,則只有第一個(gè)NDEF記錄可訪問1KB內(nèi)存。

MAD1存儲(chǔ)在Mifare Classic卡的制造商扇區(qū)(扇區(qū)0x00)中。

Mifare應(yīng)用程序目錄2(MAD2) MAD2僅可用于具有以下功能的Mifare Classic卡超過1KB的存儲(chǔ)空間(Mifare Classic 4K卡等)。它不與僅包含1KB內(nèi)存的卡兼容!

MAD2存儲(chǔ)在扇區(qū)0x00(制造商扇區(qū))和0x10中。

MAD扇區(qū)訪問 包含MAD1的扇區(qū)(0x00)和MAD2(0x00和0x10)受KEY A和KEY B保護(hù)(如果您不熟悉此概念,請(qǐng)查閱PN532/NFC Wiki中其他地方的Mifare Classic摘要)。為了確保任何應(yīng)用程序都可以讀取這些扇區(qū),應(yīng)始終使用以下公共密鑰A:

下載:文件

復(fù)制代碼

Public KEY A of MAD Sectors

---------------------------------------------------

BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4 BYTE 5

0xA0 0xA1 0xA2 0xA3 0xA4 0xA5 Public KEY A of MAD Sectors

---------------------------------------------------

BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4 BYTE 5

0xA0 0xA1 0xA2 0xA3 0xA4 0xA5

可以選擇將MAD扇區(qū)寫為-如果您希望限制客戶修改卡內(nèi)容的能力,請(qǐng)使用密鑰B保護(hù)。公共密鑰A將確保它們始終可以讀取數(shù)據(jù)。

在Mifare扇區(qū)中存儲(chǔ)NDEF消息 NDEF消息/記錄可以存儲(chǔ)在Mifare卡的任何扇區(qū)中,但MAD所使用的扇區(qū)或1K范圍以外的扇區(qū)除外。使用MAD1表。

使用扇區(qū)存儲(chǔ)NDEF記錄時(shí),將其稱為NFC扇區(qū)。與上述MAD扇區(qū)一樣,必須始終至少以只讀模式訪問這些扇區(qū),因此NFC扇區(qū)也存在一個(gè)公用的公共密鑰A,盡管該密鑰與該密鑰中使用的密鑰A不同。 MAD扇區(qū):

下載:文件

復(fù)制代碼

Public KEY A of NFC Sectors

---------------------------------------------------

BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4 BYTE 5

0xD3 0xF7 0xD3 0xF7 0xD3 0xF7 Public KEY A of NFC Sectors

---------------------------------------------------

BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4 BYTE 5

0xD3 0xF7 0xD3 0xF7 0xD3 0xF7

為了將NDEF消息存儲(chǔ)在Mifare Classic卡上,需要將消息包裝在稱為 TLV Block 的東西中。 TLV塊的基本結(jié)構(gòu)如下所述。

TLV塊 TLV是三個(gè)不同字段的縮寫:T表示標(biāo)簽字段,L表示長度字段,V表示值字段。一個(gè)TLV塊由一個(gè)或多個(gè)字節(jié)組成,具體取決于這三個(gè)字段中的哪一個(gè)。請(qǐng)注意,TLV塊將始終至少為一個(gè)字節(jié),因?yàn)樵诿糠N情況下T字段都是必填字段。

標(biāo)簽字段

標(biāo)簽字段(或T字段)是唯一的必填字段,并根據(jù)預(yù)定值表使用單字節(jié)來標(biāo)識(shí)TLV塊的類型:

下載:文件

復(fù)制代碼

TLV Block Types

Block Type Value Description

------------- ----- --------------------------------------

NULL 0x00 These blocks should be ignored

NDEF Message 0x03 Block contains an NDEF message

Proprietary 0xFD Block contains proprietary information

Terminator 0xFE Last TLV block in the data area TLV Block Types

Block Type Value Description

------------- ----- --------------------------------------

NULL 0x00 These blocks should be ignored

NDEF Message 0x03 Block contains an NDEF message

Proprietary 0xFD Block contains proprietary information

Terminator 0xFE Last TLV block in the data area

長度字段

長度字段(或L字段)包含值字段的大小(以字節(jié)為單位)。長度字段可以用兩種不同的方式組織,使用一個(gè)或三個(gè)字節(jié)。

一個(gè)字節(jié)格式簡單包含一個(gè)從0x00..0xFF。開始的字節(jié)值。

三字節(jié)格式由以下格式組成:

下載:文件

復(fù)制代碼

Byte 0: Always 0xFF to indicate that we are using the three byte format

Byte 1..2: Can be a value between 0x00FF and 0xFFFE Byte 0: Always 0xFF to indicate that we are using the three byte format

Byte 1..2: Can be a value between 0x00FF and 0xFFFE

一字節(jié)和三字節(jié)格式都必須為支持NFC論壇和NDEF兼容性。

值字段

僅當(dāng)“長度”字段(存在上述內(nèi)容),但不等于0x00。如果“長度”字段不等于0,則“值”字段將包含N個(gè)字節(jié)的數(shù)據(jù),格式為上面的T字段指示。

“值”字段是有效負(fù)載(an NDEF消息 ,例如)。

終結(jié)者TLV

終結(jié)者TLV是數(shù)據(jù)中的最后一個(gè)TLV塊區(qū)域,并且由一個(gè)字節(jié)組成:0x0FE(請(qǐng)參見上面的TLV塊類型表)。此TLV塊是強(qiáng)制性的。

帶有Mifare Classic 1K卡的內(nèi)存轉(zhuǎn)儲(chǔ)NDEF記錄

下載:文件

復(fù)制代碼

[ Start of Memory Dump ]

------------------------Sector 0-------------------------

Block 0 3E 39 AB 7F D3 88 04 00 47 41 16 57 4D 10 34 08 》9?ó?。.GA.WM.4.

Block 1 14 01 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 。..á。á.á。á.á。á.á

Block 2 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 。á.á。á.á。á.á。á.á

Block 3 00 00 00 00 00 00 78 77 88 C1 00 00 00 00 00 00 。..。..xw?á。..。..

------------------------Sector 1-------------------------

Block 4 00 00 03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 。..。?..U.adafrui

Block 5 74 2E 63 6F 6D FE 00 00 00 00 00 00 00 00 00 00 t.comt。..。..。..。

Block 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 7 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 2-------------------------

Block 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 11 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 3-------------------------

Block 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 15 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 4-------------------------

Block 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 19 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 5-------------------------

Block 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 23 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 6-------------------------

Block 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 27 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 7-------------------------

Block 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 31 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 8-------------------------

Block 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 35 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 9-------------------------

Block 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 39 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 10-------------------------

Block 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 43 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 11-------------------------

Block 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 47 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 12-------------------------

Block 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 51 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 13-------------------------

Block 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 55 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 14-------------------------

Block 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 59 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 15-------------------------

Block 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 63 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

[ End of Memory Dump ] [ Start of Memory Dump ]

------------------------Sector 0-------------------------

Block 0 3E 39 AB 7F D3 88 04 00 47 41 16 57 4D 10 34 08 》9?ó?。.GA.WM.4.

Block 1 14 01 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 。..á。á.á。á.á。á.á

Block 2 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 。á.á。á.á。á.á。á.á

Block 3 00 00 00 00 00 00 78 77 88 C1 00 00 00 00 00 00 。..。..xw?á。..。..

------------------------Sector 1-------------------------

Block 4 00 00 03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 。..。?..U.adafrui

Block 5 74 2E 63 6F 6D FE 00 00 00 00 00 00 00 00 00 00 t.comt。..。..。..。

Block 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 7 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 2-------------------------

Block 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 11 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 3-------------------------

Block 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 15 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 4-------------------------

Block 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 19 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 5-------------------------

Block 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 23 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 6-------------------------

Block 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 27 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 7-------------------------

Block 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 31 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 8-------------------------

Block 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 35 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 9-------------------------

Block 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 39 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 10-------------------------

Block 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 43 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 11-------------------------

Block 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 47 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 12-------------------------

Block 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 51 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 13-------------------------

Block 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 55 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 14-------------------------

Block 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 59 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

------------------------Sector 15-------------------------

Block 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。..。..。..。..。..。

Block 63 00 00 00 00 00 00 7F 07 88 40 00 00 00 00 00 00 。..。..[email protected]

[ End of Memory Dump ]

NDEF記錄 上面的示例包含兩個(gè)記錄,均位于扇區(qū)1中(扇區(qū)0包含MAD)。

記錄1

可以通過查看扇區(qū)1中第4塊的第一個(gè)字節(jié)來識(shí)別卡上的第一條記錄。

下載:文件

復(fù)制代碼

Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

04 00 00 。. Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

04 00 00 。.

Mifare卡上的每個(gè)記錄均以 TLV塊(如上所述),TLV塊的第一個(gè)字節(jié)(標(biāo)記字段)表示這是 NULL塊類型(值0x00)。第二個(gè)字節(jié)是“長度”字段,為0。由于此記錄沒有有效負(fù)載(長度= 0),因此不存在TLV塊的第三個(gè)字節(jié)(“值”字段)。

此記錄第一次格式化存儲(chǔ)卡以確保至少有一條記錄時(shí)可能已插入該記錄。

記錄2

第二條記錄卡上的記錄從塊4的字節(jié)0x02開始,一直到塊5。

下載:文件

復(fù)制代碼

Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

04 03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 ?。.U.adafrui

05 74 2E 63 6F 6D t.com Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

04 03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 ?。.U.adafrui

05 74 2E 63 6F 6D t.com

從第一個(gè) TLV塊數(shù)據(jù)開始兩個(gè)字節(jié),我們可以確定以下內(nèi)容:

下載:文件

復(fù)制代碼

Byte(s) Value Description

------- ----- -----------

04:02 0x03 Field Type (0x03 = NDEF Message)

04:03 0x11 Length Field (17 bytes) Byte(s) Value Description

------- ----- -----------

04:02 0x03 Field Type (0x03 = NDEF Message)

04:03 0x11 Length Field (17 bytes)

這向我們表明該記錄包含 NDEF消息(值0x03),并且該消息的長度為17個(gè)字節(jié)(十六進(jìn)制的0x11 =十進(jìn)制的17)。這意味著我們的NDEF消息包含在接下來的17個(gè)字節(jié)中(04:04..05:04)。然后可以按如下方式分析NDEF記錄:

下載:文件

復(fù)制代碼

Byte(s) Value Description

------- ----- -----------

04:04 0xD1 This byte is the **NDEF Record Header**, and indicates that this is

an NFC Forum Well Known Record (0x01 in the first 3 bits),

and that this is the first and last record (MB=1, ME=1),

and that this is a short record (SR = 1) meaning the payload

length is less than or equal to 255 chars (len=one byte)。

TNF = 0x01 (NFC Forum Well Known Type)

IL = 0 (No ID present, meaning there is no ID Length or ID Field either)

SR = 1 (Short Record)

CF = 0 (Record is not ’chunked‘)

ME = 1 (End of message)

MB = 1 (Beginning of message)

04:05 0x01 This byte is the **Type Length** for the Record Type Indicator

(see above for more information), which is 1 byte (0x55/’U‘ below)

04:06 0x0D This is the payload length (13 bytes)

04:07 0x55 Record Type Indicator (0x55 or ’U‘ = URI Record)

04:08 0x01 This is the **start of the record payload**, which contains the

URI Identifier (“http://www.”) since this is a URI Well-Defined

Record Type (see Well-Defined Records above)。 This will be

prepended to the rest of the URI that follows in the rest of the

message payload

04:09..05:04 。.. The remainder of the URI (“adafruit.com”), which combined with the

pre-pended value from byte 04:08 yields: http://www.adafruit.com Byte(s) Value Description

------- ----- -----------

04:04 0xD1 This byte is the **NDEF Record Header**, and indicates that this is

an NFC Forum Well Known Record (0x01 in the first 3 bits),

and that this is the first and last record (MB=1, ME=1),

and that this is a short record (SR = 1) meaning the payload

length is less than or equal to 255 chars (len=one byte)。

TNF = 0x01 (NFC Forum Well Known Type)

IL = 0 (No ID present, meaning there is no ID Length or ID Field either)

SR = 1 (Short Record)

CF = 0 (Record is not ’chunked‘)

ME = 1 (End of message)

MB = 1 (Beginning of message)

04:05 0x01 This byte is the **Type Length** for the Record Type Indicator

(see above for more information), which is 1 byte (0x55/’U‘ below)

04:06 0x0D This is the payload length (13 bytes)

04:07 0x55 Record Type Indicator (0x55 or ’U‘ = URI Record)

04:08 0x01 This is the **start of the record payload**, which contains the

URI Identifier (“http://www.”) since this is a URI Well-Defined

Record Type (see Well-Defined Records above)。 This will be

prepended to the rest of the URI that follows in the rest of the

message payload

04:09..05:04 。.. The remainder of the URI (“adafruit.com”), which combined with the

pre-pended value from byte 04:08 yields: http://www.adafruit.com

TLV終結(jié)符

下載:文件

復(fù)制代碼

Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

05 FE t Block 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Char Value

----- ----------------------------------------------- ------------

05 FE t

最后一個(gè)字節(jié)(塊5,字節(jié)5),值為0xFE的 TLV終結(jié)符,表示這是TLV塊的結(jié)尾。

使用LibNFC

libnfc是一個(gè)不斷發(fā)展的目標(biāo),并且由于從一個(gè)版本到另一個(gè)版本的頻繁更改,我們無法為PN532提供libnfc支持。我們只能保證我們自己維護(hù)的Arduino代碼庫的支持和工作代碼。以下信息是我們最大的嘗試,可以幫助您開始使用libnfc和PN532突破,但是根據(jù)所使用的庫版本和平臺(tái),可能需要自己進(jìn)行一些撥弄和操作。不幸的是,libnfc的使用由您自行決定。

與libnfc一起使用PN532擴(kuò)展板 libnfc 是一種成熟的跨平臺(tái)開源NFC庫,可以輕松配置為與PN532擴(kuò)展板配合使用。盡管Linux可能是最容易使用libnfc的平臺(tái),但它也可以在Mac和Windows上進(jìn)行配置,盡管您可能需要在libnfc社區(qū)論壇上深入了解有關(guān)為Windows等編譯.dll的一些具體細(xì)節(jié)。 br》

如果您想使用libnfc測試PN532分支電路板,此簡單教程將帶您逐步了解編譯和配置libnfc的絕對(duì)基礎(chǔ),并使用部分隨附的示例SW

這僅用于將PN532突破用于FTDI電纜或FTDI Friend連接到正確的計(jì)算機(jī)。您不能在Arduino或其他微控制器上運(yùn)行LIbNFC

libnfc在Linux中(本示例中使用的是Ubuntu 10.10)

第一步:下載libnfc ,從Google Code中下載最新版本的libnfc(例如“ libnfc-1.4.1.tar.gz”),并按如下所示提取文件內(nèi)容:

下載:文件

復(fù)制代碼

$ wget http://libnfc.googlecode.com/files/libnfc-x.x.x.tar.gz

$ tar -xvzf libnfc-x.x.x.tar.gz

$ cd libnfc-x.x.x $ wget http://libnfc.googlecode.com/files/libnfc-x.x.x.tar.gz

$ tar -xvzf libnfc-x.x.x.tar.gz

$ cd libnfc-x.x.x

第二步:為PN532和UART配置libnfc libnfc當(dāng)前僅支持使用任何廉價(jià)的USB轉(zhuǎn)UART適配器(例如FTDI Friend或TTL FTDI電纜)通過UART進(jìn)行通信。但是,在編譯之前,您將需要配置libnfc以包括對(duì)UART和PN532芯片組的支持,這可以通過以下命令來完成(在上述壓縮文件所在的文件夾中執(zhí)行):

下載:文件

復(fù)制代碼

$ 。/configure --with-drivers=pn532_uart --enable-serial-autoprobe $ 。/configure --with-drivers=pn532_uart --enable-serial-autoprobe

注意:如果還希望包括調(diào)試輸出,則可以在配置選項(xiàng)中添加“ –enable-serial-autoprobe”標(biāo)志(減去單引號(hào))

第三步:構(gòu)建和安裝libnfc 您可以使用以下三個(gè)命令構(gòu)建和安裝libnfc ,也可以從原始存檔解壓縮的文件夾中運(yùn)行:

下載:文件

復(fù)制代碼

$ make clean

$ make

$ make install $ make clean

$ make

$ make install

第四步:檢查已安裝的設(shè)備 現(xiàn)在(希望)已構(gòu)建并安裝了libnfc,您可以運(yùn)行“ nfc-list”示例嘗試檢測連接的NFC板。確保開發(fā)板已連接至FTDI或USB/UART適配器,并且已連接至PC,并運(yùn)行以下命令:

下載:文件

復(fù)制代碼

$ cd examples

$ 。/nfc-list $ cd examples

$ 。/nfc-list

這應(yīng)該列出檢測到的設(shè)備

第五步:輪詢ISO14443A卡(Mifare等) 接下來,您可以使用“ nfc-poll”示例等待30秒以獲取ISO14443A卡或標(biāo)簽,并顯示有關(guān)此信息的一些基本信息卡。在我們更改為上面的示例文件夾中,運(yùn)行以下命令:

下載:file

復(fù)制代碼

$ 。/nfc-poll $ 。/nfc-poll

這應(yīng)該為您提供任何進(jìn)入磁場的卡的基本信息

帶有Mac OSX Lion的

libnfc scott-42是足以發(fā)布一些使FTDI適配器在Mac上使用libnfc的提示。需要對(duì)代碼進(jìn)行幾個(gè)簡單的更改(從v1.6.0-rc1開始),并在此處提供詳細(xì)信息。

請(qǐng)牢記上面提到的代碼更改,以下步驟應(yīng)由libnfc編譯并通過Lion上的FTDI類型適配器和UART工作(使用libnfc 1.6.0_rc1):

下載并構(gòu)建libnfc并配置是否用于PN532 UART(在運(yùn)行make之前更改代碼):

下載:文件

復(fù)制代碼

wget http://libnfc.googlecode.com/files/libnfc-1.6.0-rc1.tar.gz

tar -xvzf libnfc-1.6.0-rc1.tar.gz

cd libnfc-1.6.0-rc1

。/configure --with-drivers=pn532_uart --enable-serial-autoprobe

sudo make

sudo make install wget http://libnfc.googlecode.com/files/libnfc-1.6.0-rc1.tar.gz

tar -xvzf libnfc-1.6.0-rc1.tar.gz

cd libnfc-1.6.0-rc1

。/configure --with-drivers=pn532_uart --enable-serial-autoprobe

sudo make

sudo make install

如果一切順利,請(qǐng)切換到示例文件夾,看看是否可以找到PN532并等待適當(dāng)?shù)臉?biāo)簽:

下載:文件

復(fù)制代碼

cd examples

Kevins-Mac-mini:examples kevin$ 。/nfc-poll

/Users/kevin/libnfc-1.6.0-rc1/examples/.libs/nfc-poll uses libnfc 1.6.0-rc1 (r1326)

NFC reader: pn532_uart:/dev/tty.usbserial-FTE5WWPB - PN532 v1.6 (0x07) opened

NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)

ISO/IEC 14443A (106 kbps) target:

ATQA (SENS_RES): 00 04

UID (NFCID1): 3e b9 6e 66

SAK (SEL_RES): 08 cd examples

Kevins-Mac-mini:examples kevin$ 。/nfc-poll

/Users/kevin/libnfc-1.6.0-rc1/examples/.libs/nfc-poll uses libnfc 1.6.0-rc1 (r1326)

NFC reader: pn532_uart:/dev/tty.usbserial-FTE5WWPB - PN532 v1.6 (0x07) opened

NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)

ISO/IEC 14443A (106 kbps) target:

ATQA (SENS_RES): 00 04

UID (NFCID1): 3e b9 6e 66

SAK (SEL_RES): 08

運(yùn)行l(wèi)ibnfc有一些依賴項(xiàng),但是由于它不是Adafruit項(xiàng)目,因此nd我們真的不能直接自己直接支持它,如果您有機(jī)會(huì)獲得Mac支持的libnfc論壇,可能會(huì)比較幸運(yùn)。在Mac上有一些活躍的用戶。

常見問題解答

論壇上與PN532 NFC/RFID Breakout 和 NFC Shield相關(guān)的一些更常見的問題。

我可以在一個(gè)Arduino上使用多個(gè)屏蔽嗎?

不是,I2C每個(gè)總線庫只能有一個(gè)地址,并且該地址不可調(diào)節(jié)!所以請(qǐng)每個(gè)Arduino一個(gè)盾牌!

我可以使用PN532和Adafruit庫讀取或?qū)懭隡ifare標(biāo)簽嗎?

絕對(duì)! Adafruit庫包含對(duì)Mifare Classic卡進(jìn)行身份驗(yàn)證,讀取和寫入單個(gè)塊的功能。在讀取或?qū)懭雺K之前,您需要使用適當(dāng)?shù)拿荑€對(duì)它進(jìn)行身份驗(yàn)證,并且在對(duì)該塊進(jìn)行身份驗(yàn)證之后,您可以對(duì)您的Heart內(nèi)容進(jìn)行讀寫操作!

例如,I2C庫中的密鑰功能(因?yàn)樗J(rèn)為I2C,所以它是與NFC屏蔽一起編寫的)是:

i》下載:文件

復(fù)制代碼

uint8_t mifareclassic_AuthenticateBlock (uint8_t * uid, uint8_t uidLen,

uint32_t blockNumber, uint8_t keyNumber,

uint8_t * keyData);

uint8_t mifareclassic_ReadDataBlock (uint8_t blockNumber, uint8_t * data);

uint8_t mifareclassic_WriteDataBlock (uint8_t blockNumber, uint8_t * data); uint8_t mifareclassic_AuthenticateBlock (uint8_t * uid, uint8_t uidLen,

uint32_t blockNumber, uint8_t keyNumber,

uint8_t * keyData);

uint8_t mifareclassic_ReadDataBlock (uint8_t blockNumber, uint8_t * data);

uint8_t mifareclassic_WriteDataBlock (uint8_t blockNumber, uint8_t * data);

這就是開始讀寫數(shù)據(jù)所需的全部,您可以使用支持Mifare卡的許多Android應(yīng)用程序之一來驗(yàn)證數(shù)據(jù)(搜索NFC會(huì)發(fā)現(xiàn)很多)。

庫中包括什么級(jí)別的NDEF支持?

目前,所有NDEF功能均為實(shí)驗(yàn)性且不完整。僅編寫了非常基本的測試代碼來格式化NDEF消息的卡,以使任何支持NFC的Android手機(jī)都能夠理解該代碼,并且它是經(jīng)過編寫的,并且是非常簡單的概念證明。

我們希望在不久的將來改進(jìn)對(duì)Mifare標(biāo)簽的NDEF支持,并且已經(jīng)對(duì)此進(jìn)行了一些初步計(jì)劃,但是目前,我們的建議是堅(jiān)持純文本和“香草”的Mifare Classic讀寫。您可以從Android讀寫Mifare Classic和Mifare Ultralight塊,而無需使用更復(fù)雜的NDEF標(biāo)準(zhǔn)來簡單地通過Mifare Classic或Ultralight卡來回傳遞數(shù)據(jù)。

注意:請(qǐng)小心使用受限制的NDEF代碼。格式化支持NDEF的卡目前是一種單向操作,并且僅應(yīng)在可以專用于NDEF的卡上執(zhí)行。

PN532是否支持對(duì)等通信

是的,PN532支持對(duì)等通信,但SW支持為此,Adafruit庫中未實(shí)現(xiàn)。

例如,與Android進(jìn)行點(diǎn)對(duì)點(diǎn)通信是可能的,但是PN532端的實(shí)際實(shí)現(xiàn)非常復(fù)雜。您需要經(jīng)過許多SW層才能以Android理解的方式與之通信-這將需要為消息,SNEP和LLCP堆棧等開發(fā)完整的NDEF堆棧-不幸的是,這遠(yuǎn)遠(yuǎn)超出了范圍

Adafruit屏蔽板和分線板滿足了所有硬件要求,但是堆棧實(shí)現(xiàn)并非易事,將需要我們收取高額費(fèi)用。對(duì)于這些委員會(huì),如果我們實(shí)現(xiàn)了這一點(diǎn)。

我們將精力集中在提供可靠的,經(jīng)過驗(yàn)證的,正確調(diào)整的硬件參考以及足夠的軟件構(gòu)建模塊上,以使每個(gè)人都能上手,但是要填補(bǔ)NFC可以完成的所有工作,還有很多空缺需要填補(bǔ)

以NFC與手機(jī)通信的示例為例,請(qǐng)看一下使用Adafruit NFC Shield的“通過Blackberry上的NFC與Arduino對(duì)話”。與Blackberry設(shè)備進(jìn)行基于NFC的P2P通信所需的SW層顯然比Android低得多。

PN532是否支持標(biāo)簽仿真?

是的,但實(shí)際上是不可能實(shí)現(xiàn)的,因?yàn)樗枰粋€(gè)很難獲取的外部“安全元素”(受出口管制,并由少數(shù)幾家制造商提供一般NDA)。不過,如果您能得到一個(gè),我們很樂意看到它!

PN532可以從TI讀取Tag-It標(biāo)簽嗎?

否。 PN532設(shè)計(jì)為與ISO14443標(biāo)簽一起使用,而Mifare Classic可能是最常用的通用標(biāo)簽類型。有關(guān)受支持標(biāo)簽的更多信息,請(qǐng)參見http://www.libnfc.org/documentation/hardware/tags/iso14443或搜索有關(guān)基于ISO1443A的常見Mifare標(biāo)簽系列的信息。

我可以設(shè)置調(diào)用readPassiveTargetID()的延遲嗎?

注意:此問題僅適用于I2C庫。 SPI庫無法以相同的方式處理時(shí)序。

readPassiveTargetID()故意在阻塞延遲中等待,直到卡進(jìn)入磁場為止。此阻塞延遲的原因是為了確保良好理解的命令/響應(yīng)流。一旦激活了磁場并通過readPassiveTargetID發(fā)送了讀取請(qǐng)求,您就可以繼續(xù)向PN532發(fā)送新命令,但是一旦卡或標(biāo)簽進(jìn)入該字段,PN532將發(fā)送對(duì)初始讀取請(qǐng)求的響應(yīng),即使它處于其他一些響應(yīng)或活動(dòng)的中間。為了避免在SW中進(jìn)行調(diào)試,實(shí)施了阻塞延遲,以使命令/響應(yīng)模式盡可能清晰。

作為此阻塞延遲限制的解決方法, setPassiveActivationRetries (maxRetries)已添加到最新的NFC庫中,以允許您在讀取請(qǐng)求后設(shè)置特定的超時(shí)。

默認(rèn)情況下,PN532將永遠(yuǎn)等待卡進(jìn)入該字段。通過 MxRtyPassiveActivation 指定固定的重試次數(shù)(請(qǐng)參閱UM節(jié)7.3.1中描述 RFConfiguration 寄存器,特別是CfgItem 5),PN532將在指定次數(shù)的重試后中止讀取請(qǐng)求。嘗試,您可以安全地發(fā)送新命令,而不必?fù)?dān)心混淆響應(yīng)幀。要永遠(yuǎn)等待,請(qǐng)將MxRtyPassiveActivation設(shè)置為0xFF。要在固定的重試次數(shù)后超時(shí),請(qǐng)將MxRtyPassiveActivation設(shè)置為小于0xFF的任何值。

示例草圖:

下載:文件

復(fù)制代碼

#include

#include

#define IRQ (2)

#define RESET (3) // Not connected by default on the NFC Shield

Adafruit_NFCShield_I2C nfc(IRQ, RESET);

void setup(void) {

Serial.begin(115200);

Serial.println(“Hello!”);

nfc.begin();

uint32_t versiondata = nfc.getFirmwareVersion();

if (! versiondata) {

Serial.print(“Didn’t find PN53x board”);

while (1); // halt

}

// Got ok data, print it out!

Serial.print(“Found chip PN5”); Serial.println((versiondata》》24) & 0xFF, HEX);

Serial.print(“Firmware ver. ”); Serial.print((versiondata》》16) & 0xFF, DEC);

Serial.print(‘?!? Serial.println((versiondata》》8) & 0xFF, DEC);

// Set the max number of retry attempts to read from a card

// This prevents us from waiting forever for a card, which is

// the default behaviour of the PN532.

nfc.setPassiveActivationRetries(0xFF);

// configure board to read RFID tags

nfc.SAMConfig();

Serial.println(“Waiting for an ISO14443A card”);

}

void loop(void) {

boolean success;

uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID

uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)

// Wait for an ISO14443A type cards (Mifare, etc.)。 When one is found

// ‘uid’ will be populated with the UID, and uidLength will indicate

// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);

if (success) {

Serial.println(“Found a card!”);

Serial.print(“UID Length: ”);Serial.print(uidLength, DEC);Serial.println(“ bytes”);

Serial.print(“UID Value: ”);

for (uint8_t i=0; i 《 uidLength; i++)

{

Serial.print(“ 0x”);Serial.print(uid[i], HEX);

}

Serial.println(“”);

// Wait 1 second before continuing

delay(1000);

}

else

{

// PN532 probably timed out waiting for a card

Serial.println(“Timed out waiting for a card”);

}

} #include

#include

#define IRQ (2)

#define RESET (3) // Not connected by default on the NFC Shield

Adafruit_NFCShield_I2C nfc(IRQ, RESET);

void setup(void) {

Serial.begin(115200);

Serial.println(“Hello!”);

nfc.begin();

uint32_t versiondata = nfc.getFirmwareVersion();

if (! versiondata) {

Serial.print(“Didn‘t find PN53x board”);

while (1); // halt

}

// Got ok data, print it out!

Serial.print(“Found chip PN5”); Serial.println((versiondata》》24) & 0xFF, HEX);

Serial.print(“Firmware ver. ”); Serial.print((versiondata》》16) & 0xFF, DEC);

Serial.print(’?!? Serial.println((versiondata》》8) & 0xFF, DEC);

// Set the max number of retry attempts to read from a card

// This prevents us from waiting forever for a card, which is

// the default behaviour of the PN532.

nfc.setPassiveActivationRetries(0xFF);

// configure board to read RFID tags

nfc.SAMConfig();

Serial.println(“Waiting for an ISO14443A card”);

}

void loop(void) {

boolean success;

uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID

uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)

// Wait for an ISO14443A type cards (Mifare, etc.)。 When one is found

// ’uid‘ will be populated with the UID, and uidLength will indicate

// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);

if (success) {

Serial.println(“Found a card!”);

Serial.print(“UID Length: ”);Serial.print(uidLength, DEC);Serial.println(“ bytes”);

Serial.print(“UID Value: ”);

for (uint8_t i=0; i 《 uidLength; i++)

{

Serial.print(“ 0x”);Serial.print(uid[i], HEX);

}

Serial.println(“”);

// Wait 1 second before continuing

delay(1000);

}

else

{

// PN532 probably timed out waiting for a card

Serial.println(“Timed out waiting for a card”);

}

}

嘿,等等。.. SVDD引腳上沒有有趣的東西嗎?

確實(shí),好眼睛!不幸的是,v1.0和v1.3的分支板在原理圖上都有問題。 SVDD直接連接到VDD,但由于用于給安全模塊供電,因此應(yīng)保持懸空狀態(tài)。這對(duì)電路板的功能沒有影響,但是會(huì)導(dǎo)致消耗一些額外的電流。它將固定在電路板的下一個(gè)修訂版上,但是如果您需要使用安全模塊(稀有),則可以簡單地在C22的左側(cè)切割走線,即連接到SVDD的電容(只需跟隨走線)從第37針一直向上)。

對(duì)于將PN532 Breakout與Due一起使用是否有特殊要求?

盡管這些庫尚未正式支持Due,但一些客戶已經(jīng)能夠使他們對(duì)庫進(jìn)行一些小的更改。

由于I2C庫代表Adafruit的最新代碼,因此我們建議同時(shí)將I2C庫與屏蔽板和分線板一起使用,并且屏蔽版本應(yīng)該可以毫不費(fèi)力地工作。 I2C和Due,但是: Duue包括I2C0的上拉電阻(SCL0和SDA1),但SCL1和SDA1上沒有上拉電阻。。 SCL1/SDA1是用作Uno I2C引腳(標(biāo)準(zhǔn)屏蔽上使用的引腳)的替代引腳,因此您需要在SCL1和SDA1上添加兩個(gè)1.5K上拉電阻,才能將分線板與I2C1和Due一起使用。只需焊接兩個(gè)1.5K電阻器,一個(gè)從SCL1到3V3,另一個(gè)從SDA1到3.3V,然后以與Uno相同的方式連接電路板。

此問題僅適用于PN532 Breakout電路板,因?yàn)镻N532屏蔽在板上包含I2C上拉電阻。

下載

文件可以從github獲得

SPI和I2C庫

可以從github獲得不推薦使用的僅I2C庫(不推薦)

Adafruit Fritzing中可用的Fritzing對(duì)象

用于Shield的EagleCAD PCB文件,網(wǎng)址為https://github.com/adafruit/Adafruit-PN532-RFID-NFC-Shield

EagleCAD PCB有關(guān)突破的文件,請(qǐng)?jiān)L問https://github.com/adafruit/Adafruit-PN532-RFID-NFC-Breakout

數(shù)據(jù)表

有關(guān)NFC/RFID和此芯片的更多詳細(xì)信息,我們建議使用以下出色的資源:

RFID選擇指南-大量關(guān)于RFID的詳細(xì)信息

諾基亞的NFC簡介-大量關(guān)于NFC的詳細(xì)信息

將PN532與libnfc結(jié)合使用

天線設(shè)計(jì)文檔卡格式

Breakout v1.6原理圖并打印

(單擊放大)

原理圖

(單擊放大)

PN532 Breakout v1示意圖
責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RFID
    +關(guān)注

    關(guān)注

    391

    文章

    6442

    瀏覽量

    242451
  • nfc
    nfc
    +關(guān)注

    關(guān)注

    61

    文章

    1666

    瀏覽量

    182651
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用設(shè)計(jì)工具設(shè)計(jì)了一個(gè)DIY PN5180 NFC模塊,但它沒有檢測到NFC卡,為什么?

    我使用設(shè)計(jì)工具設(shè)計(jì)了一個(gè) DIY PN5180 NFC 模塊,但它沒有檢測到 NFC 卡。為了排除故障,需要檢查原理圖和元件值是否存在可能的錯(cuò)誤。由于我是 NFC 設(shè)計(jì)的新手、
    發(fā)表于 04-01 06:27

    分享一款兼容SWP接口并可支持全協(xié)議的NFC芯片

    7150/PN532/PN7120/CLRC663/CLRC661國產(chǎn)替代的最優(yōu)選擇。 ?? SL6550支持NFC三種工作模式:讀/寫模式、卡模擬模式、P2P模式。內(nèi)部集成完整的NFC
    的頭像 發(fā)表于 02-20 10:31 ?665次閱讀

    ADS62PxxEVM快速入門指南

    電子發(fā)燒友網(wǎng)站提供《ADS62PxxEVM快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-19 14:29 ?0次下載
    ADS62PxxEVM<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    TRF7960ATB,TRF7970ATB NFC/HF RFID讀取器模塊用戶指南

    電子發(fā)燒友網(wǎng)站提供《TRF7960ATB,TRF7970ATB NFC/HF RFID讀取器模塊用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-19 14:21 ?0次下載
    TRF7960ATB,TRF7970ATB <b class='flag-5'>NFC</b>/HF <b class='flag-5'>RFID</b>讀取器模塊用戶<b class='flag-5'>指南</b>

    BQ78412EVM板快速入門指南

    電子發(fā)燒友網(wǎng)站提供《BQ78412EVM板快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 14:53 ?0次下載
    BQ78412EVM板<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    bq27441-G1快速入門指南

    電子發(fā)燒友網(wǎng)站提供《bq27441-G1快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-09 14:43 ?1次下載
    bq27441-G1<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    bq27426電量監(jiān)測計(jì)快速入門指南

    電子發(fā)燒友網(wǎng)站提供《bq27426電量監(jiān)測計(jì)快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-07 15:00 ?2次下載
    bq27426電量監(jiān)測計(jì)<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    TVP5154EVM快速入門指南

    電子發(fā)燒友網(wǎng)站提供《TVP5154EVM快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-07 14:38 ?0次下載
    TVP5154EVM<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    TVP5150A:快速入門指南

    電子發(fā)燒友網(wǎng)站提供《TVP5150A:快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-06 14:10 ?0次下載
    TVP5150A:<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    TVP5160 EVM快速入門指南

    電子發(fā)燒友網(wǎng)站提供《TVP5160 EVM快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-06 14:03 ?0次下載
    TVP5160 EVM<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    DLPLCRC964評(píng)估模塊快速入門指南

    電子發(fā)燒友網(wǎng)站提供《DLPLCRC964評(píng)估模塊快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-09 14:58 ?0次下載
    DLPLCRC964評(píng)估模塊<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    DRV2624和DRV2625快速入門指南

    電子發(fā)燒友網(wǎng)站提供《DRV2624和DRV2625快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 10-08 11:48 ?0次下載
    DRV2624和DRV2625<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    PGA460-Q1 EVM快速入門指南

    電子發(fā)燒友網(wǎng)站提供《PGA460-Q1 EVM快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 11:19 ?3次下載
    PGA460-Q1 EVM<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    AM263x控制卡快速入門指南

    電子發(fā)燒友網(wǎng)站提供《AM263x控制卡快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:35 ?0次下載
    AM263x控制卡<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    AM263Px控制卡快速入門指南

    電子發(fā)燒友網(wǎng)站提供《AM263Px控制卡快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-26 09:24 ?0次下載
    AM263Px控制卡<b class='flag-5'>快速</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>