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