基于PCMCIA 的ARINC429 通信卡設(shè)計(jì)
1 引言
ARINC429 總線是廣泛應(yīng)用在航空電子系統(tǒng)中的一種通訊總線。PCMCIA/JEIDA接口是一種廣泛應(yīng)用在數(shù)碼電子產(chǎn)品和便攜式計(jì)算機(jī)上的PC 卡接口規(guī)范。在航空通信系統(tǒng)中使用便攜式計(jì)算機(jī)進(jìn)行通信調(diào)試,應(yīng)用FPGA 來(lái)實(shí)現(xiàn)PCMCIA 規(guī)范接口并完成通信,使板卡具有體積小、性能高、可靠性好的特點(diǎn)。板卡在航空領(lǐng)域應(yīng)用,方便了現(xiàn)場(chǎng)調(diào)試。
2 設(shè)計(jì)思路
2. 1 通信卡總體結(jié)構(gòu)設(shè)計(jì)
通信板卡功能的實(shí)現(xiàn)核心是FPGA 內(nèi)部電路的設(shè)計(jì),圖1 就是FPGA 內(nèi)部設(shè)計(jì)圖梗概。設(shè)計(jì)采用PCMACIA 接口的16 根數(shù)據(jù)線與16 根地址線,可用存儲(chǔ)空間達(dá)64KB,但使用的只是其中一小部分。
PCMCIA 規(guī)范規(guī)定16 位PC 卡有兩種模式,MEMORYONLY 模式和I /O AND memory 模式,MEMORYONLY 模式只適用于純粹做存儲(chǔ)卡的PC 卡設(shè)備。設(shè)計(jì)采用I /O AND MEMORY 模式,但采用的只是MEMORY 操作,這相當(dāng)于在MEMORY 空間里實(shí)現(xiàn)了一個(gè)設(shè)備,這個(gè)設(shè)備用來(lái)完成PCMCIA 主機(jī)和ARINC429 芯片的通信。
FPGA 內(nèi)部要實(shí)現(xiàn)與HOST 主機(jī)連接的PCMCIA接口邏輯。PCMCIA 規(guī)范將卡的存儲(chǔ)空間分為ATTRIBUTE MEMORY 和COMMON MEMORY 兩部分,ATTRIBUTE MEMORY 主要用來(lái)實(shí)現(xiàn)卡的配置,在這里邊實(shí)現(xiàn)了卡信息結(jié)構(gòu),以及配置寄存器,而在COMMON MEMORY 實(shí)現(xiàn)了用于與DEI1016 通信的設(shè)備。
在 FPGA 內(nèi)部實(shí)現(xiàn)邏輯時(shí),PCMCIA 接口部分相當(dāng)于主設(shè)備,而內(nèi)部的寄存器、ARINC429 設(shè)備都是從設(shè)備,在FPGA 內(nèi)部必須實(shí)現(xiàn)對(duì)寄存器讀寫(xiě),對(duì)ARINC429 通信控制信號(hào)的時(shí)序,對(duì)ARINC429 接口的讀寫(xiě)時(shí)序的實(shí)現(xiàn)是個(gè)重點(diǎn)。為了實(shí)現(xiàn)從DEI1016芯片接收數(shù)據(jù),在FPGA 內(nèi)部實(shí)現(xiàn)了一個(gè)64* 16bit的FIFO,待FIFO 半滿時(shí)向PCMCIA 主機(jī)發(fā)出中斷信號(hào),主機(jī)從FIFO 中讀走數(shù)據(jù)。由于從接受ARINC429 接口接收數(shù)據(jù)的時(shí)序比較復(fù)雜,采用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)。向DEI1016 發(fā)送數(shù)據(jù)時(shí),由于DEI1016 內(nèi)部有一個(gè)8* 32bit 的FIFO,PCMCIA 的數(shù)據(jù)線和ARINC429 的數(shù)據(jù)線都是16 位的,可以直接發(fā)送,一些控制信號(hào)可以通過(guò)寄存器操作或MEMORY 地址操作實(shí)現(xiàn)。
圖1 通信卡總體結(jié)構(gòu)框圖
2. 2 PCMCIA 接口設(shè)計(jì)
2. 2. 1 PCMCIA/JEIDA 規(guī)范
PCMCIA/JEIDA 是由個(gè)人電腦存儲(chǔ)卡國(guó)際組織和日本電氣工業(yè)協(xié)會(huì)提出并推廣的一個(gè)便攜式卡接口規(guī)范。其特性如下:
( 1) 16 /32 位數(shù)據(jù)線
( 2) 20MB /S( 132MB /S) 速率,寬度周期100NS
( 3) 支持8 位/16 位DMA 操作
( 4) 兼容PCMCIA2. 1 /JEIDA4. 2 以及更早的版本,兼容32 位卡插槽
( 5) 硬件探測(cè)卡電壓需求可以是5V,3. 3V,或更低
( 6) 支持多功能卡
( 7) 利用卡信息結(jié)構(gòu)的擴(kuò)展能力,可以確定卡功能和數(shù)據(jù)格式
2. 2. 2 卡信息結(jié)構(gòu)和配置寄存器的設(shè)計(jì)
卡信息結(jié)構(gòu),簡(jiǎn)稱CIS,是在卡的ATTRIBUTEMEMORY 空間里實(shí)現(xiàn)對(duì)卡進(jìn)行配置的結(jié)構(gòu),相當(dāng)于一個(gè)ROM 結(jié)構(gòu),主機(jī)通過(guò)讀它來(lái)對(duì)卡進(jìn)行配置,它必須從ATTRIBUTE MEMEORY 空間的00H 地址開(kāi)始。它由很多的TUPLE 組成,每個(gè)TUPLE 有一定的結(jié)構(gòu),由若干字節(jié)組成,這些字節(jié)信息只存在于偶數(shù)字節(jié)地址空間,每個(gè)TUPLE 都固定的含有一個(gè)TUPLE 特有的序號(hào)和相對(duì)于下一個(gè)TUPLE 的偏移量,以及TUPLE 體,表明了一定的配置信息,或者功能說(shuō)明。這些TUPLE 連成鏈,用結(jié)束TUPLE( 序號(hào)FFH) 表明鏈的結(jié)束。16 位PC 卡的TUPLE 最多257 個(gè)字節(jié): 一個(gè)字節(jié)的TUPLE 號(hào)+ 一個(gè)字節(jié)的TUPLE 鏈域+ FFH 的TUPLE 體。一個(gè)鏈最多有256 個(gè)TUPLE。
必須要實(shí)現(xiàn)的TUPLE 有:
CISTPL - DEVICE: 5V 設(shè)備信息TUPLE,包含卡設(shè)備的信息。因?yàn)橛玫亩际谴鎯?chǔ)器操作,實(shí)現(xiàn)接口功能,設(shè)備速度是200NS,設(shè)備大小是兩個(gè)512 字節(jié)的塊,共1M 空間。序號(hào)是17H; CISTPL - CONFIG:
給出了ATTRIBUTE MEMORY 空間里配置寄存器的基地址0200H,給出了最后一個(gè)ENTRY TUPLE的序號(hào)是01H,以及配置寄存器的個(gè)數(shù)是1,就是配置選項(xiàng)寄存器,序號(hào)是1AH; CISTPL - CFTABLE -ENTRY: 配置入口TUPLE 明確了每一個(gè)需要的功能,不同的功能被不同的ENTRY TUPLE 區(qū)分,它被自己的配置入口序號(hào)所標(biāo)記。在設(shè)計(jì)中選擇I /OAND MEMORY 接口,使用的是MEMORY 映射I /O方式實(shí)現(xiàn); 中斷方式是脈沖中斷; 使用的commonmemory 空間從0300H 開(kāi)始,1K 大小,TUPLE 序號(hào)是1BH; CISTPL - VERS - 1: 這是卡制造商信息TUPLE,用PCMCIA2. 1 /JEIDA4. 2 版本,序號(hào)是15H; CISTPL - END: 鏈結(jié)束TUPLE,序號(hào)是FFH。
在卡的ATTRIBUTE MEMORY 空間里可有一個(gè)配置寄存器組,這些配置寄存器都是可讀可寫(xiě)的,為了簡(jiǎn)化設(shè)計(jì),一些可選寄存器都沒(méi)有實(shí)現(xiàn),只實(shí)現(xiàn)了必備的配置選項(xiàng)寄存器COR。這個(gè)配置選項(xiàng)寄存器的地址是在CIS 結(jié)構(gòu)中給出的,在0200H 地址單元。一個(gè)8 位的寄存器。結(jié)構(gòu)如下:
表1 配置選項(xiàng)寄存器
由主機(jī)寫(xiě)入該寄存器的內(nèi)容,實(shí)現(xiàn)第7 位寫(xiě)1,卡被復(fù)位,第6 位寫(xiě)1 是電平中斷模式,0是脈沖中斷模式,后6 位寫(xiě)入CIS 結(jié)構(gòu)中entry tuple 的序號(hào),實(shí)現(xiàn)該入口對(duì)應(yīng)的配置功能。只實(shí)現(xiàn)了一個(gè)entrytuple,是設(shè)置了一個(gè)common memory 設(shè)備( 也是存儲(chǔ)空間) : 基地址0300 的1KB 空間。
在接口模塊的MEMORY 讀寫(xiě)操作中,配置空間的CIS 是只讀的,COR 是可讀可寫(xiě)的。16 位PC卡的讀寫(xiě)操作屬于異步時(shí)序,沒(méi)有同步時(shí)鐘。
2. 3 ARINC429 通信設(shè)計(jì)
2. 3. 1 DEI1016 接收數(shù)據(jù)時(shí)控制信號(hào)的實(shí)現(xiàn)
采用DEI1016和BD429來(lái)實(shí)現(xiàn)ARINC429數(shù)據(jù)的收發(fā)。HOST 向DEI1016 發(fā)送數(shù)據(jù)時(shí),由于內(nèi)部自帶FIFO,可直接發(fā)送,但要區(qū)分發(fā)送的是WORD1 還是WORD2,還是控制寄存器數(shù)據(jù)。
HOST 從DEI1016 接收數(shù)據(jù)時(shí),用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)讀取控制信號(hào)時(shí)序,這一過(guò)程完成一個(gè)32 位字的接收,即一次DR1 或DR2 有效,兩次OE1 或OE2 為低,兩次16 位字的接收,實(shí)現(xiàn)過(guò)程如圖2。其中OE1# /OE2#: 讀出接收通道的數(shù)據(jù); DR1# /DR2#: 該通道接收到了數(shù)據(jù); SEL: 字選擇信號(hào)。[!--empirenews.page--]
圖2 讀取控制信號(hào)狀態(tài)機(jī)
2. 3. 2 FPGA 內(nèi)部接收FIFO 設(shè)計(jì)
當(dāng)從DEI1016 接收數(shù)據(jù)時(shí),在FPGA 內(nèi)部實(shí)現(xiàn)了一個(gè)64* 16bit 的FIFO,該FIFO 從DEI1016 接收數(shù)據(jù)并緩存,PCMCIA 接口接收數(shù)據(jù)時(shí)只與FIFO進(jìn)行通信。
當(dāng)FIFO 從DEI1016 接收數(shù)據(jù)時(shí),將FIFO 的寫(xiě)時(shí)鐘信號(hào)和ARINC429 接口的通道1 或2 的讀信號(hào)連接在一起,用ARINC429 的讀信號(hào)做FIFO 的寫(xiě)時(shí)鐘,而將FIFO 的寫(xiě)允許信號(hào)始終置為有效‘1’,當(dāng)oe1 /oe2 的上升沿來(lái)臨時(shí),就對(duì)FIFO 進(jìn)行寫(xiě)操作。
當(dāng)PCMCIA 接口從FIFO 接收數(shù)據(jù)時(shí),因?yàn)橹鳈C(jī)讀信號(hào)是低有效的,所以用PCMCIA 接口的讀信號(hào)下降沿做FIFO 的讀時(shí)鐘信號(hào),而將讀允許信號(hào)始終置為允許‘1’。
給FIFO 的發(fā)送端口固定的地址是0300H,主機(jī)從FIFO 中接收數(shù)據(jù)相當(dāng)于對(duì)0300H 地址進(jìn)行讀操作。另外用FIFO 的半滿信號(hào)做中斷信號(hào),即當(dāng)FIFO 中存在32 個(gè)字時(shí)。FIFO 的接收數(shù)據(jù)線與DEI1016 的16 根數(shù)據(jù)線相連,發(fā)送數(shù)據(jù)線與PCMCIA接口的16 位數(shù)據(jù)線相連。
2. 3. 3 寄存器設(shè)計(jì)
為了便于對(duì)一些信號(hào)的控制以及上層軟件訪問(wèn)的便利,在PCMCIA 規(guī)范規(guī)定的common memory 空間里實(shí)現(xiàn)了一個(gè)狀態(tài)寄存器( SR) 和一個(gè)控制寄存器( CR) ,將一些控制和狀態(tài)信號(hào)裝入寄存器中固定的某位,以便上層軟件的控制訪問(wèn)。
在common memory 的0308H 地址單元實(shí)現(xiàn)了一個(gè)狀態(tài)寄存器,它是只讀寄存器。第0 位是TXR信號(hào)量,為1 表示DEI1016 內(nèi)部的FIFO 是空的,可以裝入數(shù)據(jù); 第1 位是FPGA 內(nèi)部FIFO 空信號(hào),為高表示空; 第3 位是FPGA 內(nèi)部FIFO 滿信號(hào),為低表示滿。
在common memory 的0310H 地址單元實(shí)現(xiàn)了一個(gè)控制寄存器,它是可讀可寫(xiě)寄存器。第0 位是ENTX 信號(hào),是DEI1016 發(fā)送數(shù)據(jù)允許信號(hào),為1 表示允許發(fā)送; 第1 位是DEI1016 復(fù)位信號(hào)MR,低有效。
上層軟件在控制向DEI1016 的發(fā)送緩沖區(qū)( FIFO) 寫(xiě)數(shù)據(jù)時(shí),應(yīng)先讀出SR 的TXR 位,F(xiàn)IFO 為空時(shí)即TXR 為1 時(shí)才能讓主機(jī)向FIFO 中寫(xiě)入數(shù)據(jù)。而用CR 的ENTX 位控制DEI1016 是否能發(fā)送數(shù)據(jù)時(shí)也應(yīng)該先判斷TXR,TXR 為高時(shí),即發(fā)送FIFO 為空時(shí),DEI1016 是不能發(fā)送數(shù)據(jù)的,只有為低時(shí)才能發(fā)送; 當(dāng)TXR 為低時(shí),也不能強(qiáng)行拉低ENTX,即發(fā)送FIFO 中有數(shù)據(jù)時(shí),不能強(qiáng)行禁止發(fā)送,因?yàn)檫@樣破壞了原有數(shù)據(jù)的完整性。
同樣可以通過(guò)common memory 中的FIFO -EMPTY 信號(hào)控制主機(jī)從接收FIFO 中取數(shù)據(jù); 還可以寫(xiě)DEI1016 的復(fù)位信號(hào)。
2. 4 存儲(chǔ)空間設(shè)計(jì)概括
卡剛插入筆記本卡插槽的時(shí)候,主機(jī)主動(dòng)讀CIS 內(nèi)容,然后可以寫(xiě)COR,進(jìn)行配置。對(duì)DEI1016操作之前,要先寫(xiě)控制寄存器里的MR 信號(hào),使DEI1016 復(fù)位后,再寫(xiě)入DEI1016 的控制寄存器,然后才可以進(jìn)行數(shù)據(jù)的收發(fā)操作。接收數(shù)據(jù)就是響應(yīng)中斷信號(hào)( FIFO 的半滿信號(hào)) ,從FIFO 中讀取數(shù)據(jù),直到判斷出FIFO - EMPRY 信號(hào)有效。發(fā)送數(shù)據(jù)時(shí),要先判斷SR 里邊的TXR 信號(hào),當(dāng)DEI1016 里的FIFO 為空時(shí),再向FIFO 里發(fā)送數(shù)據(jù),發(fā)送總字?jǐn)?shù)不定,但不能超過(guò)DEI1016 內(nèi)部FIFO 的容量8*32bit,發(fā)送之前拉低ENTX,且每次是先發(fā)送字一,再發(fā)送字二,字一,字二必須成對(duì)發(fā)送,發(fā)送完后拉高ENTX,允許DEI1016 發(fā)送數(shù)據(jù)。
在FPGA 內(nèi)部實(shí)現(xiàn)可利用的存儲(chǔ)區(qū)域概括起來(lái)如下:
表2 存儲(chǔ)區(qū)域使用表
3 結(jié)束語(yǔ)
介紹了應(yīng)用FPGA 完成PCMCIA 接口的ARINC429 通信卡的設(shè)計(jì)方案和其中的難點(diǎn),通過(guò)本次設(shè)計(jì)也為其它應(yīng)用FPGA 完成PCMCIA 接口的PC卡的設(shè)計(jì)提供了可借鑒方案。除了上述之外,上層應(yīng)用程序和板卡的配合也是值得注意的。