????半導(dǎo)體后封裝工藝中關(guān)鍵設(shè)備劃片機(jī)" title="劃片機(jī)">劃片機(jī)是通過主軸高速旋轉(zhuǎn),、y向精密分度定位、x向?qū)к壐咚龠\(yùn)動(dòng),、θ向多角度旋轉(zhuǎn)實(shí)現(xiàn)對多個(gè)芯片圖形劃分加工的設(shè)備,??捎糜诠杓呻娐贰AW器件,、Ga/As,、鈮酸鋰、銻化鉍,、厚膜電路,、磷化銦等特種材料和脆硬材料晶片的劃切分片。
????a鑒于在精密劃片機(jī)檢測系統(tǒng)的檢測速度和精度上的要求,,需要分辨率較高的CCD攝像機(jī)對劃切圖像進(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ī)視覺單元是通過對圖像實(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ù)后便對模擬數(shù)據(jù)進(jìn)行編碼,處理后的數(shù)據(jù)通過 S3C2510內(nèi)部AHB總線傳輸?shù)絊DRAM,,主控管理單元利用主板上嵌入式Linux系統(tǒng)中的視頻服務(wù)程序使用解碼播放器即可對晶圓監(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所示,。其中在對PCI控制器的特殊功能寄存器進(jìn)行配置時(shí)需要首先關(guān)閉中斷,,即設(shè)置PCIINTEN=0。然后設(shè)置PCI控制和狀態(tài)寄存器PCICON[ARB,,ATS,,SPL,IOP,,MMP],,某些需要的情況下還要設(shè)置PCI診斷寄存器,這個(gè)寄存器是針對測試功能的,,在PCMCIA?Host工作模式下不需要進(jìn)行設(shè)置,。然后要對與基地址有關(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配置文件,,添加針對目標(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,,對寄存器的定義等系統(tǒng)配置,,大部分工作是參考S3C25l0的數(shù)據(jù)手冊來進(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è)備注冊接口函數(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í)以便對這個(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)核針對數(shù)碼攝像頭等視頻設(shè)備提供V4L函數(shù)接口,,V4L提供針對視頻設(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)存一樣對文件訪問,。訪問時(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ī)等不便利因素,。