這是一篇介紹如何用樹莓派使用PN532的隨筆,介紹了具體的使用步驟。git
首先介紹一下:github
①、IC卡是非接觸式的智能卡,裏面通常是一個方形線圈和一個小芯片(用強光照着能夠看到)。M1卡是IC卡的一種,通常水卡、公交卡都是這種。UID卡是M1的複製子卡,與M1徹底兼容。M1卡0扇區的內容可讀不可寫,UID卡全部扇區都可讀可寫,因此M1卡的數據能複製到UID卡中,而不能複製到M1卡中。bash
日常用的M1卡有16個扇區,一個扇區4個塊,一個快16個字節,一共1K數據。每一個扇區的前三個塊是數據區,最後一個塊是keyA、控制段、keyB的存儲區域,分別是6個字節,4個字節,6個字節。第0扇區的第0塊記錄了制卡廠家的或者卡的ID信息,只可讀,不可寫。測試
②、ITEAD PN532是爲嵌入式設計的PN532板子,能夠用樹莓派控制(我用window讀取不出來),它有2種數據傳輸模式,SPI和I2C。this
操做步驟:加密
用的是I2C接口傳輸數據,SET0-->H,
SET1-->L
spa
連線方法:debug
樹莓派<----->PN532設計
4口 <-----> VCC3d
6口 <-----> GND
3口 <-----> SDA/TX
5口 <-----> SCL/RX
另附一張樹莓派GPIO圖:
①、在樹莓派上安裝必要的庫:
sudo apt-get install libusb-dev libpcsclite-dev //這是libnfc依賴的庫
sudo apt-get install automake autoconf //這是編譯時用到的
若是安裝libusb-dev和libpcsclite-dev報版本錯誤安裝失敗「 Unable to correct problems, you have held broken packages.」,
可執行命令:aptitude install libusb-dev ,而後依次輸n、y、y 便可。
②、安裝nfc操做模塊:
libnfc(操做nfc):
wget http://dl.bintray.com/nfc-tools/sources/libnfc-1.7.1.tar.bz2 tar -xf libnfc-1.7.1.tar.bz2 cd libnfc-1.7.1 ./configure --prefix=/usr --sysconfdir=/etc make sudo make install
mfoc(破解key,讀出數據到文件):https://github.com/nfc-tools/mfoc
mfuck(破解全加密數據):https://github.com/nfc-tools/mfcuk
後兩個下載解壓後切換到目錄裏執行:
automake autoconf autoreconf -is ./configure make make install
③修改配置文件:
cd /etc sudo mkdir nfc sudo nano /etc/nfc/libnfc.conf
添加如下內容:
# Allow device auto-detection (default: true) # Note: if this auto-detection is disabled, user has to manually set a device # configuration using file or environment variable allow_autoscan = true # Allow intrusive auto-detection (default: false) # Warning: intrusive auto-detection can seriously disturb other devices # This option is not recommended, so user should prefer to add manually his/her device. allow_intrusive_scan = false # Set log level (default: error) # Valid log levels are (in order of verbosity): 0 (none), 1 (error), 2 (info), 3 (debug) # Note: if you compiled with --enable-debug option, the default log level is "debug" log_level = 1 # Manually set default device (no default) # To set a default device, users must set both name and connstring for their device # Note: if autoscan is enabled, default device will be the first device available in device list. device.name = "Itead_PN532_I2C" device.connstring = "pn532_i2c:/dev/i2c-1"
④、開啓樹莓派i2c:
執行 sudo raspi-config ,在第5項裏打開i2c。
⑤、測試
重啓一下,看看有沒有i2c設備:ls /dev 或者 lsmod
執行 i2cdetect -y 1 ,若是出現的不全是橫槓,就表明鏈接成功了,以下圖:
若是全是橫槓的話,撥一下pn532的vcc線再插上試試。ps:個人也是死活顯示沒有,而後重插一下就有了。
放上一張卡執行 nfc-list,若是正常顯示下面內容就表示讀取到卡了。
若是提示closed,就是板子沒正常接通。
⑤、讀寫數據:
mfoc -O output.mfd // 讀出卡中的數據保存爲文件output.mfd
mfoc 是讀取數據,若是有加密就自動破解,若是全加密,就無法讀取,可用mfuck命令破解。
nfc-mfclassic w a output.mfd output.mfd // 寫入數據,w小寫,若是大寫是強寫0扇區
因爲每張卡的0扇區信息(UID)不同,0扇區又不可寫,不一樣的卡無法互寫。可是可寫入0扇區可寫的UID卡。
我把讀出來的數據寫入它本身裏能夠寫入,暫時沒有UID卡,就沒辦法將數據寫入空卡里。