????半導(dǎo)體后封裝工藝中關(guān)鍵設(shè)備劃片機(jī)" title="劃片機(jī)">劃片機(jī)是通過主軸高速旋轉(zhuǎn)、y向精密分度定位、x向?qū)к壐咚龠\(yùn)動(dòng)、θ向多角度旋轉(zhuǎn)實(shí)現(xiàn)對(duì)多個(gè)芯片圖形劃分加工的設(shè)備??捎糜诠杓呻娐贰AW器件、Ga/As、鈮酸鋰、銻化鉍、厚膜電路、磷化銦等特種材料和脆硬材料晶片的劃切分片。
????a鑒于在精密劃片機(jī)檢測系統(tǒng)的檢測速度和精度上的要求,需要分辨率較高的CCD攝像機(jī)對(duì)劃切圖像進(jìn)行快速提取。PC-Based產(chǎn)品的硬件技術(shù)已經(jīng)實(shí)現(xiàn),但PC結(jié)構(gòu)中仍存在諸多因素影響劃片機(jī)的實(shí)際使用,如硬盤可能出現(xiàn)的機(jī)械故障、風(fēng)扇帶來的不穩(wěn)定因素、抗震性能指標(biāo),抗干擾指標(biāo)等等,這些因素依然是制約IPC(PC工控機(jī))應(yīng)用于半導(dǎo)體設(shè)備的問題之一。通過引入嵌入式硬件方案解決了這個(gè)難題,同時(shí)也大大降低了成本。
????基于嵌入式硬件平臺(tái)的精密劃片機(jī)硬件部分采用主從式雙CPU結(jié)構(gòu)模式,主CPU為ARM處理器。精密劃片機(jī)控制主體由3個(gè)單元構(gòu)成:監(jiān)控管理單元、四軸運(yùn)動(dòng)控制單元和劃片機(jī)視覺單元。劃片機(jī)視覺單元是通過對(duì)圖像實(shí)時(shí)采集來監(jiān)測晶圓劃切過程;監(jiān)控管理單元主要功能是監(jiān)測設(shè)備運(yùn)行、設(shè)置加工參數(shù)等;四軸運(yùn)動(dòng)控制單元是采用專用運(yùn)動(dòng)控制芯片,接收S3c2510傳遞的參數(shù)來直接控制電機(jī)完成運(yùn)動(dòng)控制。
????視覺采集系統(tǒng)基于的PCI總線具備32Bit數(shù)據(jù)總線,時(shí)鐘頻率可達(dá)66?MHz,最快傳輸速率達(dá)到264?MB/s,能夠滿足劃片機(jī)視覺系統(tǒng)需要,設(shè)計(jì)的核心板擴(kuò)展2個(gè)PCI插槽。嵌入式設(shè)備需編寫PCI設(shè)備的驅(qū)動(dòng)程序?qū)F(xiàn)有的PCI設(shè)備應(yīng)用到嵌入式主板中。
????劃片機(jī)的視覺采集系統(tǒng)由光學(xué)照明系統(tǒng)、CCD攝像器件、圖像處理軟件等部分構(gòu)成,視覺系統(tǒng)構(gòu)成見圖1。
????
2?硬件電路設(shè)計(jì)
????根據(jù)PCI系統(tǒng)的總線拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)了劃片圖像采集系統(tǒng)的硬件結(jié)構(gòu)。其中的攝像頭,根據(jù)劃片機(jī)視覺的要求選用35萬像素的PCI接口的圖像采集模塊" title="圖像采集模塊">圖像采集模塊。
????系統(tǒng)主處理器采用三星公司的S3C25lO,考慮到S3C2510內(nèi)置PCI控制器,擴(kuò)展的2塊PCI接口可分別和四軸嵌入式運(yùn)動(dòng)控制芯片MCX314As和圖像采集模塊連接。系統(tǒng)框圖見圖2。
????芯片為ARM?940T內(nèi)核,最高運(yùn)行頻率可達(dá)200?MHz,芯片內(nèi)置的SDRAM控制器、PCI控制器、USB控制器和10M/100M以太網(wǎng)控制器等一系列接口控制器。滿足精密劃片機(jī)的實(shí)時(shí)控制要求,主板的外部時(shí)鐘源為10?MHz,通過S3C2510的4個(gè)內(nèi)置倍頻率器,設(shè)置引腳 CLKMOD0、CLKMODl、CPU_?FREQl、BUS_?FREQ0為高;設(shè)置引腳CPUFREQ0、CPU_FREQ2、 BUS_FREQl、BUS_?FREQ2為低,使系統(tǒng)內(nèi)核運(yùn)行頻率為133MHz,PCI設(shè)備運(yùn)行頻率為66?MHz,USB設(shè)備運(yùn)行頻率為 48?MHz。圖3是S3C2510的PCI插槽圖。
????系統(tǒng)上電后,PCI插槽上圖像采集模塊將等待CCD攝像頭模擬信號(hào)的輸入,當(dāng)圖像采集模塊得到模擬數(shù)據(jù)后便對(duì)模擬數(shù)據(jù)進(jìn)行編碼,處理后的數(shù)據(jù)通過 S3C2510內(nèi)部AHB總線傳輸?shù)絊DRAM,主控管理單元利用主板上嵌入式Linux系統(tǒng)中的視頻服務(wù)程序使用解碼播放器即可對(duì)晶圓監(jiān)測劃切。
????S3C2510?ARM處理器,內(nèi)部PCI(MINI-PCI)&PC?Card控制器符合PCI總線規(guī)范2.2版本,將S3C2510 的PCI(MINI-PCI)&PC?Card控制器設(shè)置為PCI?Host工作模式(見表1),具有32bit地址/數(shù)據(jù)復(fù)用總線,支持非線性傳輸和突發(fā)傳輸,最高數(shù)據(jù)傳輸速度可以達(dá)到264?MB/s及66?MHz(132?MB/s及33?MHz)。而且?guī)в械刂纷儞Q機(jī)制,可以將內(nèi)部的 PCI總線地址映射到內(nèi)存或者外圍設(shè)備。在設(shè)計(jì)中設(shè)定PCI總線的時(shí)鐘頻率為66?MHz,因此主板上PCI總線的最高傳輸速度可以達(dá)到 264?MB/s,能夠滿足數(shù)據(jù)的快速傳輸。系統(tǒng)利用時(shí)鐘反饋來彌補(bǔ)PCI的時(shí)鐘延遲。
????當(dāng)PCI控制器工作在PCI?HOST、模式下時(shí),其時(shí)鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510有3個(gè)PCI時(shí)鐘輸出信號(hào) PCICLK1,PCICLK2和PCILK3,將PCI設(shè)備診斷寄存器PCIDIAG0的DC3位設(shè)置為l,即將PCICLK3設(shè)置為輸出無效,此時(shí) PCICLK1與PCICLK3相連,通過PCICLK3將時(shí)鐘信號(hào)反饋給處理器內(nèi)核,這樣可以使外部PCI設(shè)備與PCI時(shí)鐘保持一致,從而彌補(bǔ)時(shí)鐘延遲。
????系統(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ì)測試功能的,在PCMCIA?Host工作模式下不需要進(jìn)行設(shè)置。然后要對(duì)與基地址有關(guān)的寄存器PCIBAM0~l和PCI-BATPA0~2進(jìn)行設(shè)計(jì),設(shè)置完之后要配置有關(guān)PCI重啟和時(shí)鐘的寄存器,其中關(guān)鍵的一步是設(shè)置PCI重啟和時(shí)鐘寄存器PCIRCC[MSK]=0,這是為了防止重啟信號(hào)和時(shí)鐘信號(hào)的沖突。
????在PCI控制器偵測外圍設(shè)備并初始化外圍設(shè)備的寄存器時(shí),需要完成以下工作:
????(1)讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等;
????(2)檢查BAR(Backup?Address?Register)的范圍并一一分配空間;
????(3)使能外部設(shè)備" title="外部設(shè)備">外部設(shè)備并激活總線。
????以上配置都是在PCI圖像采集模塊的驅(qū)動(dòng)中完成的,因?yàn)橐呀?jīng)把驅(qū)動(dòng)程序加載到了ARM?Linux的內(nèi)核中,所以系統(tǒng)啟動(dòng)之后,操作系統(tǒng)會(huì)自動(dòng)配置PCI外部設(shè)備。
3?ARM?Linux移植和設(shè)備驅(qū)動(dòng)" title="設(shè)備驅(qū)動(dòng)">設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)
3.1?Boot?Loader的移植
????Boot?Loader是和硬件緊密連接的,系統(tǒng)是通過Boot?Loader。來調(diào)用操作系統(tǒng)內(nèi)核并最終運(yùn)行操作系統(tǒng)。本系統(tǒng)采用了U- Boot(Universal?Boot?Loader)作為。Boot?Loader,U-Boot相當(dāng)于一個(gè)小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化、存儲(chǔ)空間分配等,在設(shè)計(jì)過程中主要完成了以下工作,相關(guān)的程序編寫根據(jù)U-Boot提供的例程來完成:
(1)修改Makefile配置文件,添加針對(duì)目標(biāo)板的編譯命令行;
(2)在CPU目錄下建立arm940t目錄,主要包括中斷設(shè)置函數(shù)代碼interrupts9c,系統(tǒng)入口函數(shù)start.S,CPU相關(guān)代碼文件cpu.c以及串口初始化代碼相關(guān)文件serial.c等;
(3)在Board目錄下建立S3C2510目錄,主要包括FLASH初始化代碼flash.c,連接器文件u-boot.1ds,內(nèi)存分配代碼memsetup.S等;
(4)編寫配置文件,即:include/configs/s3c25?l0.h,對(duì)寄存器的定義等系統(tǒng)配置,大部分工作是參考S3C25l0的數(shù)據(jù)手冊(cè)來進(jìn)行的;
(5)編寫flash.c文件,根據(jù)使用的AMD的NOR?Flash來編寫Flash的驅(qū)動(dòng),包括flash芯片的型號(hào),打印信息,容量大小,flash擦除函數(shù)等;
(6)修改SDRAM的大小,修改配置文件in-clude/configs/s3c25?10.h?中?的?#define?PHYS?_SDRAM_?SIZE值。其大小是根據(jù)實(shí)際應(yīng)用中SDRAM的大小來確定;
(7)修改串口參數(shù)文件serial.C。主要是設(shè)置串口波特率,波特率計(jì)算公式為:RUBRDIVO=((int)(MCLK/16./(gd_>baudrate)+0.5)-1);
(8)修改start.S文件,一個(gè)可執(zhí)行的Image必須有一個(gè)入口點(diǎn)并且只能有一個(gè)唯一的全局入口,修改start.S中的.globl?_start?_start:使其放在Rom(flash)的0×0地址。編譯U-Boot,通過Jtag口下載到目標(biāo)板進(jìn)行調(diào)試。
3.2?ARM?Linux設(shè)備驅(qū)動(dòng)編寫
????Linux的內(nèi)核是由設(shè)備管理、進(jìn)程管理、文件系統(tǒng)和內(nèi)存管理一起組成,Linux設(shè)備驅(qū)動(dòng)可以分為字符類設(shè)備,網(wǎng)絡(luò)接口類設(shè)備,塊類設(shè)備和其他非標(biāo)準(zhǔn)驅(qū)動(dòng)。PCI設(shè)備被看作是字符型設(shè)備。每個(gè)PCI外設(shè)都由一個(gè)總線號(hào)、一個(gè)設(shè)備號(hào)和一個(gè)功能號(hào)來標(biāo)示,共有3個(gè)訪問空間,即I/O" title="I/O">I/O端口、內(nèi)存空間和配置寄存器。PCI配置空間由256個(gè)字節(jié)組成,且每個(gè)設(shè)備功能都有一個(gè)配置空間,用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址。
????添加系統(tǒng)的PCI設(shè)備驅(qū)動(dòng)主要步驟:
(1)創(chuàng)建1個(gè)PCI設(shè)備,命令:mknod?pci_dev?c247?0,其中c表示字符設(shè)備,247表示主設(shè)備號(hào),0代表次設(shè)備號(hào)。
(2)初始化外部設(shè)備,將函數(shù)pci_?dev_?init()添加到ARMlinux/linux/drivers/chal/mem.c文件的 chr?_dev_?init()中,chr?_dev?_init()將在系統(tǒng)啟動(dòng)時(shí)被調(diào)用,會(huì)完成設(shè)備驅(qū)動(dòng)的初始化工作:
(3)設(shè)備驅(qū)動(dòng)文件pci__dev.c的編寫。設(shè)備注冊(cè)接口函數(shù),中斷處理函數(shù)等構(gòu)成了PCI設(shè)備驅(qū)動(dòng)主要代碼。即file_operationgs根據(jù)S3C2510的PCI配置寄存器所給定的基址來讀寫數(shù)據(jù)。PCI定義的I/O空間是32位地址空間,內(nèi)存和I/O可使用相同的配置接口。
(4)PCI設(shè)備的加載。ARMlinux不支持設(shè)備驅(qū)動(dòng)的動(dòng)態(tài)加載,因此需要把驅(qū)動(dòng)編譯到ARM?Linux內(nèi)核中,首先需修改makefile文件,添加下行:obj_$(CONFIG_?PCI_?DEV)+=pci?_dev.o接著修改 config.in,?添?加?:bool'pci?_dev?install'CONFIGPCI?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,247,0這樣在配置Linux 內(nèi)核時(shí)就可以選擇pci_dev?install,然后進(jìn)行編譯,這樣PCI設(shè)備驅(qū)動(dòng)就加載到了ARM?Linux系統(tǒng)中。
4?主控單元圖像采集編程
????內(nèi)核針對(duì)數(shù)碼攝像頭等視頻設(shè)備提供V4L函數(shù)接口,V4L提供針對(duì)視頻設(shè)備進(jìn)行基本的I/O操作的接口函數(shù)如:open、read、write、 close,中斷處理,內(nèi)存映射及I/O通道的控制ioctl等,并定義在struct?file_operations數(shù)據(jù)結(jié)構(gòu)體中。當(dāng)應(yīng)用程序?qū)υO(shè)備進(jìn)行諸如open、read、Write、close等系統(tǒng)調(diào)用操作時(shí),內(nèi)核將通過file_operation結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)接口.具體的采集程序如下:
PCI接口視頻采集流程如圖5所示。
????V4L為視頻采集圖像提供兩種方案①:read()直接讀取,②:mmap()內(nèi)存映射。read()通過內(nèi)存緩沖區(qū)來讀取數(shù)據(jù);而mmap()通過把設(shè)備內(nèi)存映射到用戶進(jìn)程地址空間中,繞過內(nèi)核緩沖區(qū),所以mmap()方式加速I/O訪問。另外mmap()系統(tǒng)調(diào)用使用進(jìn)程間通過映射同一文件實(shí)現(xiàn)共享內(nèi)存,各進(jìn)程可像訪問普通內(nèi)存一樣對(duì)文件訪問。訪問時(shí)只需要指針而不用調(diào)用文件操作函數(shù).因此用mmap()采集圖像。初始化函數(shù)(camera_pict_init,canera_mmap?_init.camera_get_mbuf和采集圖像函數(shù)(camera_grap- image)介紹如下:
5?結(jié)語
????高速實(shí)時(shí)圖像數(shù)據(jù)的處理和傳輸是劃片自動(dòng)化的基礎(chǔ)和精度效率的重要保證?;谕獠吭O(shè)備互連PCI總線嵌入式視覺系統(tǒng),選用了高性能的ARM處理器,嵌入可配置ARMLINUX操作系統(tǒng),可高效的完成劃切要求。整個(gè)系統(tǒng)具有高可靠性,擴(kuò)展能力強(qiáng),避免傳統(tǒng)工控機(jī)的病毒、補(bǔ)丁、死機(jī)等不便利因素。