ISPl362在基于FPGA的紅外成像系統(tǒng)中的應用
摘要:ISPl362是飛利浦推出的一款USB可編程控制芯片,其內部集成了一個高級主控制器,一個外設控制器,主機和設備控制器兼容USB 2.O協(xié)議,支持12 Mb/s的全速傳輸和1.5 Mb/s的低速傳輸;芯片有三種工作模式,即主機控制器模式、設備控制器模式和OTG模式。主要針對USB控制芯片ISPl362在基于FPGA的紅外成像系統(tǒng)的數(shù)據(jù)采集中的應用,利用Verilog HDL語言完成其在設備控制器模式下的功能,具有很好的可移植性。
關鍵詞:FPGA;ISP1362;USB接口;固件;Verilog HDL
O 引言
??? 近年來,紅外熱成像系統(tǒng)已越來越多地應用于軍事和工業(yè)上,因此對紅外圖像的研究也成為熱點話題。為適應很多實時圖像處理方法的需求,圖像處理系統(tǒng)對圖像數(shù)據(jù)采集的速度及準確性的要求也越來越高。而傳統(tǒng)的接口,如ISA接口、PCI接口、PS/2接口等都是非共享式接口,不但體積龐大,而且規(guī)格不一。USB接口克服了傳統(tǒng)接口的上述缺陷,具有高速、雙向、低成本以及兼容性好、通用性強等優(yōu)點,已經在IT各個領域得到了廣泛的應用。與此同時,各種型號的USB接口控制芯片也應運而生。ISPl362芯片以其成本低、可靠性高、功耗低以及易于擴展等優(yōu)點,也受到了用戶的廣泛關注。ISPl362由主機控制器、設備控制器、OTG控制器、USB收發(fā)器、OTG收發(fā)器和寄存器等組成。其中,OTG控制器主要提供包括監(jiān)控和轉換功能在內的所有OTG控制,在OTG模式下,既可用作主機,又可用作外設,并支持主機通信協(xié)議(Host Neg-otiayion Protocol,HNP)和對話請求協(xié)議(Ses-sion Request Protocol,SRP)??紤]到以后進一步完善系統(tǒng)的需要,設計中選用此款芯片來完成USB接口的設計。該芯片內部沒有集成MCU,設計中采用Altera的現(xiàn)場可編程門陣(Field-Programmabte Gate Arrav,F(xiàn)PGA)中的EP2C70-F672C6來控制芯片的正常運行,操作簡單可靠。EP2C70F672C6具有低功耗、高密度以及低成本等優(yōu)點,可提供4 608~68 416個邏輯單元,包括了多達150個嵌入式18×18位乘法器、專用外部存儲器接口電路,最高操作頻率可達到260 MHz?;谝陨显虻目紤],選用此款FPGA芯片來實現(xiàn)紅外成像系統(tǒng)中的各項功能。
l 紅外成像系統(tǒng)
??? 紅外成像系統(tǒng)的功能框圖如圖1所示。整個系統(tǒng)功能在FPGA上實現(xiàn)。系統(tǒng)上電后,F(xiàn)PGA進行配置,紅外焦平面探測器在驅動信號的作用下響應紅外目標輻射,將輻射信號轉變?yōu)?a href="http://www.wenjunhu.com/analog/" target="_blank">模擬電壓信號輸出;A/D轉換模塊將模擬電壓信號轉變?yōu)?a target="_blank">數(shù)字信號,經非均勻性校正、盲元處理等過程,將數(shù)據(jù)存入FPGA外部存儲器中。本工作的主要任務就是把存儲器中的數(shù)據(jù)通過USB接口傳輸?shù)絇C機,以便于根據(jù)需要對數(shù)據(jù)做進一步的處理工作。
2 USB固件結構設計
??? USB固件結構設計包括枚舉過程和數(shù)據(jù)傳輸過程。數(shù)據(jù)傳輸過程與枚舉過程中的in中斷的處理方法類似。因此這里主要介紹枚舉過程的固件編寫。
??? 枚舉過程的流程圖如圖2所示。
??? 枚舉過程就是主機通過向設備發(fā)送一系列請求來識別設備的過程。USB一共定義了11種標準USB請求,其中有些請求是必須的。例如,主機必須通過Get Descriptor請求來獲取設備的設備描述符、接口描述符和端點描述符等信息,才能識別設備;必須通過Set Address請求為設備分配惟一的非零地址,以便于主機識別設備并與設備進行數(shù)據(jù)傳輸;必須通過SetConfiguration請求為設備分配非零的配置值等。USB請求只能使用控制管道來進行傳輸。主機在沒有識別連上的是何種設備之前,會為未知設備分配一個默認地址O,主機通過0地址與設備通信,直到主機確定真正有設備連接了之后,就會為該設備分配一個惟一的非零地址。在此之后,主機可通過這個非零地址跟設備通信,包括獲取該設備的所有配置信息、接口信息以及完成最后的數(shù)據(jù)傳輸?shù)取?br>2.1 芯片初始化
??? 芯片的初始化主要包括工作模式、速度的選擇以及寄存器的配置等操作。工作模式的選擇可通過設置ISPl362的第62引腳A1為高電平來實現(xiàn)。這里實現(xiàn)的是全速的數(shù)據(jù)傳輸。下面主要介紹寄存器的配置。
??? ISPl362設備控制器內部40多個寄存器。編寫代碼時的重點工作就是根據(jù)寄存器每一位代表的意義確定配置值,特別是有些關鍵位,只有正確配置方能保證芯片的正常工作。在使用ISPl362之前,要先配置的寄存器有模式寄存器、硬件配置寄存器、中斷使能寄存器等,端點配置寄存器可以在任何時刻完成,但僅在枚舉后的初始化后才有效。為了便于程序設計,在一開始對模式寄存器、硬件配置寄存器、中斷使能寄存器等配置的同時,也對16個端點配置寄存器進行配置。端點0為控制端點,包括in和out端點,這兩個端點大小固定,均為64 B。枚舉過程就是通過這個端點進行的。其余14個為可編程端點,也可以被配置成雙緩沖端點進一步提高吞吐量。設計中端點1配置為64 B雙緩沖批量in端點;端點2配置為16 B中斷out端點;端點3配置為16 B中斷in端點等;可以禁能不用的端點。配置模式寄存器時,尤其要注意可以通過第三位來使能所有中斷。對于硬件配置寄存器,要注意中斷輸出管腳INT2的設置,這里選擇低電平有效的中斷信號模式。對這些寄存器正確配置之后,ISP1362就會進入預期工作模式。
??? 由于ISP1362中需要配置的寄存器很多,因此本設計中先在FPGA生成一片16位,大小為128 B的ROM,再將需要配置的寄存器的寫命令和配置值按照順序寫入ROM中,配置時,只需將ROM中的數(shù)據(jù)依次寫入芯片中即可。寄存器的配置時序如圖3所示(為便于觀察,圖3中只截取了部分寄存器的配置情況)。
??? 圖3中信號clk_50M為全局時鐘;ISP_Rst為芯片的復位信號;ISP_CS,ISP_WR,ISP_RD分別為ISPl362的片選信號、讀信號、寫信號,均為低電平有效;ISP_Al為模式選擇信號,當其值為1時,芯片工作于設備控制器模式,為O時芯片工作于主機控制器模式;ISP_A0為高時對應的ISP_Data為DC的初始化命令,當ISP_AO為低時對應的ISP_Data為寫入相應寄存器的配置值。
2.2設備接收請求
??? 主機的每次請求,都是將請求以setup包的形式發(fā)送到out端點的out緩沖區(qū)。當out緩沖區(qū)接收到數(shù)據(jù)時,芯片的INT2管腳將會有中斷產生。在模式寄存器、硬件配置寄存器、中斷使能寄存器正確配置之后,當有中斷事件產生時,ISP1362內部的SIE就能夠檢測到中斷,并置中斷寄存器的相應位為高電平。固件通過讀取并分析中斷寄存器的值來判斷中斷類型,再進行中斷事件的處理。
??? 固件首先檢測到的是out中斷。這是因為在上電復位以后,主機就向out緩沖區(qū)發(fā)第一個setup請求包。當接收到out中斷時,固件首先讀取out端點的端點狀態(tài)寄存器將中斷清除,以便于芯片接收其他的中斷。接著固件再根據(jù)端點狀態(tài)寄存器的值判斷out緩沖區(qū)內是否含有setup包,然后固件讀取out緩沖區(qū)。
??? 根據(jù)out緩沖區(qū)的內容判斷是何種請求,再決定做何響應。in中斷的產生不同于out中斷。in中斷是在in緩沖區(qū)由空變滿之后才產生的,in中斷的產生需要固件進行寫in緩沖區(qū)的操作。換而言之,是寫in緩沖區(qū)的操作引發(fā)了in中斷的產生,而不是in中斷的產生引發(fā)了寫緩沖區(qū)的操作。當固件檢測到in中斷時,同樣要通過讀in端點的端點狀態(tài)寄存器將中斷清除。
2.3設備響應請求
??? 當芯片工作于設備控制器模式下時,設備端的工作就是被動的執(zhí)行主機發(fā)來的請求。請求類型的確定是通過讀取out緩沖區(qū)里的setup包來完成的。一個setup包(即請求包)有8個字節(jié),根據(jù)其中第二個字節(jié)能夠判斷出請求類型。由流程圖可以看出,枚舉過程中主機要發(fā)出獲取描述符、設置地址、設置配置等請求,對于獲取描述符的請求,還需要進一步判斷是獲取何種描述符的請求,這可以通過請求的第三,四字節(jié)的值來確定。一旦確定了請求類型,設備就可以確定該如何響應請求。當確定主機發(fā)的是獲取何種描述符請求之后,固件就將相應的描述符的值寫入in端點的端點緩沖區(qū)。寫in端點緩沖區(qū)的方法與寄存器配置類似,其時序如圖4所示。
??? 圖4中ISP_A0為高時對應的ISP_Data(即0001)是寫in緩沖區(qū)的命令,ISP_A0為低時對應的ISP_Data為寫入的數(shù)據(jù),其中第一個數(shù)據(jù)即(0012)為要寫入的數(shù)據(jù)的長度,其余為設備描述符。當需要發(fā)送數(shù)據(jù)時,只需使能in緩沖區(qū)即可。若是設置地址請求,固件的工作就是將地址值取出來寫入設備地址寄存器,然后再向主機發(fā)送一個空包。
3 LISB固件代碼實現(xiàn)
??? 在FPGA上用Verilog HDL實現(xiàn)上述功能時,難點有:一是多驅動問題;二是輸入/輸出端口的使用問題。由于程序中有多個模塊同時作用于ISP1362的控制信號線以及數(shù)據(jù)線,如果處理不當,可能會產生同一時刻對同一信號有兩次或兩次以上的賦值的現(xiàn)象。為了避免這種情況的發(fā)生,就要在適當?shù)臅r刻給信號線附上高阻,即當一個模塊在驅動某一信號時,應避免其他模塊也在這一時刻驅動這一信號。芯片的16位數(shù)據(jù)線為雙向,這可以減少管腳的數(shù)量,節(jié)省資源。但在使用時若不注意,同樣容易出錯。inout管腳在使用時一般用三態(tài)門來實現(xiàn),當inout端口不輸出時,要將三態(tài)門置高阻。這在具體的軟件實現(xiàn)中可以使用一個連續(xù)賦值(Assign)語句來實現(xiàn),通過連續(xù)賦值語句將一個條件操作符賦值給這個輸入/輸出變量。該設計的代碼中,雙端口用語句ISP_Data=en? data:16’hzzzz實現(xiàn)其輸入/輸出功能。當en信號為高時,ISP_Data作為輸出信號使用,其值即為data的值;當en信號為低時,ISP_Data作為輸入信號使用。因此,程序中就可以根據(jù)需要通過控制en信號的高低來實現(xiàn)ISP_Data的輸入/輸出使用。
4 結語
??? 采用高性能的Altera的FPGA中的EP2C70F672C6作為主控器件,實現(xiàn)了ISP1362在設備控制器工作模式下的功能,為解決紅外圖像處理系統(tǒng)中的數(shù)據(jù)傳輸問題提供了新的途徑。在具體的軟件實現(xiàn)中,成功地解決了多驅動問題和雙向端口的使用問題。驗證結果表明,程序的穩(wěn)定性好、可移植性高,并且容易實現(xiàn)、易于維護。在成功地進行了枚舉的過程之后,加載上設備驅動程序即可實現(xiàn)數(shù)據(jù)向主機以12 Mb/s的傳輸。
評論
查看更多