【硬件模塊】PN532 NFC讀卡串口通信

?PN532

PN532是一款功能豐富的非接觸式通訊收發模塊,其基于8051單片機核心,集成了多種通信接口和工作模式,以滿足不同應用場景的需求。以下是PN532功能相關的詳細介紹:

  1. 多種通信接口:PN532支持I2C、SPI和UART(包括高速UART,即HSU)等多種通信接口,這使得它能夠方便地與各種主控設備進行連接和通信。這些接口使得PN532能夠靈活地嵌入到各種設備和系統中,實現非接觸式通信。
  2. 多種工作模式:PN532支持多種工作模式,包括讀寫模式、卡模擬模式和點對點模式等。
  • 讀寫模式:PN532可以作為讀寫器,支持ISO/IEC 14443 Type A和Type B標準,以及Mifare Classic、Mifare Ultralight和NTAG等多種標簽。這使得PN532能夠讀取和寫入各種非接觸式智能卡,如門禁卡、公交卡等。
  • 卡模擬模式:在卡模擬模式下,PN532可以模擬非接觸式智能卡的行為,與讀寫器進行通信。這使得PN532能夠作為智能卡使用,例如在手機中模擬門禁卡或公交卡。
  • 點對點模式:PN532還支持點對點模式,即兩個PN532設備之間可以直接進行通信,無需通過讀寫器或智能卡。這使得PN532能夠用于實現設備間的無線通信和數據傳輸。
  1. 高度兼容性:PN532不僅支持上述的ISO/IEC 14443標準,還支持其他非接觸式通信協議,如FeliCa等。這使得PN532能夠兼容多種非接觸式智能卡和讀寫器,提高了其適用范圍和兼容性。
  2. 靈活的配置和選擇:PN532具有多種配置和選擇方式,例如可以通過引腳選擇不同的工作模式或通信接口。此外,PN532還支持不同的幀格式和波特率設置,以適應不同的通信需求。
  3. 強大的安全性:PN532支持數據加密和認證功能,確保通信過程的安全性和可靠性。這使得PN532能夠用于需要高安全性的應用場景,如移動支付、門禁系統等。

綜上所述,PN532是一款功能強大、高度集成的非接觸式通訊收發模塊,具有多種通信接口、工作模式、高度兼容性和靈活的配置方式。這些功能使得PN532能夠廣泛應用于各種需要非接觸式通信的場合,如物聯網、移動支付、智能門禁等。

以上介紹來自文心一言。

今天我們就來玩玩這個NFC模塊,其實買來好久了,一直懶得動,最近有點懈怠了就硬著頭皮拿來玩玩,就是下面這個東西。

說實話,身為英語不好的人我真的很難過,因為文檔全是英文的,機翻又翻的一言難盡,并且網上大部分教程都是教怎么破解NFC卡的(我只是想讀個卡而已。。。),因此前前后后死磕了兩三天才勉強理清流程。

我們先來觀察一下這個模塊,首先是PN532支持I2C,SPI,UART這三種通信方式,在這個模塊上也給我們把引腳給留出來了。

串口的引腳在背面是和I2C的引腳共用的,也就是說同一時間我們只能使用一種通信方式。

那么我們如何選擇通信方式呢?

回到第二張圖的左下角那個藍色框,我們可以通過撥動那倆小開關來控制使用什么通信方式。

上表中的HSU就是我們的UART,我們這篇文章使用的也是串口來對PN532進行操作。默認的波特率是115200,跟我們之前使用的其他默認是9600的模塊不一樣了,不過其他都是一樣的,是無校驗位,一位停止位。

我們之前也用過不少用串口進行通信的模塊,過程就是你發一句我發一句,因此我們就需要了解我們能夠發送什么。

PN532信息框架

下面的圖都是來自官方文檔的,因為官方文檔都是英文的我看不懂,所以我用的搜狗翻譯(不是廣告)機翻了一下(每個月免費翻譯50頁,整個文檔200頁,錢包受傷了),錯誤還是不少的,大家可以結合著原文看看,圖片左邊的是原文,右邊的是機翻的結果。?

正常信息框架

上面是正常的信息框架,也就是說我們和PN532通信的時候用的就是這個框架(雙方都用)。

首先是序文,是0x00,這個是固定的,后面接兩個字節的起始碼 0x00 和 0xFF,包括最后面的一個字節的同步信號(結束位)0x00。也就是說我們固定的格式是 0x00 0x00 0xFF ……? 0x00。

然后這個框架的第四個字節是長度位,但是注意不是整個信息的長度,而是從TF1到PDn的長度,簡單來說就是長度位的下下位開始到結束位的上上位結束的長度。

第五個字節是長度校驗位,就是長度位+長度校驗位的合需要為0x00(是進位導致的變成0x00而不是加上負數,可以理解成長度位+長度校驗位=0x100,但是一個字節是8位,因此把左邊多余的部分舍棄就變成了0x00)

第六個字節是數據流動位,如果是D4則表示是我們發給PN532的,如果是D5則表示是PN532發給我們的。

接下來連著的幾位是命令+數據,也就是PD0~PDn。

PDn的后一位是數據校驗位,就是從數據流動位開始到這個數據校驗位相加,結果需要為0x00。

最后一位就是固定的結束位0x00了。

拓展信息框架

我們可以知道,上面正常信息框架的長度位是一個字節,也就是說它最長也就傳輸255個字節的數據(掐頭去尾,去掉前后固定的部分),因此有了拓展信息框架,支持傳輸更多的數據。

跟正常信息框架相比就是在中間多了倆固定的0xFF,以及就是長度位變成了兩位。其他位的含義是一樣的。

不過一般情況下我們也用不到,因為255個字節就能夠勝任大多數的情況了。

確認幀&不確認幀

兩個幀都是固定的。分別是 0x00 0x00 0xFF 0x00 0xFF 0x00和 0x00 0x00 0xFF?0xFF 0x00 0x00。

確認幀(ACK)有兩個用途,一個是確認收到了上一幀數據,一般是PN532用來表示收到了來自我們的命令,另一個用途是終止機制(???機翻的有些難以理解,應該是結束當前正在進行的命令),一般是我們給PN532發送的。

另一個不確認幀也就是NACK??,一般是我們給PN532發送的,發送之后表示我們沒收到上一幀數據,也可以是我們在校驗數據的時候發現數據有誤,總之我們發送完這個NACK之后,PN532就會再給我們發送一次上次發送的數據。

錯誤信息框架

錯誤信息框架是PN532用來通知我們發生應用級錯誤的。

完整的錯誤代碼列表到官方文檔里查。

命令

我們接下來挑幾個命令介紹,從這幾個命令里再挑幾個演示一下。

選擇數據流路徑(初始化)

可以看作是初始化或者是喚醒PN532。因為我們使用PN532的話,首先就是需要發送這個命令。

我們需要發送的是0x14 + 方式。在上圖中方式有三種選擇,我們正常使用就選第一種0x01,不需要再配置其他參數了。

也就是說我們要發送的是 0x14 0x01

但是不要忘了,我們需要套上上面介紹過的信息框架,我們使用用正常信息框架,那么發送的數據就是下面這一串。

00 00 FF 03 FD D4 14 01 17 00

也有說法是喚醒用的不僅是正常的信息框架,還需要再加上一段特殊的數據,就是下面這串。

55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 03 FD D4 14 01 17 00

我試了一下,兩種方式都可以喚醒PN532,大家各自都試一下,選合適的用就行。?

我們來分析分析(后面就不分析了),首先開頭的 00 00 FF是固定的,可以忽略(發送的時候不要忽略!)。

接下來的 03 是長度位,我們發送命令+參數是兩個字節,再加上數據流動位一個字節一共是三個,因此長度位是03。

長度位后接的是長度校驗位,需要長度位+長度校驗位的和為0。計算的話可以這樣算:0x100 - 0x03 = 0xFD

長度校驗位后接的是數據流動位,因為是我們發送給PN532的,因此固定是D4,如果是PN532發給我們的那么這一位就是D5。

接下來兩位就是我們的命令+參數 0x14 0x01。

后面是數據校驗位,我們需要從數據流動位一直加到這個數據校驗位,要相加的和為0x00(高位舍棄)。

最后一個結束位固定是0x00。這樣我們就分析完畢這個命令了,包括我們應該如何使用正常信息框架去發送我們要發送的命令,發送其他命令的時候步驟也是一樣的,介紹后續命令的時候就不再這么詳細地分析了。

接下來我們直接拿串口助手來操作PN532,用單片機的話就配置個串口即可(波特率115200,無校驗位,一位停止位),然后把常用的命令存放進數組里,根據自己項目的邏輯去按照不同的時機去發送不同的用正常信息框架封裝好的命令即可。

發送之后我們就收到了上面接收區里的一段數據。

這段數據我們要拆分開來看,我已經用紅框和藍框區分開來了,紅框就是標準的確認幀,我們忽略即可,不過如果是用單片機來操作PN532的話就需要做好把處理確認幀的相關邏輯了。

接下來藍框里的數據我們掐頭去尾,只留下命令和參數: 0xD5 和 0x15。

再回到上面文檔截的圖片,正常回復就是 0xD5 和 0x15 ,因此我們目前為止沒出錯誤。

不過要注意的就是PN532通信的數據中,一共有兩個校驗位,在實際的項目中我們一定要對收到的數據進行校驗,如果校驗之后發現數據有誤,那么我們發送NACK幀讓PN532再發一次,直到數據接收正確。

設置波特率

命令是0x10,再加上參數指定要設置的波特率,默認是115200,沒啥事咱也別改了用的好好的。

設定PN532內部參數

除了0x12的命令之外,只需要一個Byte作為參數,通過設置這個Byte的每個位來設定PN532的內部參數。

被動檢測目標(讀卡)

命令是4A,參數有三個,但是最后一個是可選的,我們可以不用。

第一個參數表示我們需要檢測多少個目標(卡),最多是兩個,我們一般就檢測1個就行了。

第二個參數是初始化期間使用的波特率和調制類型。用五種可選的參數可以參考上面的截圖,我們用0x00就行。

00 00 FF 04 FC D4 4A 01 00 E1 00

我們發送這個命令之后,PN532會回復一個ACK,就是我紅框框出來的,我們忽略。

然后再把NFC的卡貼在PN532上就會再發送來一大段數據。我們直接看后面來的這一大段。

我把收到的數據掐頭去尾拿出來分析分析。

D5 4B 01 01 00 04 08 04 33 88 9C 34

首先是我們發送命令之后會得到的數據是0xD5 和0x4B以及后面一堆數據。

我們收到的數據符合這個輸出,我們接著往后看,下一位表示的是初始化目標的數量,因為我們發送命令的時候最多只讓初始化1個,因此這個位的值也只能是0x01。

因為我們發送命令的時候指定類型的參數是0x00,對應的是106kbps的A類型,因此我們只需要看上圖中框出的格式(其他格式的我也沒截進來就是了)。

說實話這翻譯的我看不懂,而且就算是原文中的英語也是縮寫我還是看不懂,因此這個格式的前半段我們跳過,我們直接看第五個字節,這個能看得懂,就是說NFC的ID號的長度,后面接的就是NFC的ID號,我們需要用的信息也就是這個ID號了,因此我們前面的也不用看懂,只需要知道返回的第二個參數的第五個字節是NFC的ID號長度,剩下的那么多個的字節是NFC的ID號。

當我們發送了這個命令之后,PN532回復ACK,然后一直再檢測是否有NFC卡貼上來,貼上來之后才會再發上面那么一大段數據給我們。如果我們發送完命令之后反悔了不想要檢測了,我們可以發送一個確認幀,這時候PN532就不會再檢測了。

資料免費下載

中文設計的資料,包括官方文檔和機翻版的,以及文中沒出現的讀卡解卡上位機軟件我都打包好放公眾號里了,小伙伴們可以關注同名公眾號“折途想要敲代碼”回復關鍵詞“PN532”免費下載。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38711.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的安裝和環境配置

1.下載MySQL安裝MySQL 選Custom選項為高級自定義模式 2.配置MySQL環境 安裝好之后,在桌面右鍵點擊我的電腦(有些是此電腦),然后點擊屬性,進入系統信息設置,接著點擊高級,進入環境變量界面,進入環境變量界面…

【Spring Boot】Java 持久層 API:JPA

Java 持久層 API:JPA 1.Spring Data1.1 主要模塊1.2 社區模塊 2.JPA3.使用 JPA3.1 添加 JPA 和 MySQL 數據庫的依賴3.2 配置數據庫連接信息 4.了解 JPA 注解和屬性4.1 常用注解4.2 映射關系的注解4.3 映射關系的屬性 5.用 JPA 構建實體數據表 1.Spring Data Spring…

Redis基礎教程(十):HyperLogLog

💝💝💝首先,歡迎各位來到我的博客,很高興能夠在這里和您見面!希望您在這里不僅可以有所收獲,同時也能感受到一份輕松歡樂的氛圍,祝你生活愉快! 💝&#x1f49…

Linux愛好者能對Linux癡迷到什么程度?

在開始前剛好我有一些資料,是我根據網友給的問題精心整理了一份「Linux的資料從專業入門到高級教程」, 點個關注在評論區回復“888”之后私信回復“888”,全部無償共享給大家!!!曾經想幫助全世界的人卸載掉…

歸并排序——有序序列的合并

目錄 1、簡述 2、復雜度 3、穩定性 4、例子 1、簡述 有序序列的合并(Merge of Sorted Sequences)是歸并排序的核心步驟之一。其目的是將兩個已經排序的序列合并成一個新的有序序列。這個過程在歸并排序中非常重要,因為歸并排序通過遞歸地…

技術職務管理助力智慧校園建設:深入解讀人事系統

智慧校園人事系統中的技術職務管理模塊,專注于高校及教育機構內技術人員及科研人員的職務管理,涵蓋職稱評審、技術職務任命、項目參與記錄、科研成果跟蹤及技術能力評估等多個方面,旨在通過信息化手段提升技術人才管理的效率與科學性。 在這一…

Windows如何安裝并啟動Nginx

0、前言 Nginx 是一款高性能、輕量級的Web服務器和反向代理服務器,廣泛應用于互聯網領域。它以其高效穩定、內存占用少和豐富的模塊化設計而受到開發者們的青睞。 在實際使用過程中,我們多數時候會在Linux系統上運行Nginx,但實際上&#xff…

單目行車測距攝像系統(單目測距-行車)

單目行車測距攝像系統是一種利用單個攝像頭實現車輛行駛中前方障礙物距離測量的技術。該系統通過計算機視覺算法,能夠實時分析攝像頭捕捉的圖像,精確計算出車輛與前方物體之間的距離,對于自動駕駛、高級駕駛輔助系統(ADAS&#xf…

PMP考試沒通過別擔心,補救辦法來了

2024年6月PMP考試成績正在陸續分批次發布。沒有考試通過的同學就會疑問,考試沒考過怎么辦?可不可以補考?面對PMP考試沒通過的情況,我們應該如何應對呢? 首先要告訴大家一個好消息!6月考試不通過的考生可以…

24年hvv不要掉進秘網了,特別別被反制了

這兩年的hvv,防守方已經不單單是每天坐那看監控、封ip了,越來越多的大佬投身防守工作中,讓防守從被動變成了一個主動的活了。 目前最常見的主動防守有2種,1、長時間的蜜罐運營。2、蜜罐反制。 01-蜜罐運營 蜜罐這個詞干安全的都…

七、函數練習

目錄 1. 寫一個函數可以判斷一個數是不是素數。(素數只能被1或其本身整除的數) 2. 一個函數判斷一年是不是閏年。 3.寫一個函數,實現一個整形有序數組的二分查找。 4. 寫一個函數,每調用一次這個函數,使得num每次增…

基于PHP花澗訂購系統的設計與實現00332

摘 要 近年來,電子商務的快速發展引起了行業和學術界的高度關注。花澗訂購系統旨在為用戶提供一個簡單、高效、便捷的花卉購物體驗,它不僅要求用戶清晰地查看所需信息,而且還要求界面設計精美,使得功能與頁面完美融合,…

PIL,OpenCV,Pytorch處理圖像時的通道順序(顏色,長寬深)

項目顏色通道順序長寬通道順序數據類型取值范圍PILRGBHWCndarray0-255 (byte)OpenCVBGRHWCndarray0-255 (byte)PyTorchRGB/BGR (取決于如何讀取)(N)CHWtensor0-1 (float, 標準化后); 0-255 (int, 未標準化) 注意以下幾點: 顏色通道順序:PIL默認使用RGB順…

圖像增強方法匯總OpenCV+python實現【第二部分:高級圖像增強方法】

圖像增強方法匯總OpenCV+python實現【第二部分:高級圖像增強方法】 前言高級圖像增強方法1. 隨機高斯模糊(Random Gaussian Blur)2. 隨機灰度(Random Grayscale)3. 隨機通道交換(Random Channel Swap)4. 隨機伽馬校正(Random Gamma Correction)5. 隨機透視變換(Rando…

監控易在某市電子政務外網的運維應用案例

隨著信息技術的飛速發展,電子政務已經成為政府提升服務效率、增強公眾滿意度的重要途徑。某市電子政務外網作為該市政府部門與外界交互的主要平臺,承載著大量關鍵業務與數據交互,其網絡環境的復雜性、應用特點的多樣性以及運維需求的挑戰性&a…

AI程序員還是代替不了程序員,震撼硅谷的Devin-ai程序員,再度震撼硅谷——但這次是被打假

文章目錄 主要疑點包括但不限于:35年從業者逐幀驗證 AI程序員還是代替不了程序員,震撼硅谷的Devin-ai程序員,再度震撼硅谷——但這次是被打假 一位油管程序員博主Internet of Bugs對Devin發布的視頻進行了逐幀分析,逐一舉證說明了…

【C語言】register 關鍵字

在C語言中,register關鍵字用于提示編譯器將變量盡量存儲在CPU的寄存器中,而不是在內存中。這是為了提高訪問速度,因為寄存器的訪問速度比內存快得多。使用register關鍵字的變量通常是頻繁使用的局部變量。 基本用法 void example() {regist…

貓頭虎分享[可靈AI」官方推薦的馴服指南-V1.0

貓頭虎分享[可靈AI」官方推薦的馴服指南-V1.0 貓頭虎是誰? 大家好,我是 貓頭虎,別名貓頭虎博主,擅長的技術領域包括云原生、前端、后端、運維和AI。我的博客主要分享技術教程、bug解決思路、開發工具教程、前沿科技資訊、產品評…

Git 基礎-創建版本庫 git init、添加到暫存區git add、查看狀態git status、查看改動git diff

目錄 1.創建版本庫 git init 1.創建版本庫 git init 在目錄中創建新的 Git 倉庫。 你可以在任何時候、任何目錄中這么做,完全是本地化的。 在目錄中執行 git init,就可以創建一個 Git 倉庫了。 注意: 沒事不要手動修改 .git 目錄里面的文件,不…

Nginx Http緩存的必要性!啟發式緩存有什么弊端?

👀 Nginx Http緩存的必要性!啟發式緩存有什么弊端? 簡介啟發式緩存引發的問題nginx緩存配置 簡介 我們在使用React或者Vue開發項目中會使用hash、chunkhash、contenthash來給靜態資源文件進行命名。這帶來的好處便是當我們部署完項目后&…