單片機代理商深圳英銳恩分享用PIC 單片機實現的IC 卡讀寫器
深圳市英銳恩科技有限公司(www.cdweigu.cn)為單片機技術服務\開發設計和產品代理商,授權MDT(麥肯 MICON)單片機A級代理商,MICROCHIP產品全系列單片機與模擬器件授權推廣
商。同時A級代理分銷NOVACAP、Syfer、Voltronics精密可調電容、DLI寬帶隔直微波電容,專注分銷AIC沛亨半導體(電源管理IC)、IR(場效應管)。
如:
MDT10P712(完全兼容PIC16C712,直接替換,不要任何硬軟與軟件修改)
特性:ROM:1K,腳位:18PIN,I/O:13PIN,A/D:8bit 4通道,復位時間極快.2V,低電壓工作.低功耗,溫度范圍寬。
MDT10P716(完全兼容PIC16F716,直接替換,不要任何硬軟與軟件修改)
特性:ROM:2K,腳位:18PIN,I/O:13PIN,A/D:8bit 4通道,復位時間極快.2V,低電壓工作.低功耗,溫度范圍寬。
用PIC 單片機實現的IC 卡讀寫器
引言
本設計的主要目的是介紹IC 卡的數據存儲技術和IC 卡的數據通信,因而使用存儲器卡。由于本設計
中既可與IC 卡進行串行同步通信,又要與上位機進行中行異步通信,因而需要選擇一種同時具有這兩種通
信方式的單片機。因為PIC16F877 不僅具有本設計所需要的兩種通信方式,而且還具有運行速度快、低功
耗、價格低等優點,所以選擇PIC16F877 單片機作為本設計的單片機。
本設計的二極管電路是單片機與IC 卡通信數據線的保護電路。當數據線上的電壓為負電壓時,與地
相連的二極管導通;當數據線上的電壓大于+5V 時,與+5V 相連的二極管導通,從而保證數據線上的電壓在
0V~+5V 之間,保護單片機和IC 卡不受損壞。單片機的15 腳和23 腳分別與IC 卡的輸出引腳3 和4 相連。
由于IC 卡的輸出電壓為CMOS 電平,而單片機能夠正確的識別IC 卡的輸出信號,需要加上拉電阻。
1 SPI 工作方式
串行外圍設備接口SPI(Serial Peripheral Interface)總線技術是Motrola 公司推出的一種同步
串行接口。SPI 總線是一種三線同步總線,因其硬件能力很強,與SPI 有關的軟件就相當簡單,使CPU 有
更多的時間處理其它事務,因此得到廣泛應用。
SPI 模式允許8 位數據同步發送和接收,支持SPI 的所有四種方式。SPI 模式傳輸數據需要四根信號
線:串行數據輸出(SDO)線、串行數據輸入(SDI)線、串行時鐘(SCK)和從選擇(SS)。其中,從選擇
線只用于從屬模式。
1.1 SPI 主模式
由于控制時鐘SCK 的輸出,主模式可以在任何時候開始傳輸數據。主模式通過軟件協議控制從模式的
數據輸出。
在主模式中,一旦SSPUF 寄存器寫入,數據就會發送或接收。在接收數據時,SSPSR 寄存器按照時鐘
速率移位,一旦接收到一個字節,數據就傳輸到SSPBUF,同時中斷標志位和狀態標志位置位。
時鐘的極性可以通過編程改變。在主模式中,時鐘SCK 的頻率可以設置為:fosc/4(即Tcy)、fosc/1
6(即4Tcy)、fosc/64(即16Tcy)和定時器2(Timer2)輸出的二分頻等四種。在芯片時鐘為20MHz 時,SCK
的最大頻率為5.0MHz。
在本設計中,使用的就是SPI 主模式,由單片機控制時鐘SCK 的輸出。當向IC 卡中寫數據時,隨時
可以發送數據;當讀IC 卡內的數據時,先要發送任意一個數據(此時IC 卡不處于寫入狀態,不會接收該
數據), 給IC 卡提供輸出數據的時鐘,然后再接收IC 卡發出的數據。其時序如圖2 所示。(發送和接惦
的數據均為6FH)
如果要連續發送數據,那么每次將數據送到SSPBUF 寄存器后,都要判斷是否已經發送完該數據,即
判斷PIR1 寄存器的SSPIF 位是否為1。如果SSPIF 位為1,則表明數據已經發送完畢,可以繼續發送下一
個數據。但此時還不能立即發送下一個數據,因為SSPIF 位必須在程序中由軟件清零,只有將SSPIF 位軟
件清零后,才能繼續發送下一個數據。
1.2 SPI 從模式
在SPI 從模式,數據的發送和接收領先SCK 引腳上輸入的外時鐘脈沖,當最后一位被鎖存后,中斷標
志位SSPIF(PIR1 的D3)位。在休眠模式,從模式仍可發送和接收數據,一旦接收到數據,芯片就從休眠
中喚醒。如果采用SS 控制的從模式,當SS 引腳接到VDD 時,SPI 模式復位;如果 彩CKE=1 控制的從模式,
必須開放SS 引腳控制。
在本設計中,由于IC 卡是存儲器卡,不能提供時鐘信號,因此不能采用從模式,只能采用主模式,
由單片機控制時鐘信號。
單片機的SPI 方式初始化程序如下:
MOVLW20H ;將20H 送到累加器
MOVWF SSPCON ;將累加器中的數送到SSPCON 寄存器
BSF STATUS,RP0 ;將定RAM 區的第1 頁
BCF SSPSTAT,SMP ;將SSPSTAT 寄存器的SMP 位置0
BSF SSPSTAT,CKE ;將SSPSTAT 寄存器的CLK 位置1
BCF TRISC,3 ;將端口C 的第3 位設置為輸出
BCF TRISC,5 ;將端口C 的第5 位設置為輸出
其中,上述第1、2 行程序是配置控制寄存器,將SPI 方式配置為主控模式,時鐘頻率為單片機時鐘頻
率的1/4,并將時鐘的高電平設置為空閑狀態。第3 行程序為換頁指令,將指針轉到第1 頁。因為PIC16F
877 單片機的數據存儲器是分頁的,而所要操作的寄存器在第1 頁,因此要用換頁指令將指針到第1 頁。
第4、5 行程序是配置狀態寄存器,將SPI 方式設置為數據輸出時鐘的中間采樣,時鐘SCK 的上升沿觸發。
第6、7 行程序則是將RC 口的RC3 和RC5 設置為輸出。
2 USART 方式
通用同步異步接收發送模塊(USART)是兩個串行通信接口之一,USART 又稱為SCI(Serial Commun
ication Interface)。USART 可以設置為全雙工異步串行通信系統,這種方式可以與個人計算機PC 或串
行接口CRT 等外圍設備進行串行通信:也可以設置為半雙工異步串行通信系統,與串行接口的A/D 或D/A
集成電路、串行EEPROM 等器件連接。USART 是二線制串行通信接口,它可以被定義如下三種工作方式:全
雙工異步方式、半雙工同步主控方式、半雙工同步從動方式。
為了把RC6 和RC7 分別設置成串行通信接口的發送/時鐘(TX/CK)線和接收/數據(TX/DT)線,必須首先把SPEN 位(TCSTAT 的RD7)和方向寄存器TRISC 的D7:D6 置1。USART 功能模塊含有兩個8 位可讀/寫的狀態/控制寄存器,它們是發送狀態/控制寄存器TXSTA 和接收狀態/控制寄存器TCSTA。USART 帶有一個8 位波特率發生器BRG(Baud Rato Generator),這個BRG 支持USART 的同步和異步工作方式用SPBRG 寄存器控制一個獨立的8 位定時器的周期。在異步方式下,發送狀態/控制寄存器TXSTA 的BRGH 位(即D2)也被用來控制波特率(在同步方式下忽略BRGH 位)。向波特率寄存器SPBRG 寫入一個新的初值時,都會使BRG 定時器復位清零,由此可以保證BRG 不需要
等到定時器溢出后就可以輸出新的波特率。對USART 方式進行初始化的程序如下:
BSF STATUS,RP0 ;將指針指向數據存儲器的第1 頁
MOVLW 0x19
MOVWF SPBRG ;設置波特率為9600
BCF STATUS,RP0 ;將指針指向數據存儲器的第0 頁
CLRF RCSTA ;將接收控制和狀態寄存器清零
BSF RCSTA,SPEN ;串口允許
CLRF PIR1 ;清除中斷標志
BSF STATUS,RP0 ;將指針指向數據存儲器的第1 頁
CLRF TXSTA ;將發送控制和狀態寄存器清零
BSF TXSTA,BRGH ;設置為異步、高速波特率
BSF TXSTA,TXEN ;允許發送
BCF STATUS,RP0 ;將指針指向數據存儲器的第0 頁
BSF RCSTA,CREN ;允許接收
初始化完成后,即可發送或接收數據。在發送或接收數據時,通過查詢發送/接收中斷標志位即可判
斷是否發送完一個數據/接收到一個數據。發送/接收中斷標地不需要也不有用軟件復位。
在異步串行發送的過程中,只要TXREG 寄存器為空,中斷標志TXIF 就置位。因此,TXIF 為1 并不是
發送完畢的標志,但仍可以用TXIF 標志來判斷。因此當TXREG 為空時,將數據送入后,數據會保留在TXR
EG 寄存器中,直到前一個數據從發送移位寄存器中移出,即前一個數據發送完。
3 IC 卡
IC 卡是集成電路卡(Integrated Circuit Card)的簡稱,有些國家和地址稱其為智能卡(Smart Card)、芯片卡(Chip Card)。國際標準化組織(ISO)在ISO7816 標準中規定,IC 卡是指在由聚氯乙烯(PVC)或聚氯乙烯酸脂(PVCA)材料制成的塑料卡內嵌入式處理器和存儲器等IC 芯片的數據卡。近年來,由于導半體技術的進步,集成化程度和存儲器容量有了很大提高,并使CPU 和存儲器集成在一個芯片上,從而提高了數據的安全性。
在本設計中,IC 卡采用的是AT45DB041B-SC 芯片,該芯片的特點如一下:
*單一的2.7V~3.6V 電源;
*串行接口結構;
*頁面編程操作,單一的循環重復編程(擦除和編程,2048 頁(每頁264 字節)主存;
*兩個264 字節的SRAM 數據緩存,允許在重編程非易失性存儲器時接收數據;
*內置的編程和控制定時器;
*低功耗,4mA 有源讀取電流,2μA CMOS 備用電流;
*15MHz 的最大時鐘頻率;
*串行外圍接口方式(SPI)——模式0 和3;
*CMOS 的TTL 兼容的輸入和輸出;
*5.0V 可承受的輸入,SI、SCK、CS(低電平有效)、RESET(低電平有效)。
在本設計的調試過程中,曾測試過IC 卡的輸入輸出電平,結果證明這種IC 卡的輸入電平與TTL 兼容,
而輸出電平與TTL 不兼容。
4 IC 卡的電源提供電路
在本設計中,由于IC 卡的電源電壓范圍為+2.7~+3.6V,而PIC 單片機需要的電源為+5V,而且穩壓源提供的電壓也是+5V,因此,要設計一個穩壓模塊,給IC 卡提供+3V 左右的電壓。設計電路如圖3 所示。該電路的主要元件為LM317 芯片,它是三端可調集成穩壓器,輸出電壓為1.25~37V 范圍內可調。當其Vin 端的輸入電壓在2~40V 范圍內變化時,電路均能正常工作,輸出端Vout 和調整端ADJ 間的電壓等于基準電壓1.25V。該芯片內的基電路的工作電流IREF 很小,約為50μA,由一個恒流性很好的恒流源提供,所以它的大小不受供電電壓的影響,非常穩定。在圖3 中,B 點為電壓輸出端,為IC 卡提供電壓。A點為控制端,與單片機的一個端口引腳相連,當該引腳為低電平時,三極管Q1 不工作,B 點輸出電壓約為3.15V;當該引腳為高電平時,三極管Q1 工作,B 點輸出電壓約為1.25V。在程序中查詢IC 卡插座中是否有IC 卡,當有IC 卡時,將A 點所連的單片機引腳設置為低電平,從而為IC 卡提供電源;當沒有IC 卡或對IC 卡的操作結束時,將A 點連的單片機引腳設置為高電平,從而不給IC 卡提供電源。
IC 卡的上電和下電程序如下。
IC 卡上電子程序 IC 卡下電子程序
POWERON POWEROOF
BSF STATUS,RP0 BSFSTATUS,RP0
BCF TRISE,0 BCF TRISE,0
BCF RTISE,1 BCF TRISE,1
BCF STATUS,RP0 BCF STATUS,RP0
BCF PORTE,0 BSF PORTE,0
BCF PORTE,1 BSF PORTE,1
CALL DLYTIM CALL DLYTIM
RETURN RETURN
在本設計中,單片機與IC 卡通信的主程序流程圖如圖4 所示。
5 與PC 機的通信
在本設計中,有PIC 單片機與PC 機串行通信的功能。由于本設計所用的單片機PIC16F877 有USART
方式,該方式可將C 口的RC5 和RC7 設置成異步串行通信模式,因而在本設計中,與PC 機的通信模塊電路
就比較簡單。將單片機C 口的RC6 和RC7 設置為異步串行通信模式,經過MAX232A 芯片進行電平轉換后,
將TTL 電平轉換為RS232 電平,再與DB9 接口相連,即可實現通信。在PC 機端,可以用VC 等編程工具根
據通信協議編寫軟件來控制對IC 卡的讀寫操作。
6 結論
經過調試,本設計能夠在脫離在線仿真器的情況下,上電后獨立的運行程序,并能在PC 機軟件的控
制下,實現對IC 卡中任意位置的讀寫,其中讀寫的起始地址、讀寫數據的個數以及數據內容可以在PC 機
端輸入或選擇。
本設計已在實際應用中測試過,具有實用價值。由于本設計中所使用的PIC 單片機的程序存儲器較大(8KB),
因而可以編寫較大的程序,實現多合一該卡器并由PC 機控制讀寫哪種芯片的IC 卡。另外,由于本設計所
使用單片機的程序存儲器是Flash 存儲器,因而可以方便地實現程序的下載和升級。