1 主控和射頻芯片簡(jiǎn)介 1.1 主控芯片NXP LPC812 LPCS00系列是基于ARM Cortex-M0+的低成本32位MCU系列產(chǎn)品,工作時(shí)CPU 頻率最高可達30 MHz。它支持最高16 KB的閃存和4 KB的SRAM。 1.2 射頻芯片SLRC610 SLRC610是NXP公司新一代多協(xié)議無(wú)線(xiàn)近場(chǎng)芯片中的一員,它是用于13.56 MHz的非接觸式通信的高度集成的收發(fā)器芯片,支持并遵守IS0/IEC15693、EPC UID和ISO/IEC18000-3 mode 3/EPC Class-1 HF協(xié)議的卡片。它與主機的通信接口有SPI、UART、I2C總線(xiàn)(包括I2C和I2CL模式)三種。另外,它的安全性比上一代更高,支持安全訪(fǎng)問(wèn)模塊(SAM)的連接。 數據手冊的第一個(gè)正式版(SLRC610 v.3.1)在2012年9月6日發(fā)布,從目前最新的數據手冊(SLRC6l0 v.3.4)來(lái)看,新版主要是修正發(fā)現的描述錯誤和數據值的更新。 2 模塊硬件設計 模塊主要由通信升級接口、調試接口、提示信號、LPC812、SLRC610、模塊內置天線(xiàn)等組成。模塊框圖如圖1所示。 圖1 模塊框圖 2.1 主控芯片電路設計 LPC812是LPC800 系列配置最高的型號,它有TSSOP16、SO2O、TSSOP20三種封裝,因為設計的是小模塊,所以選用了sO2O塑料小型封裝。由于LPC812支持通過(guò)開(kāi)關(guān)矩陣將特殊功能分配到某個(gè)I/O引腳,所以在設計原理圖的時(shí)候可以充分考慮將某個(gè)功能分配到哪個(gè)引腳上既方便布線(xiàn)、性能又好。另外,本次設計中LPC812內置的1%精度的12 MHz內部RC振蕩器作系統時(shí)鐘。主控芯片電路如圖2所示。 圖2 主控芯片電路圖 2.1.1 通信、升級接口設計 LPC812繼承NXP以往單片機的在系統編程(ISP)升級功能。由于在ISP模式下占用了USARTO,而本次設計模塊的通信接口也是串口,故將通信和升級合并為一個(gè)接口。要模塊正常工作則將IsPEN懸空(推薦接VCC);要升級固件,則將ISPEN接GND,然后給LPC812上電,再通過(guò)工具軟件Flash Magic燒寫(xiě)新固件。這部分對應圖2中的J1接口。 2.1.2 調試接口設計 LPC812支持SWD調試、JTAG 邊界掃描、微跟蹤緩沖區(MTB)三種方式。其中,SWD使用較為方便,僅僅需要串行線(xiàn)調試數據輸入/輸出(SWDIO)、串行線(xiàn)時(shí)鐘(SWCLK)、復位(nRST)這i根線(xiàn)。本設計中為了調試方便又加了VCC和GND這兩根線(xiàn),也就是說(shuō)可以在只插這個(gè)調試接口的情況下對模塊進(jìn)行調試。在默認情況下它的VCC是從外界取電的,所以要外部給板子供電才能調試。打開(kāi)JTAG的外殼,將內部的跳線(xiàn)帽插到靠近VCC的兩針上,那么JTAG工具的VCC就對外供電了,對板子調試可以不用再外部供電。這部分對應圖2中J2接口。 2.2 射頻芯片電路設計 SLRC610只有一種小型的HVQFN32封裝,特別要注意它的第33引腳,也就是芯片朝PCB面正中間一個(gè)正方形的面,這個(gè)面必須良好接地,否則會(huì )出現些奇怪的現象。SLRC610支持SPI、I2C 總線(xiàn)、I2CI 和UART 四種接口,它會(huì )在掉電復位后通過(guò)IFSEL0和IFSEL1電平組合來(lái)判斷當前主機接口類(lèi)型。本次設計是采用了硬編碼的SPI接口,在硬件電路上需IFSEL0接地、IFSEL1接VCC。射頻芯片電路如圖3所示。其巾,引在SLRC610芯片中33引腳VSS的作用是接地和散熱,所以此引腳必須良好接地。 圖3 射頻芯片電路圖 天線(xiàn)的匹配電路包含一個(gè)EMC低通濾波器(L1、L2、C5、C6),一個(gè)匹配電路(C3、C4、C7~ C1O),一個(gè)接收電路(R2、R3、C15)和天線(xiàn)本身。接收電路的元件值需被特別設計并根據板子實(shí)際情況調整。本次設計模塊的尺寸有限,接收電路采用了元器件較少的單端模式,且天線(xiàn)線(xiàn)圈是內置在PCB中間層,以方便應用,減小體積。 3 模塊軟件設計 主程序包含系統初始化、LED測試、串口測試、SLRC610測試這4部分。系統初始化部分主要有系統內核時(shí)鐘更新、GPIO初始化、systick配置功能。LED測試部分主要包含LED端口初始化、更新為滅狀態(tài)、更新為亮狀態(tài)、翻轉亮滅狀態(tài)功能測試。當然這之后LED已經(jīng)配置好,可以隨意使用三個(gè)更新?tīng)顟B(tài)函數。串口測試主要包括對串口功能引腳分配(LPC812的開(kāi)關(guān)矩陣,這部分放在SPI配置部分詳細敘述)、串口初始化、發(fā)送字符串等功能測試。這之后,就可以通過(guò)串口打印調試信息。 3.1 SLR0610測試部分 SLRC610測試部分包含設置接口連接、SLRC610復位、NXP lib初始化、等待SLRC610復位就緒進(jìn)人空閑狀態(tài)、檢測15693卡、LED燈提示等。設置 接口連接部分主要是通過(guò)軟件來(lái)設置IFSEL0和IFSEL1的電平,告訴SLRC610采用哪種接口,因為本設計中這兩個(gè)引腳是通過(guò)硬件方式設置的,所以這里沒(méi)有執行實(shí)際操作,僅打印了當前使用了SPI接口的提示信息。 SLRC610復位是通過(guò)將SLRC610的PDOwN 引腳加載超過(guò)10μs的持續高電平來(lái)啟動(dòng)內部復位程序的,它包含復位電源和啟動(dòng)時(shí)間兩個(gè)階段。由于它的復位方式和老一代的方式不同,所以升級射頻芯片的時(shí)候要格外注意。筆者調試的時(shí)候就遇到過(guò)因復位導致的問(wèn)題,當循環(huán)跑SLRC610測試時(shí),會(huì )偶爾成功。追蹤發(fā)現讀寫(xiě)寄存器不是每次都成功,后來(lái)調了較長(cháng)一段時(shí)間才發(fā)現是復位的問(wèn)題。在本次設計中為確保復位成功,后面又加了“等待SLRC610復位就緒進(jìn)入空閑狀態(tài)”這一步驟。 SLRC610測試流程圖如圖4所示。 圖4 SLRC610測試流程圖 3.2 檢測 15693 檢測15693協(xié)議主要包含SLRC610軟復位、初始化15693協(xié)議層、應用15693協(xié)議設置、獲取15693卡系統信息。SLRC61O軟復位就是將SLRC610內部E2PROM 中保存的寄存器的默認值重新加載到寄存器中。一般初始化的時(shí)候會(huì )用到,當然切換協(xié)議的時(shí)候也會(huì )用到。初始化15693協(xié)議層主要完成參數結構體長(cháng)度檢查和私有變量初始化。應用15693協(xié)議設置是根據參數中設置的卡的類(lèi)(PHHAL_Hw_CARDTYPE_ISO15693)來(lái)加載該協(xié)議下SLRC610的寄存器的默認配置,包括調制深度、調制方式、超時(shí)時(shí)間等。檢測15693流程圖如圖5所示。 圖5 檢測15693流程圖 3.3 Get System lnfo命令 Get System Info是ISI15693的可選命令,主要用來(lái)檢索卡片的基本信息。請求和應答幀都是有幀頭和幀尾的,如下所示。 去掉幀頭幀尾 一共有4個(gè)字段,其中一個(gè)字段(8字節的UID)是可選的。它的響應信息格式如下所示,其中斜體部分的字段表示,只有在響應信息中有該標志,才有這個(gè)字段的信息。 由于它發(fā)送的字節少(在不加UID的情況,加 上CRC才4字節),而且只要卡在場(chǎng)中就能使用,比較方便用示波器抓波形以分析收發(fā)的數據是否正常。 獲取15693卡系統信息的寫(xiě)法有兩種:第一種是用phpalSlil5693_Sw_Exchange和卡片交換信息的時(shí)傳兩字節數據“0x02 0x2B”,并設發(fā)送長(cháng)度為兩字節;第二種是用phpalSlil5693_Sw_Exchange和卡片交換信息的時(shí)傳兩字節數據“0x2B”,并設發(fā)送長(cháng)度為一字節。從本質(zhì)上來(lái)講,這兩種做法的最終結果都是發(fā)了同樣的數據,不同之處在于它們的發(fā)送方式。phpalSli15693_Sw_Exchange的第二個(gè)參數有一個(gè)是寫(xiě)選項,對于第一種,要將其設為PH_EXCHANGE_LEAVE_BUFFER_BIT,第二種設為PH_EXCHANGE_DEFAULT,還得將0x02設置到第一個(gè)參數的bFlags上。另外在使用phpalSli15693_Exchange時(shí)要特別注意,在該函數前面用phpalSli15693_SetConfig函數設置超時(shí)。假如沒(méi)有設置該函數,那么每次只能收到卡片返回的前5位正確數據。獲取15693卡系統信息流程圖如圖6所示。 圖6 獲取15693卡系統信息流程圖 3.4 SPI通信 采用宏定義加數組的方式來(lái)配置I/O引腳,這種方法比較靈活,可移植性很強,又方便代碼維護 。LPC800系列加了一個(gè)開(kāi)關(guān)矩陣,將可轉移功能通過(guò)開(kāi)關(guān)矩陣分配給引腳PIO0_0~PIO0_17,使用起來(lái)很方便。使用的時(shí)候需要先查可轉移功能所對應的SWM 引腳分配寄存器。找到后先將原來(lái)的數據清除,再寫(xiě)上新分配的引腳。操作過(guò)程中要謹慎,絕不能修改不該動(dòng)的位。 這里初始化調用LPC812的庫函數,將SP10設置為主機模式,為確保通信可靠在SSEL置位和數據幀起點(diǎn)之間、制數據幀末尾和SSEL解除置位之間、相鄰數據幀之間插入2個(gè)SPI時(shí)鐘周期,兩次傳輸之間SSEL解除置位的最短時(shí)間為3個(gè)SPI時(shí)鐘周期。 4 模塊調試和測試 4.1 調試方法 由于15693的編碼方式是SOF信號后每一定長(cháng)度代表一定量的信息,所以可以先取信號的開(kāi)始時(shí)間,然后計算下一個(gè)的時(shí)間,去看示波器每一個(gè)時(shí)間段的波形,記錄下來(lái)然后去整體解析。 抓到數據后開(kāi)始解析數據,比如獲取卡片信息的命令(0x02 0x2B 0x26 0xA3),它總共有4個(gè)字節,最后兩個(gè)字節是CRC校驗。通過(guò)調程序可以看到VCD發(fā)的實(shí)際命令(0x02 0x2B),而CRC則是硬件算好直接發(fā)的,所以通過(guò)調程序無(wú)法看到它。 4.2 測試 模塊的實(shí)際大小為45 mm×45 mill,模塊中芯片、元器件都集中在模塊中間,線(xiàn)圈以蝕刻的方式在靠近的邊緣的PCB中間層。筆者手上有TI、NXP、ST公司的15693卡共4種型號,做了讀卡距離測試。測試方法是將卡放于模塊天線(xiàn)正對面,通過(guò)觀(guān)察模塊上LED燈是否亮就能知道是否讀卡成功,將卡放到能讀到的高度,再用直尺去量高度。 結語(yǔ) 本模塊設計中采用的是較新的主控和射頻芯片,價(jià)格較低,性能又強,而且在很長(cháng)一段時(shí)間內不會(huì )有供貨、價(jià)格等方面的問(wèn)題。LPC800系列既增加了開(kāi)關(guān)矩陣等實(shí)用的功能,方便用戶(hù)電路設計,也集成了老一代單片機的ISP升級功能。本文詳細描述了這兩顆芯片的使用方法以及對模塊的調試方法與步驟等。該模塊采用貼面封裝的元件,具有低成本、低功耗、小尺寸、讀寫(xiě)卡距離遠等特點(diǎn),使用起來(lái)很方便,具有較高的應用價(jià)值。 |