工控網(wǎng)首頁
>

應用設計

>

具有PCI總線接口的通用嵌入式主板設計

具有PCI總線接口的通用嵌入式主板設計

2013/7/23 13:56:04

摘 要:嵌入式系統(tǒng)和PCI設備的廣泛應用,使得越來越多的產(chǎn)品需要在這兩種先進技術共有的平臺上運行。文章以嵌入式視頻傳輸系統(tǒng)設計為例介紹了以ARM9處理器S3C2510A為主芯片、具有2個PCI插槽的嵌入式系統(tǒng)主板的設計思想,描述了系統(tǒng)的硬件構成、Boot loader的移植以及設備驅(qū)動程序的編寫方法。該主板的應用可以避免嵌入式系統(tǒng)的重復開發(fā),使各種PCI設備卡方便的利用嵌入式系統(tǒng)管理模式運行。

關鍵詞:PCI總線;S3C2510A;嵌入式系統(tǒng);Boot loader;μClinux,

Abstract: With the wide application of embedded system and PCI devices, many products need to run on both platforms of embedded system and systems with PCI interface. The design of the embedded video transmission system, for example, is presented in the paper. The hardware design of the embedded motherboard of 2 PCI slots with processor S3C2510A of ARM9; transplantation of Boot loader and methods of constructing device driver is also described. The application of the newly developed motherboard will eliminate the necessity of repeated development of embedded system and kinds of ready-made PCI device can apply to the embedded system conveniently.

Key words: PCI Bus; S3C2510A; embedded system; Boot loader; μClinux

1. 引言

  使用ARM微處理器構建嵌入式系統(tǒng)已經(jīng)廣泛應用于工業(yè)控制、視頻音頻采集、安防監(jiān)控、消費類手持移動產(chǎn)品、家庭網(wǎng)關設備等各個領域[1]。目前的嵌入式系統(tǒng)大多是針對某項特定應用來開發(fā)的,通常分為兩個部分:主控部分和數(shù)據(jù)處理部分;不同的嵌入式系統(tǒng)的主控部分功能基本類似,區(qū)別大多集中在數(shù)據(jù)處理部分。例如一個視頻采集處理系統(tǒng)和一個設備運行狀態(tài)監(jiān)測系統(tǒng)的不同就是前者的數(shù)據(jù)處理是對視頻數(shù)據(jù)進行采集處理,而后者的數(shù)據(jù)處理部分則是對監(jiān)測的設備運行參數(shù)(如壓力、溫度、流量等)進行采集處理,所以兩個系統(tǒng)的主控部分可以完全一致?;谶@種現(xiàn)狀,我們開發(fā)設計了一個通用嵌入式主板來完成嵌入式系統(tǒng)的主控部分功能。這樣,在進行系統(tǒng)開發(fā)時可以把主要的工作精力放在數(shù)據(jù)處理卡的開發(fā)上,而減少主控部分的重復開發(fā)。

  另一方面,基于PCI總線的廣泛應用,且PCI總線具備32Bit數(shù)據(jù)總線,時鐘頻率可達66Mhz,最快傳輸速率達到264MB/s,能夠滿足高速數(shù)據(jù)傳輸?shù)男枰?加之大多數(shù)數(shù)據(jù)處理模塊、通信處理模塊都具有PCI接口,因此嵌入式主板主控部分和數(shù)據(jù)處理部分的接口設計采用PCI總線(設計的主板可提供兩個PCI插槽)。利用帶有 PCI接口的通用嵌入式主板,加上根據(jù)功能需要開發(fā)或選定的數(shù)據(jù)處理板卡,使嵌入式系統(tǒng)運行在“獨立工作模式”,便能夠完成原本需要設計整個嵌入式系統(tǒng)才能夠完成的任務,而現(xiàn)在只需編寫PCI設備的驅(qū)動程序就可以直接將現(xiàn)有的PCI設備應用到通用嵌入式主板中。

2. 硬件電路設計

  圖1是以視頻傳輸系統(tǒng)為例,介紹了通用嵌入式主板的應用。系統(tǒng)處理器采用三星公司的S3C2510A,

圖1. 視頻傳輸系統(tǒng)框圖 Fig.1 video transmit system

  芯片為ARM 940T內(nèi)核,最高運行頻率可達200Mhz。主板設計直接采用芯片內(nèi)置的SDRAM控制器、PCI控制器、USB控制器和 10M/100M以太網(wǎng)控制器等一系列接口控制器。主板的外部時鐘源為10Mhz,通過S3C2510A的4個內(nèi)置倍頻器,設置引腳CLKMOD0、 CLKMOD1、CPU_FREQ1、BUS_FREQ0為高; 設置引腳CPU_FREQ0、CPU_FREQ2、BUS_FREQ1、 BUS_FREQ2為低,使系統(tǒng)內(nèi)核運行頻率為133Mhz,

  PCI設備運行頻率為66Mhz,USB設備運行頻率為48Mhz。

  主板采取最小系統(tǒng)核心板和外圍接口擴展板分層的設計思想,兩塊板之間通過高速連接器件相連,從而使主板的應用更加方便、靈活。最小核心板由主控芯片、存儲系統(tǒng)和調(diào)試接口三部分組成。其中主控芯片采用內(nèi)置PCI控制器的S3C2510A;為了滿足視頻傳輸需要大量內(nèi)存空間和存儲嵌入式Linux操作系統(tǒng)的需要,存儲模塊由2片32MByte、16Bit的K4S561632E SDRAM芯片和2片8MByte、16Bit的 AM29LV640MT FLASH;調(diào)試接口是1個RS232串口和1個Jtag硬件調(diào)試接口。外圍接口擴展卡由2個10M/100M的以太網(wǎng)絡接口,1個RS232串口,1個RS485串口,2個USB HOST接口可以外接硬盤等存貯設備,1個USB DEVICE接口可以將主板設置為PC機的目標設備。這里將著重介紹有關PCI總線接口部分的硬件設計。圖2是S3C2510A與PCI插槽之間的連接原理框圖。

圖2. S3C2510A的PCI實現(xiàn)原理框圖 Fig2. The hardware design of S3C2510A PCI

  系統(tǒng)上電后,PCI插槽上視頻音頻處理卡將等待模擬視頻信號和模擬音頻信號的輸入,當處理卡得到模擬數(shù)據(jù)后便對模擬數(shù)據(jù)進行壓縮、編碼,處理后的數(shù)據(jù)通過S3C2510A內(nèi)部AHB總線傳輸?shù)揭蕴W(wǎng)端口,利用主板上嵌入式Linux系統(tǒng)中的視頻服務程序通過以太網(wǎng)將壓縮后的數(shù)據(jù)傳輸?shù)娇蛻舳薖C,客戶端只需使用解碼播放器就可以收看到視頻。同時也可以傳輸?shù)経SB端口,把視頻文件保存在硬盤存貯介質(zhì)上。開發(fā)板的系統(tǒng)調(diào)試可以通過RS232串口來完成,而且通過RS232可以外接GPRS無線調(diào)制解調(diào)器,在無法通過以太網(wǎng)進行數(shù)據(jù)傳輸?shù)那闆r下可以無線上網(wǎng),將重要資料傳輸出去。RS485串口可以實現(xiàn)某些特殊協(xié)議的傳輸,例如云臺控制協(xié)議。

  2.1 自帶PCI總線控制器的S3C2510A

表1. 通過模式引腳設置PCI控制器工作方式 Table1. Operation Mode According to Mode Pin Setting

  三星的S3C2510A ARM處理器,內(nèi)部集成了PCI(MINI-PCI)& PC Card控制器,根據(jù)應用需要將S3C2510A的 PCI(MINI-PCI)& PC Card控制器設置為PCI Host工作模式,這是通過設定PCI_PCCDM和PCI_HOSTM兩個配置引腳的電平來實現(xiàn)的[2]。見上頁表1所示。

  S3C2510A內(nèi)嵌的PCI總線控制器符合PCI總線規(guī)范2.2版本,具有32bit地址/數(shù)據(jù)復用總線,支持非線性傳輸和突發(fā)傳輸,最高數(shù)據(jù)傳輸速度可以達到264MB/s@66Mhz(132MB/s@33Mhz) 。而且?guī)в械刂纷儞Q機制,可以將內(nèi)部的PCI總線地址映射到內(nèi)存或者外圍設備。 2510A的引腳定義是根據(jù)

  PCI總線來命名的,因此設計者只需將S3C2510A的PCI控制引腳接出即可。 在設計中設定PCI總線的時鐘頻率為66Mhz,因此主板上PCI總線的最高傳輸速度可以達到264MB,能夠滿足數(shù)據(jù)的快速傳輸。在這里需要利用時鐘反饋來彌補PCI的時鐘延遲。

圖3. S3C2510A的PCI控制器時鐘反饋機制 Fig3. PCI Clock Schemes

  如上圖所示,當PCI控制器工作在PCI HOST模式下時,其時鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510A有3個PCI時鐘輸出信號 PCICLK1,PCICLK2和PCICLK3,將PCI設備診斷寄存器PCIDIAG0的DC3位設置為1,即將PCICLK3設置為輸出無效,此時 PCICLK1與PCICLK3相連,通過PCICLK3將時鐘信號反饋給處理器內(nèi)核,這樣可以使外部PCI設備與PCI時鐘保持一致,從而彌補時鐘延遲 [3]。

  2.2 系統(tǒng)以及PCI控制器的工作啟動順序

  系統(tǒng)上電之后,系統(tǒng)以及PCI控制器的啟動順序如圖4所示:其中在對PCI控制器的特殊功能寄存器進行配置時需要首先關閉中斷,即設置 PCIINTEN=0。然后設置PCI控制和狀態(tài)寄存器PCICON[ARB,ATS,SPL,IOP,MMP],某些需要的情況下還要設置PCI診斷寄存器,這個寄存器是針對測試功能的,在PCMCIA Host工作模式下不需要進行設置。然后要對與基地址有關的寄存器PCIBAM0~1和 PCIBATPA0~2進行設計,設置完之后要配置有關PCI重啟和時鐘的寄存器,其中關鍵的一步是設置PCI重啟和時鐘寄存器 PCIRCC[MSK]=0,這是為了防止重啟信號和時鐘信號的沖突[3]。

圖4.PCI控制器及外圍設備的啟動順序 Fig4. PCI Controller’s Booting Sequence

  在PCI控制器偵測外圍設備并初始化外圍設備的寄存器時,需要完成以下工作:

  1) 讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等等。

  2) 檢查BAR(Backup Address Register)的范圍并一一分配空間。

  3) 使能外部設備并激活總線。

  以上配置都是在PCI視頻處理卡的驅(qū)動中完成的,因為已經(jīng)把驅(qū)動程序加載到了uClinux的內(nèi)核中,所以系統(tǒng)啟動之后,操作系統(tǒng)會自動配置PCI外部設備。

3. 系統(tǒng)軟件設計

  系統(tǒng)的軟件主要由Boot Loader和嵌入式uClinux兩大部分組成,其中Boot Loader相當于PC機的BIOS,是在操作系統(tǒng)內(nèi)核運行前運行的一段程序,其主要作用在于初始化硬件設備,建立系統(tǒng)的內(nèi)存空間映射,然后再調(diào)用操作系統(tǒng)內(nèi)核。嵌入式uClinux是這個系統(tǒng)的OS,主要包括設備驅(qū)動程序和上層應用程序。這里主要介紹一下移植Boot Loader的方法和uClinux中設備驅(qū)動程序的實現(xiàn)。

  3.1 Boot Loader的移植

  Boot Loader是和硬件緊密連接的,系統(tǒng)是通過Boot Loader來調(diào)用操作系統(tǒng)內(nèi)核并最終運行操作系統(tǒng)的。本系統(tǒng)采用了U- Boot(Universal Boot Loader,)作為Boot Loader,下面圍繞U-Boot的移植來介紹如何建立主板的 BootLoader。

  U-Boot相當于一個小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化,存儲空間分配等等,因此其移植工作需要認真地閱讀相關芯片的硬件手冊,在設計過程中主要完成了以下工作,相關的程序編寫可以根據(jù)U-Boot提供的例程來完成:

  1) 修改Makefile配置文件,添加針對目標板的編譯命令行。

  2) 在CPU目錄下建立arm940t目錄,主要包括系統(tǒng)入口函數(shù)start.S,中斷設置函數(shù)代碼interrupts.c,CPU相關代碼文件cpu.c以及串口初始化代碼相關文件serial.c等。

  3) 在Board目錄下建立S3C2510目錄,主要包括FLASH初始化代碼flash.c,內(nèi)存分配代碼memsetup.S,連接器文件u-boot.lds等。

  4) 編寫配置文件,即:include/configs/s3c2510.h,完成了寄存器的定義等系統(tǒng)配置,大部分工作是參考S3C2510的數(shù)據(jù)手冊來進行的。

  5) 編寫flash.c文件,根據(jù)使用的AMD的NOR Flash來編寫Flash的驅(qū)動,主要有flash芯片的型號,容量大小,打印信息,flash擦除函數(shù)等。

  6) 修改SDRAM的大小,只要修改前面建立的配置文件include/configs/s3c2510.h中的#define PHYS_SDRAM_SIZE 0X200000即可。其大小是根據(jù)實際應用中SDRAM的大小來確定的。

  7) 修改串口參數(shù)文件serial.c。包括設置串口波特率,其中波特率是由下式計算得出:

  RUBRDIV0=( (int)(MCLK/16./(gd ->baudrate) 0.5) -1 )。

  8) 修改start.S文件,一個可執(zhí)行的Image 必須有一個入口點并且只能有一個唯一的全局入口,通常這個入口放在Rom(flash)的0x0 地址。例如start.S 中的.globl _start_start: 。

  完成上面工作后就可以將U-Boot編譯,通過Jtag口下載到目標板進行調(diào)試。

  3.2 uClinux設備驅(qū)動編寫

  Linux的內(nèi)核是由設備管理、進程管理、內(nèi)存管理和文件系統(tǒng)一起組成,Linux設備驅(qū)動可以分為字符類(Character)設備,塊類(Block)設備,網(wǎng)絡接口類設備和其他非標準驅(qū)動。其中PCI設備被看作是字符型設備[5]。

  每個PCI外設都由一個總線號、一個設備號和一個功能號來標示,共有三個訪問空間,即內(nèi)存空間、I/O端口和配置寄存器。PCI配置空間由256個字節(jié)組成,且每個設備功能都有一個配置空間,用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址?;竟δ芎瘮?shù)如下:

  int pci_present(void) //檢查系統(tǒng)是否支持PCI

  struct pci_dev //PCI設備的軟件對象

  int pci_find_device(……)//尋找指定的PCI設備

  int pci_find_class(……) //尋找指定的PCI屬類

  int pci_read_config_byte(…..) //讀配置空間

  int pci_write_config_byte(…..) //寫配置空間

  下面通過添加系統(tǒng)的PCI設備驅(qū)動來介紹uClinux設備驅(qū)動的實現(xiàn)步驟:

  1) 創(chuàng)建1個PCI設備,命令如下:

  mknod pci_dev c 245 0

  其中c表示字符設備,245表示主設備號,0代表次設備號。

  2) 初始化外部設備,將函數(shù)pci_dev_init()添加到uClinux/linux/drivers/char/mem.c文件的chr_dev_init()中,chr_dev_init()將在系統(tǒng)啟動時被調(diào)用,會完成設備驅(qū)動的初始化工作:

  /*修改file_operations數(shù)據(jù)結構*/

  Struct file_operations pci_dev_fops={

  read: pci_dev_read;

  write:pci_dev_write;

  open:pci_dev_open;

  release:pci_dev_release;};

  /*初始化PCI外部設備*/

  Int pci_dev_init(void){

  int result;

  printk(“pci_dev_init()\n”);

  /*設備注冊*/

  result =

  register_chrdev(245,”pci_dev”,&pci_dev_fops);}

  3) 設備驅(qū)動文件pci_dev.c的編寫。設備注冊接口函數(shù),中斷處理函數(shù)等構成了PCI設備驅(qū)動主要代碼。即file_operations中的函數(shù)。設備驅(qū)動與內(nèi)核關系緊密,在編寫過程中需要注意庫函數(shù)的使用和I/O空間分配。在嵌入式系統(tǒng)編程過程中無法使用LibC提供的標準庫。I/O空間檢查。要根據(jù)S3C2510A的PCI配置寄存器所給定的基址來讀寫數(shù)據(jù)。因為PCI定義的I/O空間是32位地址空間,因此,內(nèi)存和I/O可以使用相同的配置接口。

  4) PCI設備的加載。

  因為uClinux不支持設備驅(qū)動的動態(tài)加載,因此需要把驅(qū)動編譯到uClinux內(nèi)核中,首先需修改makefile文件,添加下行:

  obj_$(CONFIG_PCI_DEV) =pci_dev.o

  接著修改config.in,添加:

  bool ‘pci_dev install‘ CONFIG_ PCI_DEV,

  添加這行的目的是為了在配置目標板Linux系統(tǒng)內(nèi)核時以便對這個設備進行選擇。

  最后在目標系統(tǒng)的makefile中添加設備節(jié)點:

  pci_dev,c,245,0

  這樣在配置Linux內(nèi)核時就可以選擇pci_dev install,然后進行編譯,這樣PCI設備驅(qū)動就加載到了uClinux系統(tǒng)中。

4. 小結

  使用該主板和PCI接口視頻處理卡組成的視頻傳輸系統(tǒng)在局域網(wǎng)內(nèi)進行視頻傳輸時畫面流暢、畫質(zhì)清晰。帶有PCI接口的通用嵌入式主板的開發(fā)可以減少嵌入式系統(tǒng)的重復開發(fā),縮短開發(fā)周期。核心板和擴展接口板的設計使主板的應用更加方便、靈活,只需根據(jù)具體應用將不同的數(shù)據(jù)處理卡與該主板結合,便能構成不同的功能系統(tǒng),應用于各種具體需求。

參考文獻

  [1] 李善平.劉文峰.王煥龍.Linux與嵌入式系統(tǒng)[M].北京:清華大學出版社,2003.1-4

  [2] 李貴山, 威德虎. PCI局部總線開發(fā)者指南[M]. 西安:西安電子科技大學出版社, 1997

  [3] snmsung electronics. S3C2510A 32bit RISC Microprocessor user’s manual[M], 2003.3, 43-47

  [4] 李駒光.聶雪媛.江澤明.王兆衛(wèi).ARM應用系統(tǒng)開發(fā)詳解[M] .北京:清華大學出版社,2003.202-205

  [5] Alessandro rubini, Jonathan corbet著,魏永明,駱剛, 姜軍譯.Linux 設備驅(qū)動程序(第2版)[M],中國電力出版社,2002.11 502-526

投訴建議

提交

查看更多評論
其他資訊

查看更多

超越傳統(tǒng)直覺,MATLAB/Simulink助力重型機械的智能化轉(zhuǎn)型

新大陸自動識別精彩亮相2024華南國際工業(yè)博覽會

派拓網(wǎng)絡被Forrester評為XDR領域領導者

智能工控,存儲強基 | ??低晭砭手黝}演講

展會|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會