天天看點

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

文章目錄

  • ​​關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結​​
  • ​​1. 前言​​
  • ​​2. ST25 NFC/RFID系列标簽介紹​​
  • ​​3. ST25TV系列選擇​​
  • ​​4. ST25TV02K開發相關參考文檔​​
  • ​​5. ST25TV02K相關工具​​
  • ​​6. stm32實作讀取st25TV02K NFC​​
  • ​​6.1 方案選型​​
  • ​​6.2 基礎代碼架構​​
  • ​​6.3 結合資料手冊實作新接口​​
  • ​​6.4 讀寫密碼需要實作的接口注意事項​​
  • ​​7. 最後​​

1. 前言

由于之前使用的M1卡作為門禁卡時容易被複制的情況,目前選用了st25TV系列NFC來作為門禁卡,并啟用其帶有的資料區加密功能,讀取資料區資料時必須先發送密鑰,否則隻能讀取卡号和0區,是以隻要確定加密密鑰的不易破解性,那麼門禁卡也就不容易被複制了,針對該系列的讀寫程式已經開發完成,這裡總結一下相關坑點,避免後續走彎路。

2. ST25 NFC/RFID系列标簽介紹

這個可以通過st官網檢視,有中文,目前主要包括:ST25TA、ST25TB、ST25TN、ST25TV幾個系列的NFC标簽,使用的場景和讀寫協定存在差異:https://www.st.com/zh/nfc/st25-nfc-rfid-tags.html

ST25TA:該系列産品支援NFC應用如标簽、NFC令牌、NFC智能标貼、NFC名片(虛拟卡)。它可用于包括消費電子、計算機外設、遊戲裝置、家用電器、工業自動化和醫療産品在内的各種應用。(https://www.st.com/zh/nfc/st25ta-series-nfc-tags.html)

ST25TB:ST25TB系列RFID标簽相容ISO14443标準,可以支援公共交通和活動票務等應用。 它們提供了先進的RF性能,包括計數超過40億次的計數器。(https://www.st.com/zh/nfc/st25tb-series-nfc-tags.html)

ST25TN:ST25TN系列可與Android/iOS NFC手機和NFC Forum相容讀寫器通信,為各種消費者參與、産品資訊和智能标簽場景提供非常廣泛的可能性。這種高成本效益ST25TN系列面向多種應用,如遊戲、服飾鞋類、消費性包裝品、運動産業、酒水,并在成本與性能之間取得了良好的平衡。(https://www.st.com/zh/nfc/st25tn-series-nfc-tags.html)

ST25TV:ST25TV Type 5 NFC标簽IC是首個結合ISO/IEC 15693标準長距離通信的便利性和篡改檢測能力的解決方案。與其他NFC類型标簽相比,ST25TV标簽更容易被讀取,進而改進了産品設計的使用者體驗。産品設計者和制造商現在可以使用更小的NFC标簽和貼紙,這些标簽和貼紙更安全且更容易安裝,以增強與客戶的互動。這種獨特的解決方案可以在整個産品生命周期(從制造點到銷售點的消費者互動,以及後續階段)中使用。它賦予了日常消費品數字化生命。ST25TV标簽可用于基于雲管理的品牌保護,比如葡萄酒和白酒、藥品和奢侈品等不同應用領域的防僞/篡改檢測。它們還可以與遠端HF RFID讀寫器一起用于産品識别以及物流和可追溯性應用。(https://www.st.com/zh/nfc/st25tv-series-nfc-tags.html)

3. ST25TV系列選擇

主要根據需要的存儲空間進行選擇,比如你需要1k左右的空間來存儲門禁資料擴充也不會太多,則可以使用ST25TV02K,其工作頻率為13.56 MHz的2-Kbit EEPROM标簽IC,具有64位UID和密碼,基于ISO/IEC 15693和ISO/IEC 18000-3模式1,即2k位元組的資料區空間,8位元組的UID,可以基于ISO/IEC 15693協定進行讀寫。(選擇産品可以參考:https://www.st.com/zh/nfc/st25tv-series-nfc-tags.html#products)

4. ST25TV02K開發相關參考文檔

直接在文檔頁面下載下傳資料手冊和一些文檔:

​​https://www.st.com/zh/nfc/st25tv02k.html#documentation​​

5. ST25TV02K相關工具

​​https://www.st.com/zh/nfc/st25tv02k.html#tools-software​​

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

有相關的測試軟體可供使用,包括Windows PC、ios、Android等,對應的SDK是Java的。

6. stm32實作讀取st25TV02K NFC

6.1 方案選型

還是老問題了,之前我就說過,門禁這塊其實可以Android直接讀卡,但是原有方案使用stm32單片機來讀取,然後再通過序列槽發送給Android端,這個曆史緣由我也找到了,因為這部分的卡讀取方案是由一個沒有Android的stm32做的刷卡touch來的,為了快速在Android門禁機上實作,直接把這個touch的stm32通過Android上的序列槽連接配接起來了,Android端就不用再開發這塊了,直接定義協定和stm32互動就可以了(實際上Android端開發的話相關的sdk之類的更多更友善),真是個悲傷的故事。

6.2 基礎代碼架構

stm32讀取該NFC我們使用的15693協定,上面看到也可以使用18000-3,這塊可以直接在網上買相關的開發套件,一般會給到各種協定的示例程式。

如果沒有的話可以參考st這裡的固件源代碼:https://www.st.com/content/st_com/zh/products/embedded-software/st25-nfc-rfid-software/stsw-st25r002.html

是通過st的論壇找到的,但是你可能需要根據自己的情況進行調試:https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=618387&extra=

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

根據自己的協定實作即可,15693這裡還是能用的,雖然沒有實作所有的接口,但是基礎的讀寫之類的都是有的,至少不用自己去整時序直接操作寄存器了:

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

6.3 結合資料手冊實作新接口

這裡以st25v02k為例進行說明,如何借助上面st上找到的固件源碼實作其它的适用于本産品的接口。

下載下傳datasheet這裡不再說了,一般是英文的,但是也有可能是中文的,比如st25v02k這個就是中文的,雖然仍然晦澀:

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

你需要先看一下對應包括哪些接口(我這裡所謂的接口就是指通路裝置時的協定實作接口):

關于st25系列NFC标簽簡單介紹及st25TV系列用于門禁讀取時的注意事項總結

從這裡可以看到Inventory、Select、Read Single Block、Write Single Block、Read Multiple Blocks、Get System information這些指令接口在搜到的固件源碼中已經有了,我們接下來實作新的接口就可以了,比如:Write Password、Present Password、Read Configuration、Write Configuration、Set Untraceable mode、Get Random Number。

但是有個問題,我們該實作哪些接口,這些接口如何組合使用,目前沒有好的方法,除非你買一個官方的開發闆,裡面有現成的示例demo,否則你可能就得試了。

6.4 讀寫密碼需要實作的接口注意事項

接下來就是我們要實作的讀寫密碼這塊了,固件代碼中沒有這塊,我們要實作對st25v02K NFC的加密該如何做,讀資料前解密又如何做?根據資料手冊,看起來write password是比較像寫密碼的,反正中間花了很多時間啃datasheet和嘗試,最終總算理清了整個處理過程,這裡總結一下。

寫密碼:初始化->選卡->擷取随機數->發送密鑰->寫密碼->寫配置。

讀資料:初始化->選卡->擷取随機數->發送密碼->讀資料。

  • 1、present password相當于發送密碼進行校驗,出廠密碼為全0;
  • 2、寫完密碼後需要調用寫配置的接口修改卡狀态為加密狀态,卡不會自動根據密碼是不是全0修改自身狀态為加密狀态,需要自己修改配置,否則密碼寫進去了,下次判斷卡還是未加密狀态;
  • 3、每次讀資料前都需要發送密碼進行校驗,校驗通過才能調用讀取多塊資料的接口讀到資料,否則讀不到資料;
  • 4、判斷卡是否已加密可以通過讀配置這個接口來判斷;

7. 最後