時間:2023-04-01 10:31:05
序論:速發表網結合其深厚的文秘經驗,特別為您篩選了11篇接口設計論文范文。如果您需要更多原創資料,歡迎隨時與我們的客服老師聯系,希望您能從中汲取靈感和知識!
1.1固件框架固件程序框架主要包括設備初始化,處理標準USB設備請求和USB掛起時的電源管理等。程序框架使用KeilC51編寫,它是現成的直接可以編譯為HEX文件的8051程序代碼,使用者只需要改寫USB描述表,在一些固定函數下添加功能代碼,主要是EZ⁃USB芯片的初始化配置和實現USB外設功能的代碼。固件框架的流程圖如圖2所示[4]。復位后固件先初始化一些全局變量,然后調用初始化函數TD_Init(),該函數初始化USB設備到沒有配置的狀態,并打開中斷。循環1s進行一次設備重枚舉,直到端點0收到一SETUP包,然后進入while循環語句,開始TD_Poll任務處理函數。依次執行下列過程:(1)TD_Poll()用戶任務調度函數;(2)如果發現USB設備請求,則分析該請求并執行;(3)如果收到USB掛起信號,則調用TD_Suspend()掛起函數,內核掛起,直到出現USB遠程喚醒信號,調用TD_Resume(),內核喚醒,從新進入while循環。固件框架包含的文件如表1所示。
1.2固件代碼編寫USB固件程序主要的功能有2個:一是PC機的Windows系統能夠檢測與識別相應設備;二是數據的上傳與下傳。Cypress公司為EZ⁃USBFX2系列芯片提供的固件程序框架極大的簡化了固件開發。一般的固件開發只需要修改用戶調度函數文件Periph.c與USB描述符列表文件Dscr.a51,這兩個文件在KeilC51編程器中都可打開。Periph.c文件中只需要修改TD_Init()與TD_Poll()函數。在本設計中為了能進行高速的數據傳輸,EZ⁃USB芯片采用SlaveFIFO接口方式。此方式下,USB內核不參與數據的傳輸,所以TD_Poll()函數不用寫代碼,設置成空函數就可以了。這樣USB固件程序的開發主要任務就是改寫TD_Init()函數與USB描述符列表文件Dscr.a51。在本設計中配置端點6傳輸方向為IN,傳輸方式為塊傳輸,緩沖大小設置為1024B,深度為2級,作用是上傳采集的數據。配置端點2傳輸方向為OUT,傳輸方式為塊傳輸,緩沖大小設置為1024B,深度為2級,作用是下傳FPGA的命令配置參數。固件程序的編譯使用KeilμVision2集成編譯環境,集成編譯環境中包括有C51編譯器,A51匯編器等工具與調試器。代碼中還需包含頭文件FX2.h與Fx2regs.h,庫文件Ezusb.lib。對修改后的代碼進行編譯與鏈接,最后生成HEX文件。HEX文件可直接下載到EZ⁃USB中運行。HEX文件也可根據需要通過CYPRESS公司提供的EZ⁃USBFX2固件開發包中的Hex2bit.exe應用工具生成IIC文件,IIC文件用于燒寫到EEPROM中。
2固件程序的裝載
CY7C68013A芯片集成增強型8051內核,內部無ROM等永久性存儲器,每次上電后需要從新將固件程序載入到片內RAM中。EZ⁃USBFX2固件程序有3種加載方式:(1)如果沒有片外存儲器連接到EZ⁃USBFX2上,或者所讀取的首字節不是0xC0或0xC2,則芯片枚舉為缺省的USB設備,其中描述符,VID,PID由芯片內部硬件邏輯提供。然后固件程序與描述符表由主機下載,EZ⁃USBFX2開始執行下載的代碼,首先模擬物理電路的斷開與連接,此時EZ⁃USBFX2將再次進行設備枚舉,這稱為重枚舉,重枚舉將根據下載的代碼對設備進行從新定義。(2)如果USB檢測到一個E2PROM,其首字節為0xC0時,芯片也枚舉為缺省的USB設備,但VID與PID值將從此EEPROM中讀取,USB描述符由芯片內部提供。這種模式稱為“C0”加載。主機根據讀得的VID與PID值,由固件下載驅動程序將指定的固件程序下載到EZ⁃USBFX2,然后再重枚舉。(3)如果USB檢測到一個E2PROM,其首字節為0xC2時,固件程序將從此E2PROM中自動下載到FX2芯片上,CPU通過復位后運行下載的程序代碼。這種模式稱為“C2”加載。其中第一種方式主要是開發階段使用,它需要主機上有CYPRESS公司提供的開發軟件USBCONTROLPANEL,每次手動將程序下載到USB上。第二種方法需要開發者另外再編寫一個固件下載驅動程序,而且也需要在電路中外加一小容量的E2PROM。第3種方法是將固件程序燒寫到E2PROM中,每次上電自動加載,這種方式簡單直接。本設計采用第3種方式。
3驅動程序及INF文件的編寫
設備驅動程序是應用程序和硬件之間的連接,應用程序通過驅動程序與設備通信,數據交換,從而獲取數據和對設備進行控制。CYPRESS公司為EZ⁃USBFX2提供一通用的驅動程序CYUSB.SYS,其功能完備,使用者不需要修改直接使用[5]。USB設備都具有一個VID和PID,此處的VID和PID與在固件程序轉載階段的值不同,這兩個值是用來安裝設備驅動程序的,VID和PID放到設備描述符表中,通過設備請求讀入到Windows系統中。同時,Win⁃dows操作系統通過INF文件將一VID和PID綁定到某一設備驅動程序。當設備連接到主機上時,讀得設備的VID和PID,通過存儲在INF文件中的信息找到設備驅動。此后,Windows會將設備的VID和PID值保存到注冊表,設備再次連接時,系統就會在注冊表中查找設備驅動程序信息。具體操作方法是將驅動安裝的模板INF文件的MODEL節中的VID與PID值修改成與USB設備的VID和PID值相同。相應STRING節中也修改。
4與應用程序的接口
圖3是驅動程序流程圖,從圖中可以看到功能驅動程序的位置。用戶通過一種規范的方式調用WIN32API函數來訪問硬件,不用考慮如何控制硬件的具體細節。USB開發過程主要應知道應用程序調用驅動程序的接口函數,如下介紹,應用程序直接調用這些函數來實現與硬件設備的數據交換。CREATEFILE通過設備名打開設備,獲得設備句柄,有設備句柄就可以讀寫設備。通過下面語句獲得設備句柄。DEVICEIOCONTROL讀寫控制設備,應用程序調用此函數并加以不同的I/O控制碼參數,完成應用程序與驅動程序將的數據交換。主要用到的I/O控制碼有:IOCTL_EZUSB_BULK_READ該控制碼從指定的批量管道中讀取數據。讀操作阻塞調用進程,直到數據傳送完成。IOCTL_EZUSB_BULK_WRITE該控制碼向指定的批量管道中寫入數據。寫操作阻塞調用進程,直到數據傳送完成。CLOSEHANDLE通過句柄關閉設備,設備請求完成后通過此函數關閉。
1.1DAC與濾波放大單元DAC與濾波放大單元用于將數字信號轉換為模擬信號,并完成對信號的調理、幅度調節與功率放大功能。其硬件電路如圖2所示。該單元由3部分電路組成,分別是DAC芯片電路、無源濾波電路和差分放大電路。DAC芯片為ADI公司生產的高性能、低功耗CMOS數模轉換芯片AD9762,AD9762為12位分辨率,支持最高125MS/s的更新速率。該芯片使用5V、3.3V可選單電源供電,最高功耗175mW,2mA~20mA差分電流輸出,負載RLOAD為100Ω時輸出電壓范圍為0.2V~2V[2]。FSADJ引腳連接外接電阻RSET,用于滿量程電流輸出調節。REFIO引腳用于基準電壓VRFE輸入/輸出,選擇內部1.2V基準電源時通過一個0.1μF電容與模擬地連接。其差分輸出電壓VDOUT與輸入的12位數字代碼(DCODE)的關系式為。無源濾波電路由電感與電容組成截止頻率為20MHz的7階巴特沃斯低通濾波器,用于信號整形和消除毛刺干擾。差分放大電路以全差分放大器AD8476為核心組成,用于將通過無源濾波電路的模擬差分信號進行增益調節和功率放大。AD8476是一款功耗極低的全差分精密放大器,其帶寬為6MHz,使用±5V電源供電時的輸出電壓范圍為-4.845V~4.82V[3]。檢測激勵信號的峰峰值為4.3V和6.2V,而DAC的輸出峰峰值電壓為2V,因而差分放大電路的增益應當大于3.1,這樣才能使得激勵生成通道的輸出信號幅值符合檢測需求。考慮到DAC的轉換效率和可能存在的誤差,可設計差分放大電路具有兩個略大于滿幅度輸出的增益值。圖2中使用外部擴展電阻R1~R6組成反饋電阻網絡,其中R1=R2=10kΩ為輸入電阻,R3=R6=24kΩ、R4=R5=33kΩ為兩組反饋電阻。該電路的增益值分別為A1=R3/R1=2.4,A2=R4/R1=3.3。為了提高檢測接口的自動化程度,使用1個2路2:1電子開關ADG736用于兩組反饋電阻的切換,通過改變其控制端IN1和IN2的電平邏輯,完成開關動作。ADG736使用5V供電時,導通電阻RON為2.5Ω,帶寬大于200MHz,通過峰值電壓為5V。
1.2二線接口與混合電路單元二線接口與混合電路單元用于為信號激勵與數據采集提供對外二線接口和實現收發信號的雙工傳輸。其硬件電路如圖3所示。二線接口電路由電壓比為1的變壓器以及電阻RS1、RS2和電容C9、C10組成,用于提供檢測電路對外的二線接口,實現接收與發送信號的傳輸,同時可以隔離外部直流信號。RS1、RS2用于與線路負載阻抗匹配并隔離遠端反射和提供線路的能量交換,電容C9、C10用于配合組成激勵發送端擴展濾波電路?;旌蠁卧墓δ苁且浑A模擬回波抵消,用于抵消本地發送信號。圖2中R7~R10為輸入電阻,同時與C3~C8組成一階低通濾波器。兩個儀表放大器AD8429用于將二線平衡信號轉換為單端信號。AD8429為低噪聲、高精度儀表放大器,其增益為1時增益精度為0.02%、CMRR為80dB、帶寬為15MHz,使用±12V電源供電時其輸出電壓范圍為-10.1V~10.7V,使用單個增益控制電阻RG能夠控制其增益范圍為1~1000,其增益控制關系為G=1+6kΩ/RG[4]。LT6600-10將一個全差分放大器與一個近似切比雪夫(Chebyshev)頻率響應的四階10MHz低通濾波器集成在一起。芯片為低噪聲全差分輸入/輸出放大器,內部集成兩個運算放大器、電阻電容網絡,組成1倍增益放大電路和一個10MHz低通濾波器,使用±5V電源供電時其輸出電壓范圍可達到±5V。若線路電阻RS與負載電阻RL完全匹配,則第二個AD8429的增益值為2時,混合電路的輸出U′3=U3??紤]到阻抗失配現象的普遍存在,因此選擇電位器作為第二個AD8429的增益控制電阻,在線路阻抗失配的條件下,通過調節增益控制電阻來實現混合單元消除近端信號的目的。根據前文所述,可以得到混合電路輸出信號U′3與二線輸入信號U3比值跟增益控制電阻RG之間的關系。因此只要知道RG的值,就能夠通過式(5)準確地對通過混合單元造成的輸入信號幅值的線性誤差進行修正。為了提高檢測接口的自動化程度和實現對RG值的實時感知,選擇數字電位計AD5272作為第二個AD8429的增益控制電阻。AD5272為1024位分辨率、1%電阻容差誤差、I2C接口和50-TP存儲器數字變阻器,最大阻值為20kΩ,可使用5V電源供電[6],其阻值調節步長為1.95Ω。
1.3信號調理與ADC單元信號調理與ADC單元用于將混合電路輸出的模擬差分信號轉換為輸入信號并輸入到FPGA,該部分為數據采集的核心單元,其硬件電路如圖4所示。由于被測信號的最高頻率不超過2.048MHz,根據奈奎斯特采樣定理,使用4.096MHz采樣速率進行采樣就能得到信號完整的信息,但是在工程中,通常使用5~10倍速率進行采樣。因此ADC選擇12位、10MS/s采樣速率模/數轉換器AD9220,其為+5V單電源供電,70dB信噪比,86dB無雜散動態范圍,內置片內高性能、低噪聲采樣保持放大器和可編程基準電壓源,并具有滿量程輸出指示功能[7]。使用1V基準電壓時其輸入范圍為2V(峰-峰值)。信號調理電路應當具有抗混疊濾波和信號幅度調節的功能。該電路選擇全差分放大器AD8476組成,考慮到檢測時輸入信號的幅值大于ADC的輸入范圍,因而選擇其輸入電阻為10kΩ,選擇數字電位器AD5272為反饋電阻RF,則其增益值G4=RF/10kΩ,電路的增益值為0.0002~2可調。放大器輸出經過2個100Ω電阻和2個電容組成的低通濾波器后送至ADC。同時,AD8476以ADC的基準電壓VREF為共模參考電壓。
1.4FPGA單元FPGA單元以Xilinx公司的FPGA芯片XC3S400為核心電路組成,其程序存儲芯片為XCF02S,使用40MHz有源晶振,5V電源供電,使用穩壓芯片提供電路所需的3.3V、2.5V和1.2V電源。USB接口作為微處理器常用的外部總線接口,目前已經得到了廣泛的應用[8],因此考慮選用USB2.0接口作為FPGA與上位機之間的數據接口。同時采用JTAG接口用于FPGA和其配置芯片的程序燒寫。關于FPGA電路的設計、開發技術已經較為成熟,本設計相比與其他通用FPGA電路的設計并無獨特之處,因此不再對FPGA單元進行詳細描述。
2FPGA程序設計
在檢測接口電路的設計中,FPGA是檢測接口電路的信息傳輸與控制單元的核心,其可編程配置能力和能夠高速、并行處理數字信號的能力是檢測接口的靈活性和升級性的關鍵。其內部程序使用Xilinx公司的FPGA開發環境ISE進行設計并完成燒寫。程序設計使用模塊化設計思想,其結構示意圖如圖5所示,可以分USB傳輸、管理控制、DAC傳輸、輸出增益控制、混合單元控制、信號調理控制、ADC傳輸控制和增益補償8個模塊。下面就各個模塊的功能分別進行介紹。(1)USB傳輸模塊,用于通過FPGA單元上的USB接口電路實現FPGA芯片與上位機的信息傳輸,具有USB電路的配置功能,并實現標準USB信號封裝、解封裝功能,將接收到的上位機信號解封裝為透明數據傳送到管理控制模塊和DAC傳輸模塊,將管理控制模塊、增益補償模塊輸出信號封裝為標準USB信號通過USB接口電路傳輸到上位機。(2)管理控制模塊,是整個程序的主控單元。該模塊用于接收USB傳輸模塊輸出的控制信號,對其余的通信模塊進行控制,并輸出檢測電路的工作狀態到USB傳輸模塊,最終傳輸到上位機。同時用于控制其余模塊的工作狀態,接收混合單元控制模塊、信號調理控制模塊、ADC傳輸模塊輸出的反饋信息進行工作狀判斷,根據混合單元控制模塊、信號調理控制模塊反饋信息控制增益補償模塊的補償量。(3)DAC傳輸模塊,在管理控制模塊的控制下工作,接收USB傳輸模塊輸出的激勵信號,并將信號轉換為DAC芯片的數據輸入信號,同時為DAC芯片提供轉換時鐘。(4)輸出增益控制模塊,用于在管理控制模塊輸出的控制信號下工作,根據需求通過兩路輸出信號IN1和IN2分別控制差分放大電路的2個電子開關ADG736。(5)混合單元控制模塊,用于在管理控制模塊輸出的控制信號下工作,根據需求通過輸出I2C信號控制混合單元的數字電位計AD5272的阻值,完成信號混合功能,并將AD5272的阻值信息反饋給管理控制單元。(6)信號調理控制模塊,用于在管理控制模塊輸出的控制信號下工作,根據需求通過輸出2路I2C信號控制信號調理電路的2個數字電位計AD5272的阻值,完成信號調理功能,并將2個AD5272的阻值信息反饋給管理控制單元。(7)ADC傳輸模塊,在管理控制模塊的控制下工作,接收DAC芯片輸出的采樣數據,并將數據傳輸到增益補償模塊,同時為ADC芯片提供采樣時鐘。該模塊同時接收ADC輸出的滿量程指示信號和數據輸入指示信號,并傳送給管理控制模塊。(8)增益補償模塊,用于接收來自ADC傳輸模塊的采樣數據和管理控制模塊輸出的增益補償信息,對ADC芯片采樣獲得的信號進行增益補償,實現檢測信號的完整性。
2軟件設計
本接口設計選用開發環境MDK,在MDK環境下可以使用C/C++方便地開發Cortex-M3的應用程序.與其他開發程序相比,MDK具有入門容易、使用方便,并在調試程序、軟件仿真方面也有很強大的功能.以太網收發數據程序流程如圖3所示.主程序通過查詢的方式發送數據,采取通過判斷函數返回值方式是否接收到數據,若接收到數據,通過指針把數據包傳遞給上層的LwIP協議棧進行處理,完成數據包的收取.收發數據主程序主要包括系統及外設的初始化、以太網控制器的初始化、發送數據、接收數據和應用處理等部分.
2.1STM32庫STM32庫是由ST公司針對STM32提供的函數接口,即API(ApplicationProgramInterface),開發者可以調用這些庫函數接口來配置STM32的寄存器,使開發人員得以脫離最底層的寄存器操作,有開發速度快、易于閱讀、維護成本低等優點.實際上,庫是架設在寄存器與用戶驅動層之間的代碼,向下處理與寄存器直接相關配置,向上為用戶提供平配置寄存器的接口[3].本設計采用最新的STM32的3.5版庫文件,相對于以往版本的庫文件兼容性更好.
2.2LwIP協議棧要實現TCP/IP協議棧,代碼可以自行編寫,但一般都會移植更加穩定優良的代碼.LwIP是LightWeightInternetProtocol的縮寫,是由瑞士計算機科學院AdamDunkels等開發的適用于嵌入式領域的輕量級TCP/IP協議棧,它可以移植到含有操作系統的平臺中,也可以在無操作系統的平臺下運行.由于其開源,占用的RAM和ROM比較少,支持較為完整的TCP/IP協議,且十分便于剪裁、調試,被廣泛地應用于中、低端的32位操作平臺[4].該協議棧提供了一組API函數應用程序調用,編程方便[5].LwIP通過pbuf建立了與底層硬件收發數據包的數據結構,可以實現數據的管理;netif結構體則保存了網卡地址、IP地址、網關等設置的這些信息.下面例舉部分LwIP_Init()函數,其主要功能是初始化LwIP協議棧,主要是把ENC28J60與LwIP連接起來,包括IP,MAC地址,接口函數。
3仿真與應用
MDK仿真工具強大,本設計軟件調試部分利用MDK軟件針對STM32進行仿真,執行工程中的代碼.仿真結果如下圖4所示.構成網絡應用的軟件有不同的結構,有B/S結構(瀏覽器/服務器)和C/S(客戶端/服務器).本網絡接口設計中HTTP服務器其是基于B/S結構的,用戶運行應用程序時通過訪問Web調用服務器的應用程序,并通過瀏覽器把結果顯示給用戶.該以太網接口應用于校園能耗監控系統中,所以設計出一款可以遠程控制LED燈亮滅的簡單應用,其運行結果如圖5所示.
1.1獲得授權許可此階段的目的是為了獲得授權許可,標準定義的四種基本授權許可類型分別為授權碼、隱式、資源擁有者口令憑證和客戶端憑證,此外用戶可以自定義擴展的授權許可類型。授權過程中需要利用兩個服務接口:授權接口和令牌接口,客戶端使用授權接口通過用戶重定向從資源擁有者獲得授權,另外客戶端使用令牌接口來獲得訪問令牌。為了獲得授權許可,客戶端需要在HTTP請求中加入所需的參數并將請求發往授權接口,這些參數包括response_type、client_id、redirect_uri、scope和state。client_id是一個獨一無二的客戶端標識符,在客戶端注冊時頒發客戶端標識符,同時還頒發客戶端機密(client_secret),客戶端標識符不能單獨用于客戶端認證。redirect_uri是重定向接口,客戶端注冊時需要設置該接口,授權服務器通過使用重定向接口將資源服務器用戶回送到客戶端。scope是訪問請求的作用域,如果客戶端忽略該值,授權服務器必須使用預定義的默認作用域。state被客戶端用于維護請求狀態。當授權許可類型是授權碼時,response_type參數的值必須為code。當授權碼類型是隱式時,response_type的值為token。當授權碼類型為資源擁有者口令憑證時,response_type的值為psword,客戶端必須向服務器提交客戶標志、客戶端標識符和客戶端機密。當授權碼類型為客戶端憑證時,客戶端只需要將值為client_credentials的response_type參數發送。當客戶端使用授權碼許可類型且資源擁有者批準授權請求,需要在給客戶端的應答中頒發授權碼,應答中可能包含的參數有code和state。code是授權服務器生成的授權碼,為了降低安全風險,授權碼必須在頒發后盡快失效,規范中推薦授權碼最大生存時間為10min。在客戶端授權請求時如指定了state,則授權服務器的應答中state必須與從客戶端接收到的值保持一致。如果客戶端使用其他三種客戶端憑證類型將在此步驟直接獲得訪問令牌。OAuth2.0相比OAuth1.0做了較大簡化,比如在OAuth1.0中需要向服務接口發送由HTTP請求URL和其他參數計算而來的簽名值,而在OAuth2.0中不再計算簽名,此外,OAuth2.0也取消了oauth_timestamp和oauth_nonce兩個參數。同時,OAuth2.0對認證過程中的數據傳輸保密性提出了更高的要求,強制使用TLS來保障數據安全。
1.2獲得訪問令牌授權碼類型客戶端獲得授權許可后,需要向授權服務器發送HTTP請求以獲得訪問令牌。HTTP請求包括以下參數:grant_type、code、redirect_uri和client_id。當平臺使用授權碼許可類型時,grant_type值必須為“authorization_code”。code參數值是在授權許可步驟中從授權接口獲得的授權碼。redirect_uri和client_id與前一步驟相同。授權服務器收到HTTP請求后,需要對客戶端進行認證,并驗證授權碼合法性。如果通過授權碼合法性驗證,授權服務器需要向客戶端發送應答,頒發訪問令牌access_token和可選的刷新令牌refresh_token。此外,應答中可能還包括token_type和expires_in參數,其中token_type參數是訪問令牌類型,expires_in參數來指定訪問令牌的有效期。
1.3訪問受保護資源客戶端通過向資源服務器出示訪問令牌來訪問受保護資源,資源服務器需檢查訪問令牌,確保訪問令牌合法。如果訪問令牌合法則正常受理訪問請求,如果令牌過期,則要求客戶端重新獲取訪問令牌。如果在此之前授權服務器已經向客戶端頒發過刷新令牌,則使用刷新令牌來獲取新的訪問令牌。
2.OAuth2.0客戶端認證接口實例
本文以某社交平臺授權機制為例,分析OAuth2.0客戶端注冊和認證的流程,并以CocoaTouch為基礎實現了認證客戶端。
2.1客戶端注冊第三方開發人員在設計新的客戶端之前需要在官方網站上注冊應用,注冊信息包括應用名稱、應用平臺、應用介紹等,注冊成功之后將獲得AppKey和AppSecret,這兩個字符串分別對應client_id和client_secret參數。
2.2服務接口開放平臺提供了若干服務接口(API),與OAuth2.0認證相關的服務接口有五個,其中兩個API接口將在下文中使用到,分別是請求授權和獲取授權。請求授權用于圖1流程中第1、2步驟,地址。獲取授權用于圖1流程中第3和第4步驟,地址/oauth2/access_token。
2.3客戶端實現及安全考慮為了便于認證客戶端的實現,可以定義一個OAuth2Utility類,下面是類中幾個主要的方法。(void)authorizationRequest;//申請獲得授權(void)authorizationResponse:(NSString*)authorizationCodeclientState:(NSString*)state;//客戶端接收到授權許可(void)accessTokenRequest:(NSString*)authorizationCodegrantType:(NSString*)type;//使用授權許可申請訪問令牌(void)accessTokenResponse:(IHTTPRequest*)request;//客戶端接收到訪問令牌在移動客戶端API中,申請訪問授權需要提交的參數包括client_id、response_type和redirect_uri,如需要支持移動客戶端html5特性,需提交參數display,并將該值設置為“mobile”。所有參數需要使用x-www-form-urlencoded格式進行編碼,并通過HTTPGET/POST方式發送。比如使用授權碼類型的客戶端發送的HTTP請求可能。RFC6749規范定義的四種標準授權許可類型中,授權碼許可被廣泛支持,而在隱式許可類型中,訪問令牌作為重定向URI的一個部分直接返回給客戶端,不頒發刷新令牌。資源擁有者口令憑證許可類型和客戶端憑證許可類型由于存在巨大的安全風險,一般只在特別的場合下使用。開放平臺的請求授權服務接口將授權碼通過用戶發回給客戶端,在本例中服務接口發回客戶端的HTTP應答可以,URL中的code值就是授權碼。不少服務接口并沒有完全遵循規范的要求進行設計,比如本文的例子,容易造成很多安全隱患。Homakov[5]利用跨站請求偽造(CSRF)攻擊來非法訪問第三方資源,攻擊者可以利用這個被挾持的賬號繼續挾持其他網站的賬號[6]。此外,攻擊者還可以使用猜測授權碼、惡意客戶端授權、授權碼釣魚、用戶會話模仿等方式來獲得授權碼。搜狐微博OAuth2.0授權曾經由于設計不當,被發現在獲取授權碼的時候沒有返回state參數而造成安全隱患。為了規避安全風險,建議服務接口設計時應采納state參數,并在客戶端注冊期間使用完整的重定向URI[7]。此外,為了減少授權碼重放攻擊帶來的危害,應該盡可能縮短授權碼的有效期??蛻舳双@得授權碼之后就可以向獲取授權服務接口要求交換訪問令牌,交換訪問令牌需要提交的參數包括client_id、client_secret、grant_type,如果grant_type類型為授權碼時,還必須提交code和redirect_uri參數。所有參數經過編碼之后,通過HTTPPOST方法發送到獲取授權服務接口。HTTP發送的數據可以。獲取授權服務接口對客戶端提交的參數進行驗證,如驗證通過則向客戶端發送應答,應答中包括access_token、expires_in、remind_in和uid。access_token是頒發的訪問令牌。expires_in是令牌有效期,令牌有效期取決于令牌泄漏的風險,由許多不同的因素決定。該平臺為幾種客戶端分別設置了不同的令牌有效期,比如測試客戶端的有效期為1d,普通客戶端為7d。remind_in即將廢棄,現已使用expires_in代替remind_in。uid是當前授權用戶的編號。服務接口應答數據采用JSON編碼,JSON是一種基于Javcript輕量級的數據交換格式??蛻舳诵枰褂肑SON的開發庫來幫助解讀JSON格式數據。客戶端獲得訪問令牌之后就可以使用令牌訪問資源,比如讀取公共信息或者發信息等。以讀取公共信息為例,客戶端向公共信息服務接口提交訪問令牌就能獲得最新的200條公共信息,客戶端可以通過提交參數count來設置單頁返回記錄的條數。客戶端通過HTTPGET提交數據,返回的數據使用JSON格式編碼。
2.4客戶端測試本例中客戶端應用平臺為iOS,客戶端在MacOSX10.8.3系統以及Xcode4.6.2開發環境下測試通過。圖2是客戶端運行的效果截圖。
2LVDS高速數據接口實現
2.1LVDS接口硬件電路設計由于趨膚效應和介質損耗,高速信號在傳輸過程中會衰減。因此,當傳輸距離較長時,往往要使用電纜驅動器和均衡器來保證高速數據傳輸的準確性。電纜驅動器將信號以最大功率耦合到電纜上[4],延長信號的傳輸距離,電纜均衡器可以對傳輸的信號進行高頻補償,以至達到標準邏輯電位。本設計中,LVDS串行器/解串器分別選用TI公司的SN65LV1203和SN65LV1224,信號驅動器/電纜均衡器分別選用NS公司的CLC001和CLC014。LVDS接口電路結構如圖2所示,采編存儲器的FPGA控制LVDS串行器將10bit并行數據轉換成差分串行數據,再通過電纜驅動器將信號耦合到電纜上。地面測試臺的電纜均衡器對接收到的信號進行高頻補償之后傳送給解串器,解串器根據參考時鐘將差分串行數據轉換成10bit的并行數據,由FP-GA進行后續的處理。
2.2FPGA邏輯控制LVDS數據接收由于CPCI接口傳輸的時鐘和LVDS數據接收電路的時鐘不匹配,為了保證數據傳輸的可靠性,在編寫VHDL語言程序時FPGA內部調用一個異步時鐘控制的緩存FIFO[8]IP核來對接收到的LVDS高速數據進行緩存,如圖2所示。上位機通過配置PCI9054的傳輸計數寄存器,將一次DMA傳輸的數據量設置為2kbyte。寫FIFO的時鐘為18.432MHz,讀FIFO的時鐘為36.864MHz,當FIFO內數據量達到2kbyte時,FPGA立即通知上位機啟動一次DMA傳輸。經計算,從FIFO內讀走2kbyte數據大約耗時54μs,在這個時間段內寫入FIFO的數據量大約為1kbyte,所以,當DMA傳輸結束時,FIFO內數據不足2kbyte,上位機直到FIFO內數據量再次達到2kbyte時才會啟動下一次的DMA傳輸。為了避免PCI9054不能立即執行DMA傳輸而導致FIFO數據溢出,FIFO容量要大于2kbyte。本設計中選擇容量為4kbyte的FIFO,經驗證,不會出現FIFO溢出現象。
3CPCI局部總線接口實現
實現CPCI接口協議一般有兩種方法。其中一種方法為:利用FPGA實現接口邏輯。這種方法雖然可以充分利用FPGA的資源,減小成本,但PCI邏輯十分復雜,可靠性不能得到保證,且開發周期長。另外一種方法為:采用專用的PCI接口控制芯片。專用接口芯片功能強大,性能穩定,設計方便,很大程度上減少了設計者的工作量,縮短了開發周期。所以,本設計中選擇使用PCI9054接口控制芯片與FPGA配合工作的方式來實現CPCI局部總線接口通信。
3.1EEPROM的配置在Windows環境下,為有效管理多塊CPCI板卡資源,實現多卡協同工作。通過設置EEPROM配置選項中的ClassCode/REV值,解決使用同一驅動情況下,多塊CPCI板卡識別問題。地面測試臺含信源卡和接口卡兩塊CPCI功能板卡,圖3為接口卡的EEPROM配置文件截圖,各板卡需要設置不同的ClassCode/Rev(圖中紅色選框部分),上位機程序通過識別不同的ClassCode/Rev達到控制不同板卡的目的。ClassCode/Rev為一個32bit數據,規定高8bit作為不同板卡區分標志,低24bit保留。其中D31~D28功能標識,區分是否為信源卡、接口卡等功能卡。D27~D24數量標識,區分當前功能卡的數量,具體約束如下表1所示。
3.2CPCI局部總線實現方法
3.2.1PCI9054工作模式選擇PCI9054總線控制芯片有3種工作模式,即M模式、C模式、J模式。其中,C模式最為簡單,類似于單片機的工作方式,它的地址線和數據線分開使用,可以很方便地控制本地時序。所以本設計中PCI9054工作于C模式,由FPGA邏輯控制本地時序來完成CPCI局部總線與功能板卡之間的通信。
3.2.2CPCI總線訪問本地總線PCI9054的訪問方式選擇DMA方式。PCI9054作為主控設備,通過內部的DMA控制器來實現局部總線上數據與CPCI總線上數據的傳輸。在DMA訪問方式下,一個總線周期的時序如圖4所示。當CPCI總線訪問本地總線時,PCI9054內部的DMA控制器發出LHOLD信號來申請控制局部總線,當其收到響應信號LHOLDA后,才獲得局部總線的控制權。當ADS#信號有效時,局部總線上的地址信號LA為有效地址;當BLAST#信號有效時,代表一次單周期訪問開啟;READY#為本地總線的狀態反饋信號,只有當其有效時,表示本地總線已經準備好,才可以進行訪問;當LW/R#為高時,代表單周期訪問為寫操作,當LW/R#為低時,代表單周期訪問為讀操作。在本設計中,FPGA通過識別地址信號LA來判斷具體的操作類型。當上位機向接口卡下發控制命令時,為CPCI總線到本地總線的數據傳輸,具體的工作流程為:當上位機下發命令時,啟動一次單周期寫訪問,同時下發特定的寫地址LA1,FPGA反饋READY#信號,并判斷到LW/R#信號為高,即得知上位機要下發數據,便從該特定地址LA1將命令代碼讀出,進行解碼之后將命令下發給采編存儲器。當接口卡向上位機傳輸LVDS高速數據時,為本地總線到CPCI總線的數據傳輸,具體的工作流程為:當圖1中所示的LVDS數據緩存FIFO內數據量達到2kbyte,啟動一次DMA傳輸,即一次DMA傳輸將2kbyte的數據上傳給上位機進行實時顯示與處理。上位機通過下發特定地址信號LA2來向FPGA查詢FIFO內數據量是否達到2kbyte,一旦其得到緩存FIFO內數據量滿足要求的信息,立即啟動一次單周期讀訪問,并向FPGA下發數據傳輸地址LA3,FPGA反饋READY#信號,并判斷到LW/R#信號為低,便將LVDS數據通過地址LA3上傳給上位機。
4設計驗證
將信源卡和接口卡分別插到背板上的2號和3號物理槽中,1號物理槽為系統槽,打開計算機系統,安裝驅動之后,兩塊功能板卡均能夠被識別。分別對兩塊板卡進行操作,均能實現各自的功能且互不影響,說明EEPROM的配置正確可行。以接口卡為例,用Chipscope來監測CPCI總線對本地進行讀、寫操作的實際過程,圖5和圖6分別為單周期讀訪問時序截圖和單周期寫訪問截圖。如圖5所示,當FIFO內數據量達到2kbyte時,信號f_fifo_hf變高,此時啟動一次單周期讀訪問,LW/R#為低,通過地址0008h將數據87h上傳給上位機。實際時序與第3節介紹的本地總線向CPCI總線傳輸數據的理論時序一致,對接收到的數據文件進行分析,數據結構完整,數據包計數連續,沒有丟數現象,驗證了本設計中本地總線向CPCI總線傳輸數據的正確性。如圖6所示,上位機向FPGA下發控制信號,此時啟動一次單周期寫訪問,LW/R#為高,FPGA通過地址0004h獲得命令代碼67h。實際通信時序與第3節介紹的CPCI總線向本地總線傳輸數據的理論時序一致,且命令下發正確,驗證了本設計中CPCI總線向本地總線傳輸數據的正確性。
帶有I2C總線接口的器件可以十分方便地將一個或多個單片機及器件組成單片機系統。盡管這種總線結構沒有并行總線那樣大的吞吐能力,但由于連接線和連接引腳少,因此其構成的系統價格低、器件間總線連接簡單、結構緊湊,而且在總線上增加器件不影響系統的正常工作,系統修改和可擴展性好。即使有不同時鐘速度的器件連接到總線上,也能很方便地確定總線的時鐘。
如今,為了提高系統的數據處理精度和處理速度,在家用電器、通訊設備及各類電子產品中已廣泛應用DSP芯片。但大多數的尚未提供I2C總線接口,本文將介紹一種基于CPLD的已實現的高速DSP的I2C總線接口方案。
圖1I2C總線接口電路結構
1I2C通信協議
I2C總線是一種用于IC器件之間的二線制總線。它通過SDA(串行數據線)及SCL(串行同步時鐘線)兩根線在連到總線上的器件之間傳送信息,通過軟件尋址實現片選,減少了器件片選線的連接。CPU不僅能通過指令將某個功能單元電路掛靠或摘離總線,還可對該單元的工作狀況進行檢測,從而實現對硬件系統的擴展與控制。I2C總線接口電路結構如圖1所示,I2C總線時序圖如圖2所示。
I2C總線根據器件的功能通過軟件程序使其可工作于發送(主)或接收(從)方式??偩€上主和從(即發送和接收)的關系不是一成不變的,而是取決于數據傳送的方向。SDA和SCL均為雙向I/O線,通過上拉電阻接正電源。當總線空閑時,兩根線都是高電平。連接總線的器件的輸出級必須是集電極或漏極開路的,以具有線“與”功能。I2C總線的數據傳送速率在標準工作方式下為100kbit/s,在快速方式下,最高傳送速率可達400kbit/s。
在數據傳送過程中,必須確認數據傳送的開始和結束信號(也稱啟動和停止信號)。當時鐘線SCL為高電平時,數據線SDA由高電平跳變為低電平則定義為“開始”信號;當SCL為高電平時,SDA由低電平跳變為高電平則定義為“結束”信號。開始和結束信號都由主器件產生。在開始信號以后,總線即被認為處于忙狀態;在結束信號以后的一段時間內,總線被認為是空閑狀態。
在I2C總線開始信號后,依次送出器件地址和數據,I2C總線上每次傳送的數據字節數不限,但每一個字節必須為8位,而且每個傳送的字節后面必須跟一個認可位(第9位),也叫應答位(ACK)。從器件的響應信號結束后,SDA線返回高電平,進入下一個傳送周期。
2設計方案
本文以DSP芯片ADSP21992與時鐘芯片PCF8583的控制接口為例,說明基于CPLD的I2C總線接口設計方案。
ADSP21992是2003年最新推出的160MIPS、帶CAN通信接口的適合于高精度工業控制和信號處理的高性能DSP芯片。它帶有48K片內RAM、SPORT通信接口、SPI通信接口、8通道14位A/D轉換器以及PWM等。
PCF8583是一款帶有256字節靜態CMOSRAM的時鐘/日歷芯片。地址和數據嚴格按照雙向雙線制I2C總線協議傳輸。內置地址寄存器在每次讀/寫后自動遞增。
2.1系統結構設計
系統的基本功能是通過CPLD的I2C總線接口完成ADSP21992(主控芯片)與PCF8583的數據交換。系統框圖如圖3所示。
系統主要由兩個部分組成:一是DSP與CPLD的接口;另一是I2C核。為了能在DSP指定的時刻讀/寫PCF8583的數據,使用DSP的讀寫信號、同步時鐘和最高位地址控制數據的傳輸。最高位地址作為控制信號是因為DSP的I/O口比較少,必須優先供應給其它外設,因此用它來產生DSP提供給I2C核的片選信號。而DSP的地址總線位數較多,最高位一般使用不到,這樣正好可以充分利用資源。
2.2I2C核
I2C核原理示意圖如圖4所示。
整個I2C核由控制模塊和I/O模塊構成。其中,控制模塊包括控制信號發生部分和時鐘開關,I/O模塊包括數據緩存和同步時鐘緩存。
當DSP的最高地址位出現一個有效信號時,便會使I2C核內的觸發器產生一個全局使能信號EN?熏它將會啟動時鐘、計數器和其它控制信號,但數據不會出現交換。如果此時DSP的讀/寫同步產生,則會啟動相應的讀/寫進程,進行數據傳輸。
I2C核的關鍵技術是:
①用計數器和全局使能信號EN配合觸發進程。
由于I2C核的片選信號EN是由觸發產生的,不能象電平信號一樣由DSP的I/O控制,因此只能通過精確的計數器定時和讀/寫使能信號共同判別控制。
讀/寫使能信號WR_EN/RD_EN也象EN那樣由觸發產生,因此也要用同樣的方法判別。
②同步時鐘的產生。
從圖2中可以看到,數據在同步時鐘的高電平脈沖時必須保持穩定,如果此時發生變化將會被視為一個控制信號,而通信也會被中斷。因此,同步時鐘的高電平脈沖一定要在有效數據的中間出現。而所需的控制信號必須在同步時鐘正脈沖的時候出現。
③對數據總線進行三態設置。
因為SDA和DSP_DATA都是雙向數據線,在寫SDA和DSP_DATA的進程中必須設置高阻態,否則會出現數據線狀態“不確定”。
圖5I2C核工作時序圖
2.3DSP與CPLD的接口模塊
根據DSP的時序,DSP與CPLD之間必須根據雙方(ADSP21992和PCF8583)的時序制定一個握手協議。當讀程序時,由于I2C總線協議只能支持最高400kbit/s的傳輸速率,而DSP的同步時鐘可達幾十兆赫。因此,DSP必須等到I2C核把PCF8583的數據讀到CPLD后才能獲得正確的數據(這里可以通過設立一個忙標志來實現)。而當寫程序時,為了節約CPLD的資源(數據緩存特別占用資源),可以設置DSP定時輸出數據給I2C核,讓I2C核的一次只送一個數據。
2.4硬件設計
此I2C核可外掛多個帶有I2C總線接口的芯片,可以通過發送不同的器件地址來選擇。SDA和SCL線必須接上拉電阻。此外,同步時鐘不能太高,否則會影響數據傳輸的穩定性。
2.5時序
(1)I2C核時序
以寫為例,I2C核時序如圖5所示。
(2)PCF8583時序
PCF8583的數據是8bit一個存儲單元,共256個字節,所以只需要8位地址,而且器件本身有兩種尋址方式:一種是從指定地址開始遞增尋址,另一種是從首地址開始遞增尋址。兩種尋址方式的時序是不一樣的,如圖6所示。
圖6PCF8583時序圖
隨著網絡的發展,網絡帶這的增加,上網速度將越來越快。人們也不再僅限于上網,在追求上網的同時打網絡電話,實現與網友的相互交流。目前人們很大程度上依賴于傳統的ISDN上網,且在今后一段時間內,這種依賴不會發生很大變化。其于這種狀況,設計了針對企業的上網設備(簡稱“企業上網設備”),它實現了企業上網的同時又可打網絡電話雙重功能。企業上網設備的整體實現方案如圖1所示。
“企業上網設備”一端連接ISDN網,通過ISDN連接Internet,另一端通過以太網交換機芯片連接用戶端的以太網。另外在用戶端通過POTS電話機接口連接兩部電話機。
普通電話撥打和接收網絡話音,必須通過POTS接口才能進行。POTS接口是能夠連接普通電話與ISDN的接口設備,它能使兩部電話同時上網并與其它電話通信。本文對POTS接口進行闡述。
1POTS接口
要實現普通電話機與ISDN進行連接,需要專門的接口(POTS)電路,這個接口電路應該具有饋電、過壓保護、振鈴、監視、編解碼、信號音產生器等功能。其中,信號產生器產生各種信號音,可通過硬件或軟件方法來實現。若用軟件實現,則將這些信號音進行抽樣、量化、編碼成PCM數字信號后存在一個只讀存儲器中,然后再周期重復地讀出這些值就可以得到數字信號音。接口電路主要為用戶接口電路(SLIC)、編解碼和濾波器(CODEC),它相當于用戶音頻信號處理接口電路(SLAC)、DTMF電路。
1.1POTS組成
POTS接口采用LUCENT的L8576(SLIC)、L8503(CODEC)、保護保險絲、可編程邏輯器件GAL16V8D及MOTOROLA的MC145436(DTMF)。原理方塊圖如圖2所示。
1.2功能描述
(1)SLIC:SLIC是用戶線接口,它是CODEC與外接話機環路的中間接口。它具有如下功能:
·鈴流信號。能提供話機振鈴所需的鈴流,它是一負高壓交流信號。
·摘掛機檢測信號。它提供話機摘掛機時的微處理器檢測信號,微處理器根據該信號的變化來判別出話機的摘掛機情況。
·語音信號接口。它具有與CODEC與DTMF相連的模擬語音信號接口,完成從話機到CODEC與DTMF或從CODEC到話機的模擬語音信號連接;它是話機與CODEC聯系的間橋梁。
·用戶線接口,連接話機。
本設計采用LUCENT的L8576B芯片,它是具有PLCC封裝44只引腳的雙用戶線接口電路。每一路能提供直流饋電、環路監視和鈴流信號,它含有兩路SLIC通道,可外接兩部電話。該芯片內含鈴流產生電路,振鈴電源為-65V。
除了鈴流及饋電功能外,L8576B還提供了接收和發送通道、摘機檢測、振鈴間斷輸出功能。另外,它還具有溫度保護功能。
保護:L8576B除了溫度保護外,還具有過壓保護功能,對普通的過壓保雙僅需在TIP和RING端串接電阻即可。然而,為了防止線路短路或雷擊而損壞器件,則必須外加保護器件(L7591)。
TIP/RING驅動:L8576B有TIP/RING驅動電路,其輸出為PT/RP。在正常通話方式下,驅動器限流為24mA以下,振鈴時則上升到大約85mA。
(2)CODEC:利用編解碼器、濾波器完成語音信號的A/D與D/A變換,其PCM接口與外部U接口相接,而模擬口與SLIC相接。
本方案采用LUCENT公司的T8503,其接口功能如下:
·數字接口:包括PCM接口、內部時序控制、增益控制。
PCM接口:管理傳送和接收PCM數據及幀同步控制。
PCM數據:PCM數據每125μs幀周期發生一次,數據時鐘CLK是2.048MHz,每幀有32個時隙,每個時隙8bit數據位。DX和DR為數據發送和接收數據,不發送數據時DX保持三態狀態,DR接收數據時才有效。
幀同步FS:T8503有四個幀同步(FSX和FSR)輸入,每一對對應一個通道。在一個125μs的幀里,每個幀同步提供一個單脈沖。幀同步可以出現在器件上電且MCLK作用于器件的任何時刻,幀同步脈沖的時序表時時隙的開始。在這時隙中,該通道的數據在數據時鐘作用下輸入或輸出。FSX和FSR高有效,且必須保持高至少一個主時鐘周期,它們可以獨立工作,對符合傳送和接收轉換的給定的通道可以將其連一起。在一個幀中,通道0和通道1傳送幀同步必須由一個或多個時隙彼分開。同樣,通道0和通道1接收幀同步也必須由一個或多個時隙彼此分開。除非這兩個通道接收同樣的PCM信號,此時,接收幀同步脈沖可連接在一起。
對T8503而言,對給定的通道,一幀中FSX和FSR只能發生一次,與FS的下降沿無關且其脈沖寬度不受限制,只要FS有效之前保持至少一個主時鐘周期,數據接口就能很好地工作。
·模擬口:包括偏置電路和參考源、A/D轉換、D/A轉換。
偏置電路和參考源:T8503僅需-+5V電源供電,參考源為+2.4V并由內部產生,不需外部附加電路。
A/D轉換:包括一輸入運放、帶通濾波器和譯碼器。
T8503內部還具有濾波電路對放大器輸出信號進行濾波,而后對XMT語音模擬信號采樣并按A率進行數字PCM轉換。
D/A轉換:解碼器PCM數據流轉換成模擬信號,輸出放大器單端輸出語音信號RCV,它能驅動2000Ω的負載。
(3)FS譯碼器:由于T8503具有雙通道,且各有自已的同步信號,同步信號不能同時有效,需相差一個或多個時隙、所以要將U接口送來的FS信號一分為二成FS0、FS1兩同步信號,分別作為通道0和通道1的同步信號。FS譯碼器由一可編程邏輯器件GAL16V8D來實現,具體電路如圖3所示。
F0SEL、F1SEL是同步信號選擇信號,為0選通有效,為1則選通無效。F01CTL是幀同步控制信號,該信號在GAL16V8D內將被一分為二為互為反相的兩幀同步信號控制信號,它們與FS(IDL_FSR/C)幀同步信號異或產生選擇B1、B2數據通道的同步信號FS0、FS1。假設F01CTL被分F0SEL、F1SEL兩信號且它們有效,則它們的波形關系如圖4所示。
本方案擬采用MOTOROLA公司的MC145436(2片)作為DTMF芯片,它將語音模擬信號XMT轉換成8421數字碼,并經由GAL16V8D變為POTS_Dva/POTS_DVb輸出信號。這些輸出均連接到微處理器,由微處理器處理這些數據進而判明撥號號碼。
(5)保護電路:用戶線接口電路(SLIC)要外加保護電路,以防損壞。采用0.35Ab保險絲作為SLIC的保護。
2POTS工作過程
2.1主叫
·用戶摘機:當用戶摘機時,SLIC輸出給微處理器(μP)終端信號,從而引起微處理器中斷。
·送撥號音:微處理器接到SLIC終端信號后,發生中斷。而后,微處理器執行送撥號音子程序,將存儲器中撥號音碼經U接口回環給POTS。POTS的CODEC(T8503)將這些撥號音PCM碼進行處理后變成模擬信號RCV輸出到SLIC的RCVN和RCVP差分輸入端,再經SLIC的PT、PR輸出給話機,使之發出撥號聲音。
·撥號:當主叫聽到撥號音后就可進行撥號。撥號模擬信號經SLIC輸出給DTMF(MC145436),DTMF將其變成二進制的8421碼并等數據有效后(Dva/DVb為高)送給微處理器,微處理器將號碼透明地傳送給U接口。
·號碼分析:微處理器接收到第一個撥號號碼后就會停止對POTS送撥號音信號并通過ISDN信令將號碼送U接口。局端交換機如果發現號碼有效,則通過信令通知微處理器,微處理器進行相應處理。
·若主叫所撥號碼符合要求,微處理器通過ISDN信令進行下一步處理。
·送回鈴音:若被叫忙,ISDN信令通知微處理器,微處理器執行送忙音子程序,將存儲器中事先存好的忙音經U接口回環給POTS。POTS的CODEC(T8503)將這些忙音PCM碼進行處理后變成模擬信號送SLIC的RCVN和RCVP差分輸入端,再經SLIC的PT、PR輸出給話機,使之發出忙音,以提醒主叫被叫忙。若被叫閑,則ISDN信令通知微處理器,微處理器就執行送回鈴音子程序,將存儲器中事先存好的回鈴音經U接口回環給POTS。POTS的CODEC(T8503)將這些回鈴音PCM碼進行處理后變成模擬信號送SLIC的RCVN和RCVP差分輸入端,處理后再經SLIC的PT、PR輸出給話機,使之發出回鈴音,以提醒主叫被叫話機響鈴。
·通話:當被叫摘機后,微處理器就停送回鈴音給POTS,此時主叫和被叫就可以通話了。通話過程如下:
當只使用某一個話機時,主叫的話音信號經SLIC送給CODEC;CODEC在對話音信號進行A/D變換等處理將話音信號轉換成PCM碼,在U接口的幀步和位同步作用下,經對其進行解碼分成FS0、FS1后,由微處理器選擇一空閑B通道,由數據線DX輸出給U接口;同樣,被叫話音信息PCM碼則通過DR接收數據線被COTEC接收,再經CODEC進行D/A變換等處理,輸出模擬信號到SLIC的差分輸入端(RCVN、RCVP),由SLIC處理后送給主叫,從而完成主叫與被叫的通話。
當POTS的兩個話機同時工作時,B1、B2兩數據通道均被使用。此時,幀同步FS0、FS1反向,即當FS0有效時,FS1無效;反之亦然。由于是長幀工作模式,每個有效幀同步對應一個B數據通道8位數據,可通過微處理器控制FXSEL和FXCTL兩信號來選擇FS0或FS1,從而達到選擇B1或B2數據通道的目的。
·話終復原:通話完畢,若被叫先掛機,微處理器要對POTS送忙音碼,從而使主叫話機聽到忙音;若主叫先掛機,則微處理器就進行相應的操作。
IC卡(IntegratedCircuitcard)即集成電路卡,是將一個集成電路芯片鑲嵌于朔料基片中,封裝成卡的形式,外形與常用的覆蓋磁條的磁卡相似。IC卡芯片具有寫入和存儲數據的能力。IC卡存儲器中的內容根據需要可以有條件地供外部讀取,或供內部信息處理和判定。根據卡中所鑲嵌的集成電路的不同,可以分成存儲器卡、邏輯加密卡、CPU卡三類。其中CPU卡即為由中央處理器CPU、EEPROM、隨機存儲器RAM以及固化在只讀存儲器ROM中的片內操作系統COS(ChipOperationSystem)組成的IC卡。IC卡按與外界數據傳送的形式來分,有接觸式和非接觸式兩種。
圖1T=0的CPU卡APDU指令實現流程
1CPUIC卡T=0的協議介紹
目前大多數CPUIC卡采用T=0模式。所謂T=0,即CPUIC卡與接口設備(即讀寫器)中數據傳輸方式為異步半雙工字符傳輸模式。
從T=0協議的功能出發,該協議的實現可以分為物理層、數據鏈路層、終端傳輸層和應用層。其中物理層和數據鏈路層可以具體參看ISO7816標準。在T=0協議應用,終端傳輸層和應用層實際上是不易分割來說明的,下面簡單說明。
終端傳輸層根據卡片返回的過程字符和狀態字節執行相應的操作,使讀寫器對數據的處理過程明朗清晰??ㄆ祷氐倪^程字節和狀態字節跟應用層發送給卡的APDU(ApplicationProtocolDataUnit,應用協議數據單元)和VPP使用等有關。表1為VPP未用時的終端傳輸層中返回的過程字節。
表1
字節值結果
ACKINSVPP空閑,所有其余的數據字節相繼續被傳送
INS+''''FF''''VPP空閑,下一個數據字節隨后被傳送
SW1SW2VPP空閑,接口設備等待SW2字節
應用層即為由CLA、INS、P1、P2、P3作為命令頭組成的命令消息體的APDU響應和應答處理層。其中CLA為指令類別,INS為指令碼,P1、P2為參數,P3為根據APDU的不同格式為發送給卡的數據長度或期望響應的數據長度。APDU的幾種情況如表2所列。
表2
命令頭發送數據長度發送的數據期望應答的數據長度
通用APDUCLAINSP1PLCDataLE
情況一CLAINSP1P
情況二CLAINSP1PLE
情況三CLAINSP1PLCData
情況四CLAINSP1P2LCDataLE
CPU卡對接口設備(即讀寫器)的應答APDU情況如表3所列。
表3
體尾
數據DataSW1SW2
其中體中的數據字節數由命令APDU中的LE指出;SW1、SW2是必備的,可以指明命令APDU執行正確或執行出錯的錯誤類型。
2基于T=0傳輸協議的CPUIC的APDU指令流程
根據目前CPU卡的常用T=0協議、自帶編程升壓電路的應用情況,以及本讀寫器接收IC卡數據報文直接發送PC機處理的特點,本讀寫器可行的APDU命令和響應的處理流程如圖1所示。
3讀寫器的硬件組成
讀寫器的硬件部分主要由IC接口管理芯片TDA8007、MCUAT89C52、外部數據存儲器W24257S、串口電平轉換芯片MAX3226、安全IC卡座(即SAM卡座)、應用IC卡座、鍵盤口供電的串口通信線及其它相關元器件組成。
圖2所示為通過PC機控制管理的外置于PC機的接觸式CPUIC卡讀寫器。通過定制的數據線,該讀寫器的5V直流電源可直接由鍵盤口提供,同時數據線還負責PC機與讀寫器的串行數據交換。在大部分IC卡讀寫應用中,都涉及到IC卡的認證和數據讀寫的國解密問題,所以本讀寫器除了提供一個供用戶使用的IC卡接口卡座外,還內置了一個SAM卡,即安全IC卡卡座,以方便安裝SAM卡,保證應用IC卡讀寫時的數據安全,保護用戶的利益。
硬件的其它組成部分,如處理器,目前采用Atmel的89C52。其4KB的Flash程序存儲器可以滿足讀寫器的程序空間需要。由于PC機與89C52、89C52與TDA8007的數據交換要求的暫存數據空間比較大,89C52提供的256字節不夠,需外加一片數據存儲器。本讀寫器中使用的是華邦的W24257S。其有32KB存儲容量,IC接口部分的主要芯片為Philips的TDA8007。
4IC卡接口芯片應用
下面介紹一下TDA8007及其應用。TDA8007的原理結構如圖3所示。
TDA8007芯片能夠提供兩個能同時滿足ISO7816標準及EMV和GSM11-11標準的IC卡讀寫接口。在本讀寫器中,一個用于與應用IC通信,另一個用于與安全IC卡通信。與上文CPU卡的觸點圖相對應,CLKi、RSTi、VCCi、I/Oi、GNDCi、PRESi、C4i、C8i(其中i=1,2;C4i、C8i未用;PRESi可用于檢測IC卡是否插入。具體應用可參看TDA8007的技術文檔)都直接由TDA8007提供給IC卡接口相連,MCU只需通過其接口控制并行通信來管理TDA8007,便可實現對IC卡的上電、下電及讀寫數據處理。其中,微處理器既可以通過總線復用把TDA8007內部的所有寄存器作為外部存儲器,用MOVX尋址,也可以通過非總線復用方式訪問,此時TDA8007用AD0~AD3來區分內部各寄存器。另外,TDA8007的片選信號和外部中斷信號線可以方便讀寫器處理多個IC卡頭。TDA8007的特別硬件ESD處理、接口短路處理、電源出錯處理等也給IC卡和IC卡讀寫器提供了比較高的安全保護;同時,TDA8007內部集成的電源管理功能允許TDA8007的供電范圍可達2.7~6.0V,并且TDA8007通過電源管理可以給IC卡提供5.0V、3.0V及1.8V的電源,以適合不同工作電壓的IC卡應用。
圖3IC卡接口芯片TDA8007的原理框圖
本讀寫器是通過總線復用對TDA8007的寄存器進行控制的。其中MCU的P1.5為TDA8007的片選,P0口為與之通信的8位數據線,TDA8007的各寄存器預先被宏定義的成微處理器的一個外部數據單元(下面電程序處的定義),從而方便MCU訪問。下面結合TDA8007寄存器的定義和位分配,給出應用TDA8007接口芯片對IC卡進行上電激活和下電的程序。TDA8007的寄存器主要三類。第一類,通用寄存器:①卡槽選擇CSR;②硬件狀態HSR;③定時器TOR1、TOR2、TOR3。第二類,ISO7816串行處理寄存器:①串行狀態USR;②混合狀態MSR;③串行發送UTR;④串行接收URR;⑤隊列控制FCR。第三類,卡專屬寄存器:①可編程分頻PDR;②保護時間GTR;③串行控制UCR1、UCR2;④時鐘配置CCR;⑤上電控制PCR。注意:對于卡專屬的寄存器,即卡接口1、卡接口2分別對應的寄存器,邏輯上具有相同的名及訪問地址,因而,對不同的瞳操作,需要通過CSR選擇對應的卡槽來切換卡專卡屬寄存器的映射的物理空間。所以,接口設備每次從一個卡的上下電或讀寫轉向另一卡,都需要訪CSR設定對應的卡槽。對于每個寄存器的位定義不再多述,主動性者可參看TDA8007的技術文檔。
5上下電過程及具體程序
圖4為IC卡的上電時序圖。要實現之,需對PCR進行寫操作。其中START=PCR.0,RSTIN=PCR.2,VUP上升表示激活了TDA8007中的電壓轉換電路。當START置高時,只要能檢測到選定卡槽中的IC卡存在,且沒有TDA8007能檢測到并在HSR中指示的硬件錯誤出現,則對應IC卡接口的VCC1或VCC2將能被提供響應的電平(5V、3V或1.8V)。隨后對應卡的I/O數據線被置成高狀態(Z狀態),給IC卡提供設定的時鐘信號,常用為3.5712MHz。大約在START置高108ETU后,RSTIN置高。因為RST為RSTIN的拷貝,則對應卡的RST被置高。然后,用TDA8007提供的定時器TOR3、TOR2設定對ATR(AnswerToRequest)即復位應答首字節的最大等待時間120ETU(ElementTimeUnit),TOC設定定時器工作方式,便開始等待ATR首字節到來后做相應處理。至此,IC卡上電激活工作完成,隨后可以根據ATR字節的要求的工作方式對IC卡進行相應的讀寫處理。具體見上電程序。
圖4TDA8007產生滿足ISO7816標準訴IC卡上電激活時序
TDA8007寄存器訪問的預定義
#include<absacc.h>
#defineXXXXBYTE[0x8000]//XXX表示CSR等各寄存器上電程序如下:
P1.5=0;//片選TDA8007
CSR&=0xf8;
CSR|=ncard;//選擇卡,ncard=1,2
CSR&=0xf7;
CSR|=0xf7;
CSR|=0x08;//復位UART的寄存器
UCR2&=0xf7;//異步模式,SAN=0
CCR&=0xdf;//時鐘停止于低電平
UCR2|=0x60;//關閉附加中斷及收發中斷
GTR=0xff;//保持時間12ETU
If(v==1)//v為函數變量
PCR|=0x08;//1.8V卡用
elseif(v==3)
PCR|=0x02;//3V卡用
Else
PCR&=0xfd;//5V卡用
UCR2&=0xfc;//CKU=PSC=0,--31
FCR=0x00;//1奇偶校驗1FIFO
PDR=0x0c;//Divider=12
CCR=0x00;//不分頻
PCR&=0xfb;//RSTIN=0
UCR2|=0x04;//不自動轉換
UCR1=0x01;//正向約定
UCR1&=0xf7;//接收模式
flag3=0;//復位定時標志
flagatr=0;//接收ATR首字節定時標志
PCR|=0x01;//激活
TOR2=0x6c;
TOR3=0x00;
TOC=0x61;//RST拉高前等待108ETU
while(flag3==0);//定時時間到,在中斷中設置flag3=1
TOC=0x00;//關閉定時器
PCR|=0x04;//給復位拉高
TOR2=0x78;
TOR3=0x00;
TOC=0x61;//RST拉高前等待
flagatr=1;
ATR();//復位應答處理函數
圖5為IC卡的下電時序圖。相對于上電時序,下電過程對時間的要求不是很嚴格,只要設計者控制TDA8007按照一定的順序置低START、RSTIN和停止CLK即可,然后TDA8007會自動逐步釋放RST、I/O、Vcc及VUP。具體處理見下電程序。
下電程序:
P15=0;
PCR&=0xfe;//START=0;下電
PCR&=0xfb;//卡的復位腳保持0
CCR&=0xdf;//停止時鐘于低
CCR|=0x10;//停止時鐘
P15=1;
6使用TDA8007應當注意的問題
TDA8007對于Vcc、RST出錯,芯片過熱(如圖IC卡為電源短路卡或金屬片),或IC卡插入拔出時都會產生中斷輸出。每次中斷處理結束,應注意把HSR中的值讀入一個臨時地址,以便清楚HSR中的標志。
每次發送數據到IC前,即接收IC卡的最后一個數據之前,應設置寄存器UCR1中的LCT位,以便接收完IC卡的數據后,自動切換成發送狀態。
對TDA8007部分布線時應注意,時鐘信號線與其它線的隔離:最好被地線包圍。
對于電路板上TDA8007部分的電容應盡量靠近TDA8007,其中電容Cap、Cbp、Cup尤其如此,并最好不要在這些電容連向TDA8007引腳過程中使用過孔;同時,Cap、Cup、Cbp電容的ESR要盡量小。
對TDA8007處理的兩個IC卡座中的任何一個執行上電、下電、讀寫卡操作之前,必須執行選擇卡座的操作函數,以便選中具體的IC卡進行處理。
存儲器是容量數據處理電路的重要組成部分。隨著數據處理技術的進一步發展,對于存儲器的容量和性能提出了越來越高的要求。同步動態隨機存儲器SDRAM(SynchronousDynamicRandomAccessMemory)因其容量大、讀寫速度快、支持突發式讀寫及相對低廉的價格而得到了廣泛的應用。SDRAM的控制比較復雜,其接口電路設計是關鍵。
本文首先介紹SDRAM的主要控制信號和基本命令;然后介紹接口電路對SDRAM的主要操作路徑及操作過程,應用于解復用的SDRAM接口電路的設計方法;最后給出了實現結果。
1SDRAM的主要控制信號和基本命令
SDRAM的主要控制信號為:
·CS:片選使能信號,低電平有效;
·RAS:行地址選通信號,低電平有效;
·CAS:列地址選通信號,低電平有效;
·WE:寫使能信號,低電平有效。
SDRAM的基本命令及主要控制信號見表1。
表1SDRAM基本操作及控制信號
命令名稱CSRASCASWE
命令禁止(NOP:Commandinhibit)HXXX
空操作(NOP:Nooperation)LHHH
激活操作(ACT:Selectbankandactiverow)LLHH
讀操作(READ:Selectbankandcolumn,andstartREADburst)LHLH
寫操作(WRITE:Selectbankandcolumn,andstartWRITEburst)LHLL
突發操作停止(BTR:Burstterminate)LHHL
預充電(PRE:Deactiverowinbankorbanks)LLHL
自動刷新或自我刷新(REF:Autorefreshorselfrefresh)LLLH
配置模式寄存器(LMR:Loadmoderegister)LLLL
所有的操作控制信號、輸入輸出數據都與外部時鐘同步。
2接口電路對SDRAM的主要操作路徑及操作過程
一個完備的SDRAM接口很復雜。由于本文的SDRAM接口應用于解復用,處理的事件相對來說比較簡單,因而可以簡化設計而不影響性能。接口電路SDRAM的主要操作可以分為:初始化操作、讀操作、寫操作、自動刷新操作。
(1)初始化操作
SDRAM上電一段時間后,經過初始化操作才可以進入正常工作過程。初始化主要完成預充電、自動刷新模式寄存器的配置。操作過程如圖1所示。
(2)讀寫操作
讀寫操作主要完成與SDRAM的數據交換。讀操作過程如圖2所示,寫操作過程如圖3所示。
(3)刷新操作
動態存儲器(DynamicRAM)都存在刷新問題。這里主要采用自動刷新方式,每隔一段時間向SDRAM發一條刷新命令。刷新過程如圖4所示。
3接口電路的設計
(1)解復用電路
本解復用電路主要完成將1路高速數據流解復用為4路數據流,其結構框圖如圖5所示。1路數據流進入解復用器后,經過SDRAM緩沖,解復用為4路數據流。
由于要解復用為4路數據流,為了充分利用時隙,滿足高速的要求,采用4個bank的SDRAM,各路數據緩沖對應不同的bank。為簡化設計,數據流1的緩沖區定為bank0,數據流2的緩沖區定為bank1,數據流3的緩沖區定為bank2數據流4的緩沖區定為bank3。對于每路數據實際上是以高速率集中寫入,然后以低速率均勻讀出。
由于進行的是解復用,因此寫入的數據只有1路,但是有可能4路數據同時都要讀出。所以對于4路數據流,其讀寫地址和讀寫使能信號是分開的。
(2)SDRAM接口電路的時序控制
高速數據流的速率為3M字節/秒,采用的系統時鐘為20倍的字節時鐘。送入SDRAM的時鐘為60MHz系統時鐘。在一個字節時鐘內對SDRAM的操作最多有5次(1次讀,4次寫),而且為了滿足刷新的要求,每個字節時鐘進行一次刷新操作。根據SDRAM的時序要求,這樣的操作是難以實現的。因而要通過多bank操作,盡量做到時分復用來實現。圖6給出了在一個字節時鐘周期的內數據流1進行讀寫操作,其它3路數據進行讀操作的命令排序時序圖??梢钥闯鐾ㄟ^多bank操作,時分復用,在20個系統時鐘節拍內所需的讀寫操作命令剛好很緊湊地排開。
一個字節時鐘內對SDRAM讀寫操作是隨機的,這與數據流的復用比例有在。為了滿足時序,根據上面的說明,需要把一個字節時鐘周期內對SDRAM的命令合理排序,然后按照排好的順序執行命令。這樣就需要把一個字節時鐘周期內對SDRAM的操作進行緩存,然后在下一個字節時鐘周期內進行排序、與SDRAM命令相對應、將命令譯碼產生相應的控制信號線,完成操作。緩存排序過程如圖7所示。
(3)SDRAM接口電路
SDRAM接口電路中需要專門操作緩沖區存儲一個字節時鐘周期內的操作,以備下一字節時鐘的排序。為了方便處理,對每路數據的緩沖操作內容(或讀或寫)放在一個緩沖區。由于數據流的連續性,排序的同時仍然會有操作要求,因此每路的操作內容緩沖區分為兩塊。對一塊緩沖區寫入時,讀出另一塊緩沖區中的操作內容,進行排序、譯碼、執行。根據字節時鐘切換對緩沖區的讀寫,從而避免沖突。對于從SDRAM讀出的數據,每路數據寫入相應的讀出數據緩沖區。同樣每路的讀出數據緩沖區也分為兩塊,根據字節時鐘切換讀寫。
由于一個字節時鐘周期內,每路所需的操作最多有2次,每路的操作內容緩沖區只需兩個單元(每個單元存儲了此次的讀寫使能信號、寫入數據、地址)即可。對于讀出數據緩沖區,由于一個字節時鐘每路數據最多執行一次讀操作,所以讀出數據緩沖區只需要一個字節。這兩類緩沖區容量都小,因此人部用寄存器來實現,控制簡單。
1概述
TM1300是Philips公司推出的新一代高性能多媒體數字信號處理器芯片。基于TM1300的DSP應用系統適合于實時聲音、圖像處理,可廣泛應用于會議電視、可視電話、數字電視等應用場合。它不僅具有強大的處理能力,同時還具有非常友好的音頻和視頻以及SSI和PCI等I/O接口,因此可以根據應用的需要靈活地構造各種視頻通信系統。鑒于目前計算機網絡的普及和網上視頻業務的發展,很有必要為TM1300視頻編碼系統開發一個以太網接口以拓寬其應用范圍。開發以太網接口的一種合理思路是利用TM1300集成的PCI接口來驅動專用的以太網接口芯片。由于目前多數以太網接口芯片(如Real-tek8029,Realtek8139等)都采用PCI接口,因此,可以用PCI總線將數據從TM1300傳輸到這些專用的以太網接口芯片后,再由它們發送數據,而且TM1300可以在嵌入式操作系統pSOS中運行,同時由于系統pSOS帶有TCP/IP協議棧因此可以方便地完成編碼碼流的TCP/IP封裝。
根據以上思路筆者在進行了前期測試的基礎上進行了電路板的設計并順利完成了調試。目前這個以太網接口已經基本開發成功。本文將對這個設計的技術要點從硬件和軟件兩個方面進行詳細介紹。
2TM1300及PCI總線接口
該系統的硬件結構框圖如圖1所示。本系統硬件設計的重點是PCI總線接口。PCI總線根據數據位的寬度有32位和64位之分,64位的數據線與32位是兼容的。PC機中常見的是32位PCI總線,它的有用引腳總數是110個,可以分成3組。第一組是基本功能信號線,包括32位共享數據地址線AD〔00..31〕、接口控制線、仲裁線、時鐘線、系統復位線、中斷線;第二組是附加功能信號線,包括錯誤報告線、cache功能支持線、JTAG邊界掃描線;第三組是電源線,包括設備耗電量標識線、3.3V電源線(12根)、5V電源線(13根)、地線(22根)。
因為Realtek8029不具備PCI的附加功能信號線所支持的cache功能和JTAG邊界掃描功能,同時雖然它具有奇偶校驗錯誤報告功能引腳,但該腳可以懸空不用。所以,設計時只需考慮第一組功能信號線的連接即可。
PCI接口的設計有以下幾個要點:
(1)PCI總線的仲裁
這里先說明兩個概念。首先,PCI總線是多設備共享的,由于PC機里可以有多個PCI設備,所以需要使用仲裁器;其次,PCI設備有主設備和從設備之分,主設備可以發起PCI數據的傳送從設備只能被動地響應主設備的操作以對讀操作和寫操作做出響應。PCI的仲裁引腳是REQ和GNT,分別為請求線和授權線,而且只有PCI主設備有這兩個引腳。一般情況下,REQ通常和GNT成對地連到仲裁器,而設備與設備的REQ和GNT通常是互不相連的。
PCI總線的仲裁過程是這樣的:PCI主設備把REQ電平拉低以表示向仲裁器請求占用總線。經仲裁獲準后,仲裁器把這個設備的GNT電平拉低以表示請求獲準,此后該設備便可以使用總線了。當它不再使用總線時,應使REQ信號變為高電平仲裁器就不再給它分配總線資源。在本系統中,TM1300是PCI主設備,而Realtek8029是PCI從設備。由于它們不存在共享總線的問題,所以不需要仲裁器,而只是簡單地把REQ和GNT短接即可,這就相當于TM1300自己給自己授權。
(2)PCI_IDSEL信號線在設備的PCI配置讀寫中的作用
PCI有一種特殊的讀寫周期,稱為配置讀寫。這是因為在系統引導時,如果沒有給設備配置I/O或內存地址,軟件就只能通過配置來讀寫訪問設備。配置讀寫有兩種,分別稱為0型和1型具體采用哪一種取決于總線的硬件連接。配置讀寫操作不經過PCI橋時,使用0型,當需要經過PCI橋時,則要用1型,0型讀寫的地址直接就是總線上的地址,1型讀寫的地址則要經過PCI橋的譯碼才能成為最終的總線地址。本設計中,TM1300和Realtek8029是用PCI總線直連的,所以使用0型配置讀寫。
AD〔00..31〕是PCI總線的共享地址和數據線,每一次PCI傳送都分為地址周期和數據周期。在地址周期,采用0型讀寫時,AD〔00..31〕的內容如下,AD〔00〕和AD〔01〕總為“00”,因為配置讀寫是以雙字為單位的,AD〔02〕~AD〔07〕是要讀寫的PCI配置空間的寄存器號AD〔08〕~AD〔10〕是設備的功能號在一塊PCI卡上有多個功能設備時,為了進一步區分不同的設備就要用到這幾位,由于Realtek8029是單功能設備,故這幾位全為0,AD〔11〕~AD〔31〕是設備選擇位,其中必須有且僅有一位為“1”,如圖2所示,這在物理上表現為總線的AD〔11〕~AD〔31〕中有一根為高電平如果輸出高電平的這根線與某塊PCI卡的PCIIDSEL引腳相連,這塊卡就會被激活,這樣,在緊接著的數據周期中,它就會將其PCI配置空間相應寄存器中的內容放到總線上以供讀取。
(3)PCI_FRAME、PCI_DEVSEL、PCI_IRDY、PCI_TRDY引腳的處理
上述四個引腳均是低電平有效,因此需要接上拉電阻,以保證在設備未驅動該引腳時處于穩定的無效狀態,上拉電阻的阻值在1kΩ~10kΩ范圍內,阻值越小,則將該信號驅動為有效的時間越短,但太小又會導致電流過大,所以,要權衡考慮,本設計選用4.7kΩ。
上述三點對脫機情況下PCI設備的互連具有較普遍的參考意義,除此之外,本設計還有以下比較特殊的幾點:
應將TM1300的PCI,INTA引腳配置為輸入,以便接收Realtek8029的中斷;
PCI時鐘由TM1300提供;
Realtek8029的復位信號也就是TM1300的復位信號,該信號由外部電路提供;
TM1300的PCISTOP、PCISERR引腳懸空,表示Realtek8029不具備相應的附加功能。另外,TM1300的PCIINTB、PCIINTC、PCIINTD引腳可以用作用戶中斷。
3軟件設計
該接口設計的軟件結構框圖如圖3所示。其中TM1300運行于pSOS,它是一個簡單的實時多任務嵌入式操作系統,帶有pNA+網絡組件,其pNA+相當于TCP/IP協議棧的擴展,它向上可提供應用程序編程的socket接口,向下可定義一個與網絡接口層交互的接口,其中包括8個函數,分別是:ni_init(接口芯片初始化)、ni_broad-cast(發送廣播分組)、ni_send(發送普通分組)、ni_getpkb(申請發送緩沖區)、ni_retpkb(歸還接收緩沖區)、ni_ioctl(I/O控制操作)、ni_pool(統計量查詢)、Announce(網絡接口驅動調用它把接收到的數據包提交給pSOS)。其中網絡接口層在本應用中就是Realtek8029的驅動程序,它通過硬件抽象層來驅動Realtek8029(硬件抽象層是PCI總線的配置讀寫和I/O讀寫指令集的總稱)。
軟件執行的流程大致是:系統首先啟動pSOS,并由它加載網絡接口驅動程序,然后調用驅動程序的ni_init函數,同時初始化Realtek8029的PCI配置空間并設置Realtek8029的工作參數,之后啟動用戶任務。在這里,用戶任務為H.263編碼進程。它對VI口讀入的源圖像進行壓縮編碼后,將調用socket的接口函數sendto(sendto是UDP套接口專用的發送函數),然后把碼流發送給pSOS由pSOS根據UDP協議進行封裝后,再調用ni_send函數,并由ni_send完成數據包從系統主內存到Realtek8029片上RAM的拷貝,然后啟動Realtek8029發送數據。在接收情況下,Realtek8029收到一個完整的數據包后會用中斷通知CPU,然后由CPU執行中斷服務程序。當中斷服務程序將數據包從Realtek8029片上RAM中拷貝到系統的主內存后,系統將調用Announce函數并把數據塊的指針、數據長度和其它信息提交pSOS,最后由pSOS將數據包沿協議棧一層層上傳并作出相應的處理。
軟件的設計和pSOS操作系統的關系比較密切,限于篇幅,本文不對pSOS作詳細介紹,。本文接下來重點介紹PCI配置空間的配置過程,這部分對于類似的設計有較普遍的參考意義。PCI配置空間有64個字節,PCI片內的這些寄存器存儲了該芯片的廠商號、設備號、設備類型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線行為的寄存器,它們必須在設備初始化時正確配置,否則設備不能工作。
對Realtek8029PCI空間的配置需要三個步驟:
首先是掃描總線,這一步的目的是找到Real-tek8029的配置地址,直觀地講,就是找到它的PCI_IDSEL引腳和哪根AD線相連,因為后續的配置寫要根據這個地址來尋址。掃描總線時,要對AD〔11〕到AD〔31〕每根線進行一次掃描,如果哪根AD線連接了一個PCI設備的PCIIDSEL引腳,那么用配置讀函數讀取PCI配置空間的0號寄存器時,應該返回該設備的設備和廠商代碼,如果這根線實際未連接設備,則返回值是0。已知Realtek8029的設備和廠商代碼是“0x802910ec”,如果返回值與之相同,說明找到了Realtek8029,這時要記下這根AD線的序號。例如,在硬件上把Realtek8029的PCIIDSEL和AD〔20〕相連,則掃描到的序號就應該是“20”。
其次,用配置寫函數配置I/O讀寫使能,即在command寄存器中寫入“0x1”。
最后,用配置寫函數配置I/O地址,也就是在I/OBaseAdddress寄存器寫入分配給該設備的I/O地址(例如“0xe400”)。具體程序流程圖如圖4所示。
4調試結果
根據以上設計,筆者在原TM1300視頻編碼硬件系統的基礎上加入了PCI接口,并編寫了pSOS下Realtek8029的驅動程序。然后,在這個硬件平臺上對Realtek8029的驅動部分進行了數據傳送測試。
筆者首先用一個單獨的UDP發送任務進行發送速率測試。這個任務主要是高速地向網絡上的一臺PC發送數據包,數據包的大小是變長的。PC接收并對丟包數進行統計的結果如表1所列。實驗表明,在用網線直連的各種測試速率情況下都沒有出錯,而當接入局域網后,在發送速率為4.5Mbps時有突發的少量錯誤。由于UDP是不可靠的傳輸方式,所以這種錯誤是正常的。測試中,UDP發送的最高速率可以達到5Mbps左右,它與硬件的最高速率(10Mbps)相比還有一定差距,主要原因是數據從系統主內存到Realtek8029片上RAM的拷貝過程目前尚未采用DMA方式,這是需要改進的地方。
表1丟包數統計表(單位:丟包個數/分鐘)
連接方式發送速率
800kbps1.8Mbps4.5Mbps
網絡直連000
接入局域網002.5
引言
隨著微電子和無線通信技術的發展,非接觸式IC卡技術也得到蓬勃發展,但國內設計非接觸IC卡的技術不夠成熟。高頻接口電路設計是非接觸式IC卡設計的關鍵技術之一,文中將介紹一種高頻接口電路的設計。
1IC卡的基本結構
圖1是一個具有邏輯加密功能的非接觸式IC卡的結構方塊圖。對于具有邏輯加密功能的非接觸式IC卡,一般包括IC芯片和天線線圈(耦合線圈)。IC芯片又包括高頻接口電路、邏輯控制電路、存儲器等部分。
2高頻接口模塊設計
IC芯片內的高頻接口電路是非接觸式IC卡的模擬、高頻傳輸通路和芯片內的數字電路之間的一個接口。它從芯片外的耦合線圈上得到感應電流,整流穩壓后給芯片提供電源。從閱讀器發射出來的調制高頻信號,在高頻界面經解調后重新構建一產生在邏輯控制電路中進一步加工的數字式串行數據流(數據輸入)。時鐘脈沖產生電路從高頻場的載波頻率中產生出用于數據載體的系統時鐘。圖2為具有負載調制器的高頻界面方框圖。
為了將芯片內處理后的數據傳回到閱讀器,高頻界面也包括有負載波調制器或反向散射調制器。它們由傳送的數字化數據控制。
圖3為卡的模塊結構框圖。整流穩壓模塊主要是接收閱讀器發來的載波,將載波信號轉變成直流信號,以作為非接觸IC卡內部芯片的電源使用;同時不能因為閱讀器發來的不間斷載波而使芯片內部電源電壓無限增大。調制解調模塊主要是將閱讀器發來的信號從載波信號中取下來;在IC卡發送信號時將內部的數字信號轉換成模擬信號,并上載到載波信號中以傳輸給閱讀器。
(1)整流穩壓模塊的設計
該模塊主要包括基準源電路、電壓調節電路和電源開關電路?;鶞试措娐酚啥塁MOS差分放大電路和晶體管電路構成的能隙基準源組成。其結構如圖4。
有源電阻P0和多晶電阻R7組成偏置電路,為電路提供偏置電流。二級差分放大器的兩個輸入連接在Q1端和Q2端。由基準源原理可知,只有放大電路的輸入失調電壓很小,并且不受溫度的影響時,基準源的輸出才可以保持好的性能。根據放大器和能隙基準源原理可得:
I1R6=I2R4(1)
由(1)式可知,電路中放大器的輸入失調電壓幾乎為零,故穩定后REF點的電壓值為:
VREF=VQ1+VR6=VQ1+R6I1=VQ1+I2R4(2)
因PNP晶體管的基極和集電極相連,故VQ1值相當于晶體管中BE結二極管的正向壓降VBE值,為0.6~0.8V。
晶體管中BE結溫度系數為負,電阻溫度系數為正,在(2)式中VQ1和VR6隨溫度的變化可以相互補償,故該基準源的輸出VREF對溫度變化不敏感。電壓調節電路是穩壓電路中的核心部分,包括兩個一級CMOS差分放大電路COMP和電壓調節及反饋電路,如圖5。
兩個差分放大器的輸入由分壓電阻得到。比較放大后經反饋調節和限流保護電路得到MA1和MB1,以控制電源開關電路中開關管的開啟和截止。
電源開關電路由儲能電容,NMOS管構成的整流器及開關電路組成,如圖6所示。P1、P2直接連到線圈L0的兩端。通過電磁耦合在P1、P2上感應出交流電;經整流后,在儲能電容C0端產生直流電壓VDD。調壓電容C5在N2管導通后構成放電回路,使P1、P2上的電流開始對C5充電而停止對C0充電,C0兩端電壓保持穩定,即為負載電路提供穩定的電源電壓。