trf7960系列是ti推出的載波為13.56mhz、支援iso15693、iso14443a/b和felica協定的射頻接口晶片。許多人更關心它能不能讀寫mf1卡片,就我的了解及實際驗證,由于mf1在卡選擇之前的操作是遵守iso14443a協定的,之後的卡驗證和卡資料讀寫都是nxp自己的保密協定,是以trf7960可以對mf1卡執行到卡選擇操作,或者通俗的說可以讀mf1的卡片序列号,但不能對mf1卡讀寫資料,除非開發者自己知道nxp的加密協定并自己編寫代碼實作該協定。
在ti官方公開的trf7960說明書中,有詳細的參考電路及基于msp430單片機的參考代碼,參考這些資料做自己的開發闆或者産品闆基本上難度不大。mcu可以使用并口或spi序列槽操作trf7960,并口相對簡單一些,spi通信則有一些問題需要特别注意。
首先,ti給出的spi參考代碼使用的是msp430的内置spi接口,我們實際開發中因為單片機内部資源或引腳配置設定限制往往需要軟體模拟spi通訊。trf7960的spi協定規定:
不通訊的時候,片選nss保持高電平,時鐘clock保持低電平,通訊的時候nss保持低電平。
主機向trf7960寫一位資料時,在clock為低電平期間根據資料的值設定mosi資料線,然後clock上升沿通知trf7960可以接收資料,clock下降沿後繼續準備下一位要發送的資料,代碼如下:
主機從trf7960讀一位資料時,在clock為高電平期間trf7960根據資料的值設定miso資料線,然後clock下降沿通知mcu可以接收資料,clock上升沿後繼續準備下一位要發送的資料,代碼如下:
其次,mcu可以使用direct
command直接向trf7960發送一位元組的指令碼,執行複位、進入省電模式、向卡片發送資料、調整接收電路增益等功能。direct
command的spi時序有一個特殊的要求,在發送完一位元組的指令後,在ss拉高之前,clock要多出一個上升沿,代碼如下:
最後,trf7960向磁場中的卡片發送資料後,等待卡片回應,是否收到卡片回送的資料及是否反應逾時等指令的執行情況都是通過中斷機制來表示的。在nxp的射頻晶片中,可以不使用晶片的中斷引腳irq而是直接查詢射頻晶片的中斷标志寄存器來獲得各種事件發生的情況,但在trf7960中不能使用這種方式,因為讀一次trf7960的中斷标志寄存器将會把寄存器中的中斷标志清除,是以電路中通常要使用irq引腳,可以用irq引腳使能mcu中斷或直接查詢irq引腳,進而得知trf7960内部發生了中斷事件,進而用spi讀取其中斷标志寄存器擷取詳細的中斷事件産生情況。