基于TMS320VC5410 的DES 加密系統(tǒng)設(shè)計
3 系統(tǒng)軟件設(shè)計:
選用TI 公司CCS(Code Composer Studio)作為該加密系統(tǒng)軟件設(shè)計時的開發(fā)和調(diào)試工具, 使用C 語言和匯編混合編程的模式完成軟件設(shè)計。由于C 語言編程具有便于閱讀、維護、交流和可移植性好的特點,因此采用C 語言完成整個程序的主框架設(shè)計, 在對時間要求比較苛刻的地方或?qū)Υa運行效率有較大影響的場合采用匯編指令編寫。
3.1 DSP 讀IC 卡軟件實現(xiàn):
3.1.1 McBSP1 串口配置:
當(dāng)把卡片插入卡座時,狀態(tài)開關(guān)選通,并且電路板上提示燈亮表示插卡到位,DSP 內(nèi)存中的讀卡狀態(tài)標(biāo)志位設(shè)置為‘1’。TMS320VC5410 開始初始化McBSP1,使其工作在通用IO 口狀態(tài),采用子地址尋址的方式對SPCR11(映射地址為0049h,子地址為00h)、SPCR12( 子地址為01h) 和PCR1(子地址為0Eh)等寄存器進行配置。配置代碼如下:
SPCR11=0x0000;
SPCR12=0x0000;
PCR1=0x3F00;
此時FSR1、FSX1、CLKR1 和CLKX1 均用作通用輸出管腳。把PCR 中的FSRP 位設(shè)置為‘0’,PCR1= 0xFFFB;則卡片VCC觸點電平為低, 卡片處于掉電狀態(tài); 通過語句PCR1|= 0x0004 把FSR1 引腳置高電平給卡片上電。
由于DSP 的FSX1 引腳與卡片的數(shù)據(jù)I/O 觸點相連,要求FSX1 引腳具有雙向傳輸?shù)墓δ?,但該引腳在同一時刻只能處于輸入或輸出一種狀態(tài), 為此定義了以下兩個宏實現(xiàn)引腳在輸入與輸出狀態(tài)的改變。
#define set_IOout () SPSA1=PCR1;SPSD1|=0x0800;FSX1 引腳處于輸出狀態(tài)
#define set_IOin () SPSA1=PCR1;SPSD1=0xF7FF;FSX1 引腳處于輸入狀態(tài)
3.1.2 復(fù)位與復(fù)位應(yīng)答:
DSP 檢測到讀卡狀態(tài)位為‘1’時,給卡片上電,CLK 和RST 保留于狀態(tài)L,開始運行讀卡程序?qū)⒖ㄖ写鎯Φ拿荑€讀取至內(nèi)存中。首先按照ISO7816-3 標(biāo)準對SLE5542 卡片進行應(yīng)答復(fù)位,復(fù)位可以發(fā)生在操作過程的任意時刻。之后,RST 線被置于H 狀態(tài),并維持至少15 μs。在RST 狀態(tài)由高電平到低電平的轉(zhuǎn)換期間CLK 提供一個時鐘脈沖, 卡片內(nèi)的地址計數(shù)器(address counter)清零,I/O 引腳輸出有效數(shù)據(jù)的第1 位,這一數(shù)據(jù)可視為復(fù)位應(yīng)答[5];在此后連續(xù)31 個時鐘脈沖的作用下,主存儲器中的前4 個地址中的32 位標(biāo)頭數(shù)據(jù)被讀出; 下一個時鐘脈沖使I/O 引腳變?yōu)楦咦锠顟B(tài),此時卡片復(fù)位與復(fù)位應(yīng)答完成。
3.1.3 DSP 讀卡主程序設(shè)計:
圖4 為DSP 讀IC 卡主程序設(shè)計??ㄆ瑥?fù)位應(yīng)答之后,則處于等待指令輸入的狀態(tài)。SLE5542 每個指令均由控制字節(jié)、地址字節(jié)和數(shù)據(jù)字節(jié)組成,傳輸時從控制字節(jié)的最低位開始。控制字節(jié)傳送完畢之后,依次傳送地址字節(jié)和數(shù)據(jù)字節(jié), 均為低位在前。每個指令的傳輸都開始于一個Start條件(在時鐘信號為高電平狀態(tài),通過DSP 發(fā)送卡片IO 口一個下降沿),結(jié)束于Stop 條件(在時鐘信號為高電平狀態(tài),通過DSP 發(fā)送卡片IO 口一個上升沿)。根據(jù)指令作用的不同,SLE5542 接收完成后可能處于數(shù)據(jù)輸出模式(DSP 讀卡)或者內(nèi)部處理模式(DSP 寫卡)。
通過TMS320VC5410 發(fā)送讀卡命令和所要讀取內(nèi)容的地址(N=0,…,255)后,在CLK 信號的作用下卡片將主存儲器中的數(shù)據(jù)按比特移至I/O 引腳發(fā)送至DSP 內(nèi)存中。讀取數(shù)據(jù)完成后,額外的一個時鐘信號將使I/O 引腳變?yōu)楦咦锠顟B(tài),卡片退出輸出模式等待接收新的指令,也可以用Break條件(在CLK 為低時,把RST 信號由低電平變?yōu)楦唠娖綘顟B(tài))結(jié)束此次操作。
圖5 顯示了TMS320VC5410 對SLE5542 卡片讀卡程序的調(diào)試結(jié)果,為了驗證讀卡功能的實現(xiàn),系統(tǒng)讀取了卡片中的所有字節(jié)的內(nèi)容。其中前8 個字節(jié)為‘A2131091FFFF8115’ 為IC 卡的廠商標(biāo)識; 之后地址8~20的13 個字節(jié)全為‘FF’是寫保護區(qū);地址21~26 是6 個字節(jié)的用戶代碼‘D27600000400’, 之后又是5 個字節(jié)的寫保護區(qū);從地址32~255 之間的數(shù)據(jù)是用戶數(shù)據(jù)區(qū),可以在這些地址里存放加密系統(tǒng)的密鑰和其他的用戶信息。
3.2 PC 通信軟件設(shè)計:
3.2.1 McBSP0 的初始化配置:
首先通過SPCR10=0x0000,SPCR20=0x0000 把RRST 與XRST 位設(shè)置為‘0’,使串口復(fù)位。設(shè)置PCR0=0x0B0C;采樣率由DSP 內(nèi)部產(chǎn)生,接收與發(fā)送幀同步信號為低有效,時鐘上升沿發(fā)送數(shù)據(jù)、下降沿接收數(shù)據(jù)。其次通過接收控制寄存器RCR10 ( 子地址為02h) 和RCR20 ( 子地址為03h) 來對DSP 串口接收模式進行設(shè)置, 令RCR10=0x0940;RCR20=0x0004;接收幀長度10 字、每字16 bit,忽略除第一個幀同步后的其他幀同步信號。通過傳輸控制寄存器XCR10(子地址為04h)和XCR20(子地址為05h)來對DSP 串口發(fā)送模式進行設(shè)置, 令XCR10=0x0940;XCR20=0x0004; 使數(shù)據(jù)的發(fā)送與接收模式一致。另外, 采樣率發(fā)生器控制寄存器SRGR10(子地址為06h)和SRGR20(子地址為07h)控制采用率發(fā)生器的工作模式。本系統(tǒng)中選擇PC 機的串口工作波特率為38 400,采樣率發(fā)生器計算公式為:
CLKGDV=CPU 工作頻率/(16×波特率)-1
由于TMS320VC5410 工作頻率為100 MHz, 因此CLKGDV=100 000 000/(16×38 400)-1=161, 設(shè)置SRGR1=0x00A1,SRGR2=0x2000; 最后通過SPCR1=0x0001,SRGR2=0x2000;對串口使能,處于可操作狀態(tài),至此完成了McBSP0的初始化配置。
3.2.2 數(shù)據(jù)格式的統(tǒng)一
DSP 通過McBSP0 接收外界PC 機數(shù)據(jù)采用中斷方式。
這里為了實現(xiàn)TMS320VC5410 同步串口與PC 機異步串口通信時數(shù)據(jù)格式的統(tǒng)一, 把McBSP 的1 個16 位字等效為PC 機串口傳送的1 個8N1 模式數(shù)據(jù)(1 個起始位+8 個數(shù)據(jù)位+1 個停止位) 的1 位。PC 機串口每發(fā)送1 個位的數(shù)據(jù),DSP 采樣16 次暫存數(shù)據(jù)接收寄存器DRR10 (地址為21h)中。例如PC 機通過RS232 串口傳送數(shù)據(jù)為‘1’,則DRR10經(jīng)過16 次采用后接收一個字的數(shù)據(jù)為‘FFFFh’,同理若前者后‘0’,則后者為‘0000h’。之后觸發(fā)McBSP0 串口接收中斷,DSP 執(zhí)行中斷服務(wù)程序?qū)RR10 中的有效數(shù)據(jù)(除去起始位和停止位)取走至內(nèi)存中,并對計數(shù)器加1。當(dāng)接收到一個完整的幀后,DSP 置串口數(shù)據(jù)解碼標(biāo)志位為‘1’,DSP開始運行解碼程序,將‘FFFFh’和‘0000h’分別等效為一個比特位‘1’和‘0’,從而恢復(fù)出原始的數(shù)據(jù)幀。
當(dāng)DSP 對接收到的數(shù)據(jù)完成加密之后需要反饋輸出,TMS320VC5410 串口數(shù)據(jù)向PC 機發(fā)送的過程與數(shù)據(jù)接收的過程正好相反。每幀數(shù)據(jù)都需要進行串口編碼之后通過數(shù)據(jù)發(fā)送寄存器DXR10(地址為23h)發(fā)出。即把8 位有效數(shù)據(jù)中的‘0’編碼為‘0000h’,‘1’編碼為‘FFFFh’,按照從低位到高位的順序重新排列編碼后的數(shù)據(jù), 并在幀首和幀尾分別添加起始位‘0000h’和結(jié)束位‘FFFFh’,將每組10 個數(shù)據(jù)作為一幀信號發(fā)出。
圖6 顯示了本文設(shè)計的加密系統(tǒng)的實驗結(jié)果。通過PC機和RS-232 串口發(fā)送字符‘11112222’ 的十六進制形式為‘3131313132323232’共64 bit,TMS320VC5410 接收到64 bit明文數(shù)據(jù)后, 通過讀取IC 卡中的64 bit 密鑰‘3100000000000031’并對明文進行DES 加密后,輸出密文的十六進制形式為‘9*66D*DE9A2D’。結(jié)果顯示系統(tǒng)工作穩(wěn)定可靠,符合設(shè)計要求。
4 結(jié)論
本文采用SLE5542 型IC 卡存儲密鑰,TMS320VC5410中的McBSP 引腳與卡片觸點連接并實現(xiàn)對卡片的應(yīng)答復(fù)位和內(nèi)容的讀取,同時通過RS232 串口與個人PC 機實時交換數(shù)據(jù),接收PC 機發(fā)送的明文并對其DES 加密后反饋輸出。
由于McBSP 的工作機制是同步串口, 把其當(dāng)作通用I/O 口和異步串口使用時必須注意內(nèi)部寄存器的設(shè)置和輸入輸出方向的設(shè)定。經(jīng)軟硬件調(diào)試,實驗結(jié)果表明該方案完全可以滿足大數(shù)據(jù)量的加密,合理使用了硬件資源,可以進一步升級擴展作為數(shù)據(jù)采集保密系統(tǒng)的加密模塊。
伺服電機相關(guān)文章:伺服電機工作原理
評論