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