具有PCI總線接口的通用嵌入式主板設(shè)計(jì)
摘 要:嵌入式系統(tǒng)和PCI設(shè)備的廣泛應(yīng)用,使得越來(lái)越多的產(chǎn)品需要在這兩種先進(jìn)技術(shù)共有的平臺(tái)上運(yùn)行。文章以嵌入式視頻傳輸系統(tǒng)設(shè)計(jì)為例介紹了以ARM9處理器S3C2510A為主芯片、具有2個(gè)PCI插槽的嵌入式系統(tǒng)主板的設(shè)計(jì)思想,描述了系統(tǒng)的硬件構(gòu)成、Boot loader的移植以及設(shè)備驅(qū)動(dòng)程序的編寫方法。該主板的應(yīng)用可以避免嵌入式系統(tǒng)的重復(fù)開發(fā),使各種PCI設(shè)備卡方便的利用嵌入式系統(tǒng)管理模式運(yùn)行。
關(guān)鍵詞: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微處理器構(gòu)建嵌入式系統(tǒng)已經(jīng)廣泛應(yīng)用于工業(yè)控制、視頻音頻采集、安防監(jiān)控、消費(fèi)類手持移動(dòng)產(chǎn)品、家庭網(wǎng)關(guān)設(shè)備等各個(gè)領(lǐng)域[1]。目前的嵌入式系統(tǒng)大多是針對(duì)某項(xiàng)特定應(yīng)用來(lái)開發(fā)的,通常分為兩個(gè)部分:主控部分和數(shù)據(jù)處理部分;不同的嵌入式系統(tǒng)的主控部分功能基本類似,區(qū)別大多集中在數(shù)據(jù)處理部分。例如一個(gè)視頻采集處理系統(tǒng)和一個(gè)設(shè)備運(yùn)行狀態(tài)監(jiān)測(cè)系統(tǒng)的不同就是前者的數(shù)據(jù)處理是對(duì)視頻數(shù)據(jù)進(jìn)行采集處理,而后者的數(shù)據(jù)處理部分則是對(duì)監(jiān)測(cè)的設(shè)備運(yùn)行參數(shù)(如壓力、溫度、流量等)進(jìn)行采集處理,所以兩個(gè)系統(tǒng)的主控部分可以完全一致。基于這種現(xiàn)狀,我們開發(fā)設(shè)計(jì)了一個(gè)通用嵌入式主板來(lái)完成嵌入式系統(tǒng)的主控部分功能。這樣,在進(jìn)行系統(tǒng)開發(fā)時(shí)可以把主要的工作精力放在數(shù)據(jù)處理卡的開發(fā)上,而減少主控部分的重復(fù)開發(fā)。
另一方面,基于PCI總線的廣泛應(yīng)用,且PCI總線具備32Bit數(shù)據(jù)總線,時(shí)鐘頻率可達(dá)66Mhz,最快傳輸速率達(dá)到264MB/s,能夠滿足高速數(shù)據(jù)傳輸?shù)男枰?加之大多數(shù)數(shù)據(jù)處理模塊、通信處理模塊都具有PCI接口,因此嵌入式主板主控部分和數(shù)據(jù)處理部分的接口設(shè)計(jì)采用PCI總線(設(shè)計(jì)的主板可提供兩個(gè)PCI插槽)。利用帶有 PCI接口的通用嵌入式主板,加上根據(jù)功能需要開發(fā)或選定的數(shù)據(jù)處理板卡,使嵌入式系統(tǒng)運(yùn)行在“獨(dú)立工作模式”,便能夠完成原本需要設(shè)計(jì)整個(gè)嵌入式系統(tǒng)才能夠完成的任務(wù),而現(xiàn)在只需編寫PCI設(shè)備的驅(qū)動(dòng)程序就可以直接將現(xiàn)有的PCI設(shè)備應(yīng)用到通用嵌入式主板中。
2. 硬件電路設(shè)計(jì)
圖1是以視頻傳輸系統(tǒng)為例,介紹了通用嵌入式主板的應(yīng)用。系統(tǒng)處理器采用三星公司的S3C2510A,
圖1. 視頻傳輸系統(tǒng)框圖 Fig.1 video transmit system
芯片為ARM 940T內(nèi)核,最高運(yùn)行頻率可達(dá)200Mhz。主板設(shè)計(jì)直接采用芯片內(nèi)置的SDRAM控制器、PCI控制器、USB控制器和 10M/100M以太網(wǎng)控制器等一系列接口控制器。主板的外部時(shí)鐘源為10Mhz,通過S3C2510A的4個(gè)內(nèi)置倍頻器,設(shè)置引腳CLKMOD0、 CLKMOD1、CPU_FREQ1、BUS_FREQ0為高; 設(shè)置引腳CPU_FREQ0、CPU_FREQ2、BUS_FREQ1、 BUS_FREQ2為低,使系統(tǒng)內(nèi)核運(yùn)行頻率為133Mhz,
PCI設(shè)備運(yùn)行頻率為66Mhz,USB設(shè)備運(yùn)行頻率為48Mhz。
主板采取最小系統(tǒng)核心板和外圍接口擴(kuò)展板分層的設(shè)計(jì)思想,兩塊板之間通過高速連接器件相連,從而使主板的應(yīng)用更加方便、靈活。最小核心板由主控芯片、存儲(chǔ)系統(tǒng)和調(diào)試接口三部分組成。其中主控芯片采用內(nèi)置PCI控制器的S3C2510A;為了滿足視頻傳輸需要大量?jī)?nèi)存空間和存儲(chǔ)嵌入式Linux操作系統(tǒng)的需要,存儲(chǔ)模塊由2片32MByte、16Bit的K4S561632E SDRAM芯片和2片8MByte、16Bit的 AM29LV640MT FLASH;調(diào)試接口是1個(gè)RS232串口和1個(gè)Jtag硬件調(diào)試接口。外圍接口擴(kuò)展卡由2個(gè)10M/100M的以太網(wǎng)絡(luò)接口,1個(gè)RS232串口,1個(gè)RS485串口,2個(gè)USB HOST接口可以外接硬盤等存貯設(shè)備,1個(gè)USB DEVICE接口可以將主板設(shè)置為PC機(jī)的目標(biāo)設(shè)備。這里將著重介紹有關(guān)PCI總線接口部分的硬件設(shè)計(jì)。圖2是S3C2510A與PCI插槽之間的連接原理框圖。
圖2. S3C2510A的PCI實(shí)現(xiàn)原理框圖 Fig2. The hardware design of S3C2510A PCI
系統(tǒng)上電后,PCI插槽上視頻音頻處理卡將等待模擬視頻信號(hào)和模擬音頻信號(hào)的輸入,當(dāng)處理卡得到模擬數(shù)據(jù)后便對(duì)模擬數(shù)據(jù)進(jìn)行壓縮、編碼,處理后的數(shù)據(jù)通過S3C2510A內(nèi)部AHB總線傳輸?shù)揭蕴W(wǎng)端口,利用主板上嵌入式Linux系統(tǒng)中的視頻服務(wù)程序通過以太網(wǎng)將壓縮后的數(shù)據(jù)傳輸?shù)娇蛻舳薖C,客戶端只需使用解碼播放器就可以收看到視頻。同時(shí)也可以傳輸?shù)経SB端口,把視頻文件保存在硬盤存貯介質(zhì)上。開發(fā)板的系統(tǒng)調(diào)試可以通過RS232串口來(lái)完成,而且通過RS232可以外接GPRS無(wú)線調(diào)制解調(diào)器,在無(wú)法通過以太網(wǎng)進(jìn)行數(shù)據(jù)傳輸?shù)那闆r下可以無(wú)線上網(wǎng),將重要資料傳輸出去。RS485串口可以實(shí)現(xiàn)某些特殊協(xié)議的傳輸,例如云臺(tái)控制協(xié)議。
2.1 自帶PCI總線控制器的S3C2510A
表1. 通過模式引腳設(shè)置PCI控制器工作方式 Table1. Operation Mode According to Mode Pin Setting
三星的S3C2510A ARM處理器,內(nèi)部集成了PCI(MINI-PCI)& PC Card控制器,根據(jù)應(yīng)用需要將S3C2510A的 PCI(MINI-PCI)& PC Card控制器設(shè)置為PCI Host工作模式,這是通過設(shè)定PCI_PCCDM和PCI_HOSTM兩個(gè)配置引腳的電平來(lái)實(shí)現(xiàn)的[2]。見上頁(yè)表1所示。
S3C2510A內(nèi)嵌的PCI總線控制器符合PCI總線規(guī)范2.2版本,具有32bit地址/數(shù)據(jù)復(fù)用總線,支持非線性傳輸和突發(fā)傳輸,最高數(shù)據(jù)傳輸速度可以達(dá)到264MB/s@66Mhz(132MB/s@33Mhz) 。而且?guī)в械刂纷儞Q機(jī)制,可以將內(nèi)部的PCI總線地址映射到內(nèi)存或者外圍設(shè)備。 2510A的引腳定義是根據(jù)
PCI總線來(lái)命名的,因此設(shè)計(jì)者只需將S3C2510A的PCI控制引腳接出即可。 在設(shè)計(jì)中設(shè)定PCI總線的時(shí)鐘頻率為66Mhz,因此主板上PCI總線的最高傳輸速度可以達(dá)到264MB,能夠滿足數(shù)據(jù)的快速傳輸。在這里需要利用時(shí)鐘反饋來(lái)彌補(bǔ)PCI的時(shí)鐘延遲。
圖3. S3C2510A的PCI控制器時(shí)鐘反饋機(jī)制 Fig3. PCI Clock Schemes
如上圖所示,當(dāng)PCI控制器工作在PCI HOST模式下時(shí),其時(shí)鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510A有3個(gè)PCI時(shí)鐘輸出信號(hào) PCICLK1,PCICLK2和PCICLK3,將PCI設(shè)備診斷寄存器PCIDIAG0的DC3位設(shè)置為1,即將PCICLK3設(shè)置為輸出無(wú)效,此時(shí) PCICLK1與PCICLK3相連,通過PCICLK3將時(shí)鐘信號(hào)反饋給處理器內(nèi)核,這樣可以使外部PCI設(shè)備與PCI時(shí)鐘保持一致,從而彌補(bǔ)時(shí)鐘延遲 [3]。
2.2 系統(tǒng)以及PCI控制器的工作啟動(dòng)順序
系統(tǒng)上電之后,系統(tǒng)以及PCI控制器的啟動(dòng)順序如圖4所示:其中在對(duì)PCI控制器的特殊功能寄存器進(jìn)行配置時(shí)需要首先關(guān)閉中斷,即設(shè)置 PCIINTEN=0。然后設(shè)置PCI控制和狀態(tài)寄存器PCICON[ARB,ATS,SPL,IOP,MMP],某些需要的情況下還要設(shè)置PCI診斷寄存器,這個(gè)寄存器是針對(duì)測(cè)試功能的,在PCMCIA Host工作模式下不需要進(jìn)行設(shè)置。然后要對(duì)與基地址有關(guān)的寄存器PCIBAM0~1和 PCIBATPA0~2進(jìn)行設(shè)計(jì),設(shè)置完之后要配置有關(guān)PCI重啟和時(shí)鐘的寄存器,其中關(guān)鍵的一步是設(shè)置PCI重啟和時(shí)鐘寄存器 PCIRCC[MSK]=0,這是為了防止重啟信號(hào)和時(shí)鐘信號(hào)的沖突[3]。
圖4.PCI控制器及外圍設(shè)備的啟動(dòng)順序 Fig4. PCI Controller’s Booting Sequence
在PCI控制器偵測(cè)外圍設(shè)備并初始化外圍設(shè)備的寄存器時(shí),需要完成以下工作:
1) 讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等等。
2) 檢查BAR(Backup Address Register)的范圍并一一分配空間。
3) 使能外部設(shè)備并激活總線。
以上配置都是在PCI視頻處理卡的驅(qū)動(dòng)中完成的,因?yàn)橐呀?jīng)把驅(qū)動(dòng)程序加載到了uClinux的內(nèi)核中,所以系統(tǒng)啟動(dòng)之后,操作系統(tǒng)會(huì)自動(dòng)配置PCI外部設(shè)備。
3. 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的軟件主要由Boot Loader和嵌入式uClinux兩大部分組成,其中Boot Loader相當(dāng)于PC機(jī)的BIOS,是在操作系統(tǒng)內(nèi)核運(yùn)行前運(yùn)行的一段程序,其主要作用在于初始化硬件設(shè)備,建立系統(tǒng)的內(nèi)存空間映射,然后再調(diào)用操作系統(tǒng)內(nèi)核。嵌入式uClinux是這個(gè)系統(tǒng)的OS,主要包括設(shè)備驅(qū)動(dòng)程序和上層應(yīng)用程序。這里主要介紹一下移植Boot Loader的方法和uClinux中設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)。
3.1 Boot Loader的移植
Boot Loader是和硬件緊密連接的,系統(tǒng)是通過Boot Loader來(lái)調(diào)用操作系統(tǒng)內(nèi)核并最終運(yùn)行操作系統(tǒng)的。本系統(tǒng)采用了U- Boot(Universal Boot Loader,)作為Boot Loader,下面圍繞U-Boot的移植來(lái)介紹如何建立主板的 BootLoader。
U-Boot相當(dāng)于一個(gè)小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化,存儲(chǔ)空間分配等等,因此其移植工作需要認(rèn)真地閱讀相關(guān)芯片的硬件手冊(cè),在設(shè)計(jì)過程中主要完成了以下工作,相關(guān)的程序編寫可以根據(jù)U-Boot提供的例程來(lái)完成:
1) 修改Makefile配置文件,添加針對(duì)目標(biāo)板的編譯命令行。
2) 在CPU目錄下建立arm940t目錄,主要包括系統(tǒng)入口函數(shù)start.S,中斷設(shè)置函數(shù)代碼interrupts.c,CPU相關(guān)代碼文件cpu.c以及串口初始化代碼相關(guān)文件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ù)手冊(cè)來(lái)進(jìn)行的。
5) 編寫flash.c文件,根據(jù)使用的AMD的NOR Flash來(lái)編寫Flash的驅(qū)動(dòng),主要有flash芯片的型號(hào),容量大小,打印信息,flash擦除函數(shù)等。
6) 修改SDRAM的大小,只要修改前面建立的配置文件include/configs/s3c2510.h中的#define PHYS_SDRAM_SIZE 0X200000即可。其大小是根據(jù)實(shí)際應(yīng)用中SDRAM的大小來(lái)確定的。
7) 修改串口參數(shù)文件serial.c。包括設(shè)置串口波特率,其中波特率是由下式計(jì)算得出:
RUBRDIV0=( (int)(MCLK/16./(gd ->baudrate) 0.5) -1 )。
8) 修改start.S文件,一個(gè)可執(zhí)行的Image 必須有一個(gè)入口點(diǎn)并且只能有一個(gè)唯一的全局入口,通常這個(gè)入口放在Rom(flash)的0x0 地址。例如start.S 中的.globl _start_start: 。
完成上面工作后就可以將U-Boot編譯,通過Jtag口下載到目標(biāo)板進(jìn)行調(diào)試。
3.2 uClinux設(shè)備驅(qū)動(dòng)編寫
Linux的內(nèi)核是由設(shè)備管理、進(jìn)程管理、內(nèi)存管理和文件系統(tǒng)一起組成,Linux設(shè)備驅(qū)動(dòng)可以分為字符類(Character)設(shè)備,塊類(Block)設(shè)備,網(wǎng)絡(luò)接口類設(shè)備和其他非標(biāo)準(zhǔn)驅(qū)動(dòng)。其中PCI設(shè)備被看作是字符型設(shè)備[5]。
每個(gè)PCI外設(shè)都由一個(gè)總線號(hào)、一個(gè)設(shè)備號(hào)和一個(gè)功能號(hào)來(lái)標(biāo)示,共有三個(gè)訪問空間,即內(nèi)存空間、I/O端口和配置寄存器。PCI配置空間由256個(gè)字節(jié)組成,且每個(gè)設(shè)備功能都有一個(gè)配置空間,用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址?;竟δ芎瘮?shù)如下:
int pci_present(void) //檢查系統(tǒng)是否支持PCI
struct pci_dev //PCI設(shè)備的軟件對(duì)象
int pci_find_device(……)//尋找指定的PCI設(shè)備
int pci_find_class(……) //尋找指定的PCI屬類
int pci_read_config_byte(…..) //讀配置空間
int pci_write_config_byte(…..) //寫配置空間
下面通過添加系統(tǒng)的PCI設(shè)備驅(qū)動(dòng)來(lái)介紹uClinux設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)步驟:
1) 創(chuàng)建1個(gè)PCI設(shè)備,命令如下:
mknod pci_dev c 245 0
其中c表示字符設(shè)備,245表示主設(shè)備號(hào),0代表次設(shè)備號(hào)。
2) 初始化外部設(shè)備,將函數(shù)pci_dev_init()添加到uClinux/linux/drivers/char/mem.c文件的chr_dev_init()中,chr_dev_init()將在系統(tǒng)啟動(dòng)時(shí)被調(diào)用,會(huì)完成設(shè)備驅(qū)動(dòng)的初始化工作:
/*修改file_operations數(shù)據(jù)結(jié)構(gòu)*/
Struct file_operations pci_dev_fops={
read: pci_dev_read;
write:pci_dev_write;
open:pci_dev_open;
release:pci_dev_release;};
/*初始化PCI外部設(shè)備*/
Int pci_dev_init(void){
int result;
printk(“pci_dev_init()\n”);
/*設(shè)備注冊(cè)*/
result =
register_chrdev(245,”pci_dev”,&pci_dev_fops);}
3) 設(shè)備驅(qū)動(dòng)文件pci_dev.c的編寫。設(shè)備注冊(cè)接口函數(shù),中斷處理函數(shù)等構(gòu)成了PCI設(shè)備驅(qū)動(dòng)主要代碼。即file_operations中的函數(shù)。設(shè)備驅(qū)動(dòng)與內(nèi)核關(guān)系緊密,在編寫過程中需要注意庫(kù)函數(shù)的使用和I/O空間分配。在嵌入式系統(tǒng)編程過程中無(wú)法使用LibC提供的標(biāo)準(zhǔn)庫(kù)。I/O空間檢查。要根據(jù)S3C2510A的PCI配置寄存器所給定的基址來(lái)讀寫數(shù)據(jù)。因?yàn)镻CI定義的I/O空間是32位地址空間,因此,內(nèi)存和I/O可以使用相同的配置接口。
4) PCI設(shè)備的加載。
因?yàn)閡Clinux不支持設(shè)備驅(qū)動(dòng)的動(dòng)態(tài)加載,因此需要把驅(qū)動(dòng)編譯到uClinux內(nèi)核中,首先需修改makefile文件,添加下行:
obj_$(CONFIG_PCI_DEV) =pci_dev.o
接著修改config.in,添加:
bool ‘pci_dev install‘ CONFIG_ PCI_DEV,
添加這行的目的是為了在配置目標(biāo)板Linux系統(tǒng)內(nèi)核時(shí)以便對(duì)這個(gè)設(shè)備進(jìn)行選擇。
最后在目標(biāo)系統(tǒng)的makefile中添加設(shè)備節(jié)點(diǎn):
pci_dev,c,245,0
這樣在配置Linux內(nèi)核時(shí)就可以選擇pci_dev install,然后進(jìn)行編譯,這樣PCI設(shè)備驅(qū)動(dòng)就加載到了uClinux系統(tǒng)中。
4. 小結(jié)
使用該主板和PCI接口視頻處理卡組成的視頻傳輸系統(tǒng)在局域網(wǎng)內(nèi)進(jìn)行視頻傳輸時(shí)畫面流暢、畫質(zhì)清晰。帶有PCI接口的通用嵌入式主板的開發(fā)可以減少嵌入式系統(tǒng)的重復(fù)開發(fā),縮短開發(fā)周期。核心板和擴(kuò)展接口板的設(shè)計(jì)使主板的應(yīng)用更加方便、靈活,只需根據(jù)具體應(yīng)用將不同的數(shù)據(jù)處理卡與該主板結(jié)合,便能構(gòu)成不同的功能系統(tǒng),應(yīng)用于各種具體需求。
參考文獻(xiàn)
[1] 李善平.劉文峰.王煥龍.Linux與嵌入式系統(tǒng)[M].北京:清華大學(xué)出版社,2003.1-4
[2] 李貴山, 威德虎. PCI局部總線開發(fā)者指南[M]. 西安:西安電子科技大學(xué)出版社, 1997
[3] snmsung electronics. S3C2510A 32bit RISC Microprocessor user’s manual[M], 2003.3, 43-47
[4] 李駒光.聶雪媛.江澤明.王兆衛(wèi).ARM應(yīng)用系統(tǒng)開發(fā)詳解[M] .北京:清華大學(xué)出版社,2003.202-205
[5] Alessandro rubini, Jonathan corbet著,魏永明,駱剛, 姜軍譯.Linux 設(shè)備驅(qū)動(dòng)程序(第2版)[M],中國(guó)電力出版社,2002.11 502-526
提交
超越傳統(tǒng)直覺,MATLAB/Simulink助力重型機(jī)械的智能化轉(zhuǎn)型
新大陸自動(dòng)識(shí)別精彩亮相2024華南國(guó)際工業(yè)博覽會(huì)
派拓網(wǎng)絡(luò)被Forrester評(píng)為XDR領(lǐng)域領(lǐng)導(dǎo)者
智能工控,存儲(chǔ)強(qiáng)基 | ??低晭?lái)精彩主題演講
展會(huì)|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會(huì)