<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的CAN總線(xiàn)轉換USB接口的設計方案

基于FPGA的CAN總線(xiàn)轉換USB接口的設計方案

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

CAN總線(xiàn)是現場(chǎng)總線(xiàn)的一種,因為其成本低、容錯能力強、支持分布式控制、通信速率高等優(yōu)點(diǎn)在汽車(chē)、工業(yè)控制、航天等領(lǐng)域得到廣泛應用。但是計算機沒(méi)有CAN總線(xiàn)接口,為了進(jìn)行CAN總線(xiàn)的調試,必須具有專(zhuān)用的適配卡才能實(shí)現與計算機的通信。目前常用的CAN轉換器是基于單片機設計的,一般只適用于單路CAN總線(xiàn)的數據轉換,可擴展性差。

在小衛星相機下位機系統中使用了多種總線(xiàn),如CAN總線(xiàn)與衛星管理計算機的通信;RS422(或RS485)總線(xiàn)與成像單元等下行單元的通信。在進(jìn)行相機下位機系統地面調試時(shí),可能需要多種總線(xiàn)轉換器。采用將不同總線(xiàn)協(xié)議轉換成USB2.0、RS232等可與計算機直接交換數據的協(xié)議,可增強設計的靈活性,降低設計的成本和復雜性,且可實(shí)現多路總線(xiàn)的數據通信接口。

這里以CAN總線(xiàn)通信接口為例,詳細論述了基于的CAN總線(xiàn)轉換USB接口的設計方案。

1 系統硬件組成

實(shí)現CAN總線(xiàn)與計算機雙向通信接口的核心是。它首先接收來(lái)自CAN總線(xiàn)的數據,保存在FPGA內部設計的FIF0緩存中,經(jīng)過(guò)內部數據格式的轉換后,由USB控制器讀取并上傳給計算機。而總線(xiàn)數據注入過(guò)程的數據流向與之相反。FPCA選用Xilinx公司的Spartan3的XC3S200,系統硬件結構如圖l所示。


1.1 USB接口電路

本文引用地址:http://dyxdggzs.com/article/201706/349096.htm

USB是一種支持即插即用及熱插拔的串行總線(xiàn),它具有傳輸速率高、連接靈活、使用方便等優(yōu)點(diǎn)。CYPRESS公司的EZ-USB芯片CY7C68013A支持USB2.0協(xié)議,通信可靠,傳輸速率可達480 Mb/s。CY7C68013A工作在SLAVE FIF0異步通信方式下,接口電路如圖2所示。

SLAVE FIFO異步寫(xiě)周期中,高電平需維持70ns,低電平需維持50ns,理論最高傳輸速率為8Mb/s,而CAN總線(xiàn)的最高傳輸速率為1Mb/s,符合通信要求。端口PA0~PA1用作USB控制器端向FPGA發(fā)送讀寫(xiě)命令的控制線(xiàn),由USB固件程序配合上位機端自定義請求代碼產(chǎn)生PA端口的控制信號。另外使用了EEPROM芯片24LC128存放USB固件程序。

1.2 CAN總線(xiàn)接口電路

選用Philips公司的SJA1000作為CAN控制器,采用PCA82C250作為CAN收發(fā)器,并在CAN控制器與收發(fā)器之間使用6N137進(jìn)行,以增強抗干擾能力。將MODE引腳接高電平即SJA1000工作在INTEL模式,引腳與復位芯片MAX706T的RESET引腳相連,進(jìn)行全局復位。在FPGA與SJA1000連接時(shí)需要使用741V164245電平轉換器完成CAN總線(xiàn)5 V TTL電平向3.3 V FPGA I/O電平的轉換。另外,SJA1000的RX1引腳與PCA-82C 250的VREF引腳相連,使用輸入比較器旁路功能,可減少內部延時(shí),增加正常通信的總線(xiàn)長(cháng)度。具體的接口電路如圖3所示。


2 FPGA邏輯控制程序

2.1 SJA1000邏輯控制

由于SJA1000地址線(xiàn)與數據總線(xiàn)復用,FPGA不僅僅要產(chǎn)生SJA1000讀寫(xiě)控制引腳的信號邏輯,還需要模擬單片機等處理器產(chǎn)生對SJA1000的尋址信號,實(shí)際上是一個(gè)向SJA1000寫(xiě)地址的過(guò)程。根據SJA1000技術(shù)手冊的時(shí)序要求,要完成對SJA1000內寄存器的正確讀寫(xiě),接口邏輯必須在地址鎖存信號ALE為高電平時(shí)將SJA1000的寄存器地址當作數據寫(xiě)入,然后在A(yíng)LE和片選信號為低電平后使能SJA1000的讀寫(xiě)控制信號(WR或RD)。SJA1000的邏輯控制采用狀態(tài)機的方式完成,狀態(tài)機流程圖如圖4所示。起始態(tài)為IDLE態(tài),當接收到數據讀寫(xiě)等命令時(shí),進(jìn)入ADDR-ESS態(tài),向SJA1000寫(xiě)入相應寄存器的地址值。然后根據命令類(lèi)型決定下一個(gè)態(tài)是寫(xiě)寄存器狀態(tài)(WR1~WR3)還是讀寄存器狀態(tài)(RD1~RD4)。以寫(xiě)寄存器為例,在WR1態(tài)ALE、/WR、/RD等信號置為非有效態(tài)。將/CS置為有效狀態(tài);在WR2態(tài)ALE、/RD為非有效態(tài).而將/WR信號置為有效態(tài),在時(shí)鐘的下降沿將數據寫(xiě)入寄存器。WR3狀態(tài)保持/CS有效,WR信號變?yōu)闊o(wú)效,進(jìn)入IDLE態(tài),一次寫(xiě)周期完成。


2.2 SJA1000讀寫(xiě)數據流程控制

FPGA對SJA1000控制程序包括SJA1000初始化、SJA1000讀數據、SJA1000寫(xiě)數據等部分。SJA1000的初始化是在復位模式下進(jìn)行的,在復位模式下分別設置時(shí)鐘分頻器CDR、總線(xiàn)定時(shí)器(BTR0、BTR1)、輸出控制寄存器(OCR)等重要寄存器。SJA1000通信波特率由總線(xiàn)定時(shí)器決定,需要與后端節點(diǎn)的波特率相同才能進(jìn)行節點(diǎn)間的正常通信。FPGA上電后需要延時(shí)一段時(shí)間.等待SJA1000復位完成才能進(jìn)行SJA1000初始化。初始化仿真波形如圖5(a)所示。SJA1000內部有一個(gè)接收緩沖器和一個(gè)發(fā)送緩沖器。FPGA對SJA1000的讀寫(xiě)操作,實(shí)際上對這兩個(gè)緩沖器的讀寫(xiě)控制。當FPGA接收CAN總線(xiàn)數據時(shí)首先讀取SJA1000中斷寄存器IR判斷是否有接收中斷。如果有接收中斷到來(lái)則開(kāi)始讀取緩沖器內的8字節數據,然后釋放接收緩沖器(寫(xiě)命令寄存器CMR)。使用Xilinx公司的Chipseope軟件進(jìn)行板上測試,測試數據為(E0,E1,……E7),抓取到的波形如圖5(b)所示。FPGA讀寫(xiě)SJA1000的流程控制圖如圖6所示。


2.3 CY7C68013A通信控制程序

CY7C68013A提供一種量子FIFO的處理架構,使USB接口和應用環(huán)境直接共享內部含有的4 K FIF0空間。本文CY7C68013A的控制是以異步SLAVE FIFO方式實(shí)現的,FPGA對CY7C68013A的邏輯控制實(shí)際上是對CY7C68013A內部FIFO的異步讀寫(xiě)控制。設置CY7C68013A端點(diǎn)2為批量輸入端點(diǎn)(FIF0地址為00),端點(diǎn)6為批量輸出端點(diǎn)(FIF0地址為1O)。FPGA判斷CY7C68013A的PA[1:0]端口電平,當PA[1:0]為01時(shí),FPGA將接收到的CAN總線(xiàn)數據寫(xiě)入端點(diǎn)2對應的FIF0空間并上傳給上位機,PA[1:0]為10時(shí),FPGA讀取端點(diǎn)6對應的FIFO內數據。FPGA對CY7C68013A的時(shí)序控制嚴格按照芯片手冊完成。

由于USB數據包與CAN數據幀是基于兩種不同協(xié)議的數據格式,因此在FPGA內開(kāi)辟了2個(gè)512x8bit的FIFO緩存,并要進(jìn)行必要的格式轉換。例如,當從USB總線(xiàn)端注入的數據大于8字節時(shí),需要將數據分成多幀傳送給CAN總線(xiàn);當數據小于8字節時(shí)則在數據后填充0。另外,在數據傳送給CAN總線(xiàn)之前還需要添加適當的幀信息與幀識別碼。

3 軟件設計

3.1 USB固件程序

USB固件程序是在Keil工具上開(kāi)發(fā)完成的,除了進(jìn)行必要的端點(diǎn)及寄存器配置外,程序中使用了自定義請求命令。自定義請求碼通過(guò)USB控制傳輸的方式傳送給固件,固件程序需要響應自定義請求碼的請求信息。本文使用的自定義請求碼為Oxa8,在響應代碼中設置端口PA[1:0]電平值,產(chǎn)生USB控制命令,代碼如下所示。SETUPDAT[2]對應控制傳輸端點(diǎn)的Value值,由上位機應用程序設定。


3.2 USB驅動(dòng)程序及應用程序

使用CYPRESS公司提供的CY7C68013A通用驅動(dòng)程序CyUSB.sys。上位機應用程序使用VC編寫(xiě),也是基于Cypress提供的C++類(lèi)庫文件CyAP-I.lib設計完成的。使用的主要函數包括:BeginDataXfer、FinishDataXfer、XferData等函數。應用程序中設計了獨立的數據接收線(xiàn)程,線(xiàn)程函數中不斷地發(fā)送USB數據讀命令,并完成批量輸人端點(diǎn)的讀操作。當有數據讀入時(shí),與主線(xiàn)程之間采用事件的線(xiàn)程同步方式,將數據讀入計算機內存并保存。以下是線(xiàn)程函數中用于發(fā)送USB控制命令的控制傳輸代碼:

4 實(shí)驗調試與結果

為驗證設計的正確性,使用了周立功公司的USBCAN-I產(chǎn)品,與目標電路板組成雙節點(diǎn)通信,2個(gè)節點(diǎn)設置相同波特率500 Kb/s(BTRO= 00,BTR1=1Ch)和相同幀格式,由測試軟件ZLGCANTest發(fā)送一組數據(eOh,e1h,……,e7h),上位機應用程序接收到的數據如圖7所示。反過(guò)來(lái)由上位機應用程序注入指令數據e0h,a8h,周立功軟件接收到的數據為e0h,a8h,00h,OOh……。經(jīng)實(shí)驗表明,數據收發(fā)正確,近距離通信時(shí),通信速率可高達1 Mb/s。


5 結論

使用該方法設計的優(yōu)點(diǎn)在于:使用USB總線(xiàn)完成CAN總線(xiàn)與計算機的數據交換,不會(huì )影響CAN總線(xiàn)的整體通信速率;通過(guò)FPGA控制完成通信接口的設計,可擴展性好,靈活性強,穩定性高。作為空間相機下位機地檢設備的一部分,FPGA同時(shí)還可以完成RS422等總線(xiàn)的通信控制。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>