在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于PCI總線的多功能CAN通信I/O卡的快速設計方案

電子設計 ? 來源:電子技術應用 ? 作者:張志明;沈宇華; ? 2020-04-08 08:00 ? 次閱讀

隨著計算機和控制技術的不斷發展,很多工程人員都選用PC機作為控制系統的操作平臺。為了能夠和外部設備通信,PC機上提供了外置的USB、串口、并口及內置的ISA、PCI等接口。PCI總線接口速度快,系統占用率低,有完備的即插即用(PnP)管理體制,是目前計算機插卡式外設總線的事實標準。

設計了一塊PCI總線多功能CAN通信I/O卡,可以完成數字量I/O、CAN總線通信的功能。本文將根據實際經驗,介紹PCI接口擴展卡的軟硬件設計流程和一種快速開發方案。

1、PCI總線簡介

PCI總線標準由PCISIG(PCI Special Interest Group)制定,該組織的成員有Intel、IBM、DEC等公司。目前PC機中使用的PCI總線標準主要以PCI2.0為主,其頻率為33MHz,字寬為32bit,電源電壓為5V。新版的PCI標準向下兼容,并支持66MHz時鐘,字寬為64bit,電壓為3.3V。

PCI總線是一種時分復用的雙向應答總線,傳輸發起方稱為主設備,接收方稱為從設備。主設備用RFAME信號指示,從設備拉低它的DEVSEL線來表示響應傳輸請求。PCI總線的數據傳輸以幀為單位,每次傳輸由一個地址周期(Address Phase)和多個數據周期(Data Phase)組成,如圖1所示。AD0~AD31首先給出本次傳輸的首地址,后面緊跟一個或多個32位(4字節)寬的數據,多個數據的地址自動遞增。在地址周期,C/BE0~C/BE3這四根線的不同組合指示出在AD0~AD31上將要進行何種類型的操作,如C/BE0~C/BE3=0110表示存儲器讀,C/BE0~C/BE3=0011表示I/O寫。在數據周期,C/BE0~BE3對應AD0~AD31上四個字節的使能。IRDY和TRDY分別表示主設備準備好和從設備準備好。在傳輸過程中,只有IRDY和TRDY同時有效,傳輸才能繼續;否則插入等待周期,用于在不同速度的設備之間協調工作。

基于PCI總線的多功能CAN通信I/O卡的快速設計方案

計算機的接口卡一般會用到I/O端口、存儲器空間、中斷及DMA等計算機資源。傳統ISA接口卡通過更改跳線來避免多塊卡之間的資源沖突,PCI接口卡則摒棄了硬件跳線,由軟件統籌分配資源,這被稱為即插即用。為實現此功能,PCI協議除了可以對I/O空間、存儲器空間讀寫外,還定義了對配置空間的讀寫(C/BE0~C/BE3=1010、1011)。所謂配置空間,是指映射到每塊接口卡上的256字節的特殊功能寄存器。設計者事先在配置空間的指定位置寫入需要申請使用的資源量,主板上電后,由PnP-Bios讀取各卡的配置空間,對它們所需的資源進行統籌分配,再將分配結果寫回對應的配置空間地址,完成自動配置。

2 、PCI接口卡的硬件設計及調試

以筆者設計的PCI卡為例,使用SJA1000實現CAN總線通信功能,需要映射32字節的存儲器空間和一個中斷資源,在功能上屬于PCI從設備(Target-only Device)。SJA1000的對外接口電路可以直接與Intel8051、8096及ISA總線連接,但是不能與PCI總線直接連接,因此需要設備用于邏輯轉換的接口電路。

PCI接口電路的設計一般有兩類方法:一類是使用FPGA/CPLD等可編程器件開發邏輯轉換電路。根據實現功能的多少,所需的等效門密度約為5000~15000門,可自行編程或者購買已有“軟核”(IPCORE)的產品實現;另一類是使用標準接口芯片對PCI總線邏輯信號解碼。第一種方法開發成本高、難度大、周期長、測試設備昂貴,但是批量生產成本很低,適合大規模全定制或半定制ASIC的生產。第二種方法相對簡單、開發周期短、性價比合理,適合本方案采用。市場上的接口芯片供應商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052價格便宜、供貨渠道暢通、功能適用,因此這里選用PLX9052。

采用PLX9052的接口卡在邏輯上可分成三個功能模塊:PCI接口部分、EEPROM部分和局部總線部分,如圖2所示。

PLX9052提供完備的PCI從設備支持,PCI接口部分的47根信號線可以直接與PCI連接器(俗稱金手指)連接。PCI連接器上有兩根特殊的引線PRSNT1#和PRSNT2#,它們不參與PCI協議操作,只用來告知主板該卡消耗的電功率。

PLX9052將PCI總線上的操作轉換為對局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對SJA1000的寄存器進行訪問。舉例來說,如果系統上電后分配給本卡的存儲器地址空間為F680 0000~F680 001F,那么當系統通過PCI總線訪問這個區域時,PLX9052會應答,并將其轉換為局部地址0x0000~0x001F,對應于SJA1000的32個內部寄存器。另外,PLX9052自身也有一些內部寄存器,它們被自動映射到另一片內存區域,可通過PCI總線直接訪問。

PLX9052提供三種類型的局部總線信號:標準ISA模式、復用模式和非復用模式,其中復用模式和SJA1000的接口最吻合。此模式的信號和8051CPU輸出的信號基本相同,可以直接與SJA1000及其它類似接口的芯片相連,只是片選信號不再需要外部地址譯碼電路,而是由PLX9052內部邏輯完成。

局部總線的時鐘可以與PCI時鐘異步,由有源晶振提供。控制信號LHOLD接地表示局部總線無需申請等待周期。LINTi1是中斷申請線,接有上拉電阻,確保無中斷時停靠在空閑狀態。USER0~USER4是可編程I/O引腳,USER0、1設備為輸入,USER2、3設置為輸出,由PLX9052的內部寄存器控制,實現數字I/O功能。SJA1000和82C250構成CAN總線接口電路,最高可支持1MHz的通信速率。

EEPROM部分用于初始化PLX9052的寄存器,在系統上電后讀取。PLX9052的EECS、EEDO、EEDI、EESK引腳分別與串行EEPROM 93LC46的對應引腳相連,其中EEDO引腳加有上拉電阻,使得在未安裝EEPROM時,EEDO始終保持高電平狀態,PLX9052仍然能夠以缺省設置運行。以下對內個主要寄存器的設備進行說明。

VendorID和DeviceID:生產廠商代號和芯片代號。VendorID由生產商向PCISIG申請,DeviceID由生產商自行制定。PLX公司的VendorID為10B5,PLX9052的DeviceID為9050,故設為10B5 9050。

ClassCode:表示PCI卡屬于哪種類型,如多媒體卡、顯卡等。本設計中將其定為0000 0680,表示PCI橋(PCI Bridge)設備。

Local Address Space 0 Range:設為FFFF FFE0,表示申請32字節的存儲器空間。

Local Address Space 0 Local Base Address(remap)設為0000 0001,表示將PCI總線上的地址轉換為局部總線地址0x0000~0x001F。

Chip Select 0 Base Address:設為0000 0011,表示在局部總線地址為0x0000~0x001F時,局部總線的片選信號有效,用于SJA1000的片選。

Interrupt Control/Status:設為0000 0041,表示中斷使能,響應LINTi上的中斷申請。

CNTRL:設為0060 0C80,表示USER0、USER1引腳用于輸入,USER2、USER3引腳用于輸出,初始值分別為0、1,PCI數據傳輸等待超時長度為12個時鐘周期。

根據PCI標準和PLX9052的說明文檔,PCI連接器上所有的VCC、Vi/o 5V電源連接到一起,所有的GND端連接到一起,在盡可能靠近PLX9052電源引腳的地方放置高頻去耦電容。PCI總線的時鐘頻率為33MHz,不恰當的布線會導致信號線之間的延時關系混亂,因此PCI協議對布線做了嚴格的規定,要求主時鐘PCI_CLK線的長度為2.5英寸,誤差應小于0.1英寸,其它引線短于1.5英寸,推薦使用四層板。設計中可以參考市面上的聲卡和網卡布線實例,如考慮成本等因素,也可只使用兩層板,雙面覆銅接地。經實驗驗證該卡能夠穩定工作。

3、 PCI接口卡驅動程序及軟件設計

在DOS環境下,操作系統對應用程序開放所有權限,開發人員可以使用匯編指令、BIOS函數等任何方法操作硬件資源,此處不再多述。

在Windows系統中,為避免因不當的硬件操作而導致系統崩潰,應用程序不再具有直接的硬件訪問權,如果要操作硬件,必須借助設備驅動程序。現有的Windows系列操作系統產品眾多,所使用的設備驅動程序結構也有所不同。其中,VxD型驅動程序最古龍,適用于Win3.x、Win95、Win98等操作系統;WinNT型驅動程序只適用于WinNT4.x以下版本的操作系統;WDM型驅動程序是WinNT型驅動程序的升級版,適用于Win98、Win2000、WinXP等操作系統,是今后幾年的應用主流。

Microsoft為設備驅動程序的編寫提供了一些工具,如Windows Device Drivers Kit(簡稱DDK),它包含了驅動開發所需的各種類型的定義和內核函數庫。如果直接使用發所需的各種類型的定義和內核函數庫。如果直接使用DDK,開發者需要了解整個系統體系結構和WDM規范,熟諳上千個DDK函數的功能和使用場合。用這些方法編制的驅動程序有很高的運行效率,但是開發難度大,測試流程繁瑣,一般用于有一定研發和生產需求的單位。

為減輕開發者的負擔,很多第三方廠商提供了輔助軟件。如Numega公司的DriverStudio軟件,它將DDK函數按照邏輯功能組織,把很多常用功能封裝成類,建立了一個基于C++語言的而向對象的編程環境。開發者面對的不再是上千個復雜凌亂的DDK函數,而是邏輯清晰的類庫,大大降低了開發難度和開發周期,獲得了廣泛的應用。

對于速度要求不高、實時性要求不嚴的場合,Jungo公司的Windriver軟件提供了一種更加快速簡潔的解決方案。它內置一個名為Wdpnp.sys的通用核心態WDM驅動程序,將一些基本的操作如存儲讀寫、I/O端口讀寫、中斷服務、DMA操作等進行了封裝,開發者只需編寫一個外殼程序來調用這個驅動程序,開發者只需編寫一個外殼程序來調用這個驅動程序,就可以對硬件設備操作,如圖3所示,圖中灰色的部分表示Windriver已經提供。

Windriver提供的驅動程序經過充分優化,功能完備,在通用性和高效性之間做了很好的平衡。另外,Windriver專門為PLX公司的芯片開發了軟件包,因此非常適合在本方案中使用。

Windriver啟動后,會自動發現計算機上的所有即插即用設備,如圖4所示。其中“PCI:PLX PCI 9050 Target PCI Interface Chip”即指本卡。點擊“Generate.INF file”按鈕可以生成INF文件,系統用它提供的信息安裝Wdpnp.sys。

為方便在用戶態驅動代碼中操作SJA1000和PLX9052的寄存器,可以使用Windriver為已映射的存儲器地址命名,如圖5所示,圖中CAN_IR表示中斷寄存器,CAN_CR表示寄存器,等等。

Windriver的核心態驅動程序內置了中斷服務函數,它的作用有兩個:一是發送硬件清中斷指令,用戶在初始化階段告知Windriver如何清中斷(一般是對板卡上的某個寄存器進行讀寫),由核心驅動程序自動完成。二是通知應用程序有中斷到來,回調用戶程序的中斷響應函數。

用Windriver可以生成一個基于C語言的應用程序函數庫,用戶通過這些庫函數控制內核驅動程序。現以筆者編制的程序為例進行介紹,工程文件名取為CAN01。

在初始化階段,先使用WD_Open()打開驅動程序,再用CAN01_Open()設置驅動程序工作參數,生成一個CAN01實例,最后用CAN01_IntEnable()設置用戶態中斷響應函數。

在退出應用程序前,先清除所有未處理的中斷,釋放分配的內存,再用CAN01_Close()刪除CAN01,最后使用WD_Close()關閉驅動程序。

對SJA1000和PLX9052的寄存器的操作通過兩個函數完成,可以實現CAN總線通信和數字量I/O等功能:

讀操作CAN01_ReadByte(),

寫操作CAN01_WriteByte()。

本文根據實驗經驗,介紹了開發PCI總線擴展卡的軟硬件流程,給出了一套快速可行的解決方案。該方案電路簡單、調試方便、編程高效、可以使技術人員迅速掌握PCI總線的開發技術,從而設計符合個性要求的多功能擴展卡。

責任編輯:gt


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制系統
    +關注

    關注

    41

    文章

    6650

    瀏覽量

    110755
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2763

    瀏覽量

    464063
  • pci總線
    +關注

    關注

    1

    文章

    203

    瀏覽量

    31876
收藏 人收藏

    評論

    相關推薦

    基于FPGA的CPCI總線多功能通信的設計

    摘 要: 為了提高航空航天領域對信號處理、傳輸的實時性及可靠性,以CycloneIII系列EP3C40F324I7為核心處理器,設計了一種基于CPCI總線多功能通信
    發表于 01-14 10:59

    求一款在PCI總線上利用FPGA技術設計PCI總線接口的設計方案

    PCI總線特點及開發現狀PCI接口配置空間的實現求一款在PCI總線上利用FPGA技術設計PCI
    發表于 04-15 06:17

    基于PCI總線CAN該如何去設計?

    基于PCI總線CAN該如何去設計?
    發表于 06-02 06:14

    PCI接口擴展快速開發方案

    介紹了PCI總線擴展的設計思路和方法! 并結合一個多功能"’通信 的設計實例!介紹了
    發表于 07-02 14:54 ?27次下載

    基于PCI Express總線高速數據采集的設計與實現

    本文介紹一種基于PCI Express 總線的高速數據采集設計方案功能實現。給出系統的基本結構及單元組成,重點闡述系統硬件設計的關鍵技
    發表于 09-22 08:15 ?62次下載

    基于PCI總線CAN的設計與實現

    基于PCI總線CAN的設計與實現 現場總線CAN(Controller Area Netw
    發表于 10-25 10:54 ?896次閱讀
    基于<b class='flag-5'>PCI</b><b class='flag-5'>總線</b>的<b class='flag-5'>CAN</b><b class='flag-5'>卡</b>的設計與實現

    關于PCI9052在多功能CAN適配中的應用研究

    關于PCI9052在多功能CAN適配中的應用研究 0 概述PCI總線是一種獨立于CPU的局部
    發表于 04-08 15:02 ?1144次閱讀
    關于<b class='flag-5'>PCI</b>9052在<b class='flag-5'>多功能</b><b class='flag-5'>CAN</b>適配<b class='flag-5'>卡</b>中的應用研究

    CAN總線PC適配設計

    本文首先介紹PCI總線控制器PCI9052與CAN總線通信控制器SJA1000的工作原理,并且介
    發表于 09-23 17:34 ?2107次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>總線</b>PC適配<b class='flag-5'>卡</b>設計

    CAN總線在多機通信中的應用

    設計了多個CAN總線通信節點,通過PCI9810-CAN適配上的CAN
    發表于 10-19 14:57 ?68次下載
    <b class='flag-5'>CAN</b><b class='flag-5'>總線</b>在多機<b class='flag-5'>通信</b>中的應用

    基于PCI總線CAN設計與實現

    目前PCI是處于主流的計算機總線。以往的CAN一般都是基于ISA總線的,由于ISA總線傳輸速率
    發表于 06-01 10:57 ?2336次閱讀
    基于<b class='flag-5'>PCI</b><b class='flag-5'>總線</b><b class='flag-5'>CAN</b><b class='flag-5'>卡</b>設計與實現

    VxWorks的PCI總線多功能數據采集驅動開發

    VxWorks的PCI總線多功能數據采集驅動開發
    發表于 10-31 11:21 ?16次下載
    VxWorks的<b class='flag-5'>PCI</b><b class='flag-5'>總線</b><b class='flag-5'>多功能</b>數據采集<b class='flag-5'>卡</b>驅動開發

    兼容PCI總線多功能模擬I/O板 可為PC機提供16位精度應用

    700美元,是一款兼容PCI總線多功能模擬I/O板,可為PC機提供16位精度基于測量,分析,監測和控制應用。可訂購商用溫度范圍或工業溫度范
    的頭像 發表于 10-06 10:08 ?2955次閱讀

    簡述關于FPGA的CPCI總線多功能通信的設計

    為了提高航空航天領域對信號處理、傳輸的實時性及可靠性,以Cyclone III系列EP3C40F324I7為核心處理器,設計了一種基于CPCI總線多功能通信
    的頭像 發表于 04-05 08:32 ?4077次閱讀
    簡述關于FPGA的CPCI<b class='flag-5'>總線</b><b class='flag-5'>多功能</b><b class='flag-5'>通信</b><b class='flag-5'>卡</b>的設計

    can總線 i/o模塊能否充當控制器?

    can總線 i/o模塊能否充當控制器?答案當然是不行!因為它并沒有主站控制功能。 雖然都有總線
    的頭像 發表于 06-28 08:35 ?709次閱讀

    基于VxWorks的PCI總線多功能數據采集驅動開發

    電子發燒友網站提供《基于VxWorks的PCI總線多功能數據采集驅動開發.pdf》資料免費下載
    發表于 10-24 09:23 ?3次下載
    基于VxWorks的<b class='flag-5'>PCI</b><b class='flag-5'>總線</b><b class='flag-5'>多功能</b>數據采集<b class='flag-5'>卡</b>驅動開發
    主站蜘蛛池模板: 小优视频在线| 亚洲 欧美 日韩 丝袜 另类| 日本成人黄色网址| 日本最新免费网站| 男人的天堂视频在线| 老色批影院| 丁香婷婷亚洲| 天天躁日日躁狠狠躁一级毛片| 天天操夜夜操免费视频| 免费不卡毛片| 四虎东方va私人影库在线观看| 一区二区三区四区在线 | 久久视频免费| 成人黄性视频| 手机看福利片| 91天天干| 日本一区二区视频| 在线播放 你懂的| 四虎新网址| 久久精品国产清自在天天线| sss在线play| 久在操| 91大神在线观看精品一区| 中文字幕第7页| 色天使色婷婷在线影院亚洲| 理论片人人51| 一级黄色片a| 成人人免费夜夜视频观看| 亚洲成人www| 特级做a爰片毛片免费看| 六月婷婷视频| 午夜精品视频在线观看美女| 成人黄色三级| 亚洲一区二区中文| 亚洲青青草原| 萌白酱香蕉白丝护士服喷浆| aaaaaaa毛片| 国产成人毛片视频不卡在线| 色女人综合| 奇米狠狠干| 午夜一级免费视频|