摘è¦ï¼šæœ¬æ–‡æå‡ºçš„æŽ¥å£è½‰æ›æ–¹æ¡ˆè§£æ±ºäº†åŒ…括USB總線ã€GPIB總線ã€ç¶²çµ¡ç‰å¹¾ç¨®é€šç”¨æ¨™æº–接å£ä¹‹é–“的相互轉æ›ã€‚本方案以嵌入å¼Linuxæ“作系統和ARM處ç†å™¨ç‚ºè»Ÿç¡¬ä»¶å¹³è‡ºï¼Œåœ¨è‡ªå‹•測試系統的應用ä¸å–得了良好的應用效果。
é—œéµå—:USB總線 GPIB總線 嵌入å¼Linux
一ã€å¼•言:
接å£ç¸½ç·šç‚ºä¸€ç¾¤äº’相連接的è¨å‚™æä¾›ä¸€ç¨®æœ‰æ•ˆçš„通信方å¼ï¼Œå®ƒæ˜¯è‡ªå‹•測試系統發展的標志,å¯ä»¥èªªæŽ¥å£ç¸½ç·šæŠ€è¡“發展的æ·å²å°±æ˜¯è‡ªå‹•測試系統發展å²,接å£ç¸½ç·šæŠ€è¡“發展的水平標志著自動測試發展的水平。
二ã€ç¡¬ä»¶ç³»çµ±è¨è¨ˆ
硬件平臺基于ARM920T的處ç†å™¨AT91RM9200,該處ç†å™¨ä¸åƒ…有è±å¯Œçš„片上資æºå’Œæ¨™æº–接å£ï¼Œè€Œä¸”有低功耗ã€ä½Žæˆæœ¬ã€é«˜æ€§èƒ½ã€æ”¯æŒå¤šç¨®ä¸»è¦çš„åµŒå…¥å¼æ“作系統ç‰ç‰¹é»žï¼Œå…¶é‡‡ç”¨5ç´šæ•´æ•¸æµæ°´ç·šçµæ§‹ï¼Œæ€§èƒ½é«˜é”200MIPS,具有標準的ARMv4å˜å„²å™¨ç®¡ç†å–®å…ƒï¼ˆMMU),內部集æˆå…©å€‹USB2.0全速(12Mb/s)主機端å£ã€ä¸€å€‹USB2.0全速(12Mb/s)器件端å£å’Œ10/100 Base-T型以太網接å£ã€‚該芯片具有多種工作模å¼ï¼Œå…¶ä½ŽåŠŸè€—å¾…æ©Ÿæ¨¡å¼ä¸‹é›»æµåƒ…3.1mA。
æ¤æ–¹æ¡ˆçš„ç¡¬ä»¶ç³»çµ±çµæ§‹è¨è¨ˆå¦‚圖1所示,主è¦åŒ…括AT91RM9200處ç†å™¨ã€GPIB模塊ã€JTAG接å£ã€ç¶²çµ¡æ¨¡å¡Šã€32M SDRAMã€16M FLASHã€ä¸²å£ã€USB主從å£ç‰éƒ¨åˆ†ã€‚å…¶ä¸GPIB模塊通éŽCPLD器件EPM1270é‚輯控制GPIB接å£èŠ¯ç‰‡NAT9914實ç¾ï¼Œç¶²çµ¡æ¨¡å¡Šé€šéŽå¤–接DM9161實ç¾10/100Mè‡ªé©æ‡‰ç¶²çµ¡é€£æŽ¥ã€‚å¦å¤–,處ç†å™¨å…§ç½®çš„雙主機收發器å¯é€£æŽ¥USBè¨å‚™ã€‚
三ã€è»Ÿä»¶ç³»çµ±è¨è¨ˆ
1.Linux系統的移æ¤
Linuxæ“作系統是å¯ä»¥é‹è¡Œåœ¨ä¸åŒé¡žåž‹è¨ˆç®—機上的一種æ“ä½œç³»çµ±çš„â€œå…§æ ¸â€ï¼Œå®ƒæä¾›å‘½ä»¤è¡Œæˆ–者程åºèˆ‡è¨ˆç®—機硬件之間接å£çš„è»Ÿä»¶æ ¸å¿ƒéƒ¨åˆ†ã€‚åµŒå…¥å¼Linux系統從軟件角度分為4å€‹å±¤æ¬¡ï¼Œåˆ†åˆ¥ç‚ºå¼•å°ŽåŠ è¼‰ç¨‹åºï¼ˆBoot Loader)ã€å…§æ ¸ã€æ–‡ä»¶ç³»çµ±å’Œç”¨æˆ¶ç¨‹åºã€‚
Boot Loader 就是在æ“ä½œç³»çµ±å…§æ ¸é‹è¡Œä¹‹å‰é‹è¡Œçš„一段å°ç¨‹åºã€‚通éŽé€™æ®µå°ç¨‹åºï¼Œå¯ä»¥åˆå§‹åŒ–硬件è¨å‚™ã€å»ºç«‹å…§å˜ç©ºé–“çš„æ˜ å°„åœ–ï¼Œå¾žè€Œå°‡ç³»çµ±çš„è»Ÿç¡¬ä»¶ç’°å¢ƒå¸¶åˆ°ä¸€å€‹åˆé©çš„狀態,以便為最終調用æ“ä½œç³»çµ±å…§æ ¸æº–å‚™å¥½æ£ç¢ºçš„環境。
本方案ä¸Linuxå…§æ ¸é‡‡ç”¨Linux2.6.16版的kernelã€‚å› ç‚ºæœ¬æ–¹æ¡ˆéœ€è¦è¨ªå•Uç›¤ï¼Œæ‰€ä»¥å…§æ ¸ä¸å¿…é ˆåŠ ä¸Šæ”¯æŒU盤的模塊,包括SCSI supportã€SCSI disk supportã€USB mass storage supportã€VFAT(windows95)supportã€MSDOS partition tablesç‰ã€‚USB器件端å£èˆ‡USB主機通信,å¯ä»¥æœ‰ä¸‰ç¨®æ–¹å¼ï¼šä¸€äº›åŠŸèƒ½æœ€å®Œå‚™çµæ§‹ä¹Ÿæœ€å¾©é›œçš„è¨å‚™ï¼Œé‡‡ç”¨ç”¨æˆ¶å®šåˆ¶çš„å…§æ ¸æ¨¡å¡Šå¯¦ç¾åœ¨æ¨™æº–USB總線上é‹è¡Œå¾©é›œçš„高級å”è°ï¼Œç”±USB主機上相應的用戶驅動程åºå’Œæ‡‰ç”¨ç¨‹åºä¾†å®Œæˆé€£æŽ¥ï¼›å¦ä¸€äº›åŸºäºŽLinux系統的USBè¨å‚™å‰‡åˆ©ç”¨USB總線來實ç¾è©²è¨å‚™èˆ‡ä¸»æ©Ÿä¹‹é–“的簡單點å°é»žä¸²è¡Œé€£æŽ¥ï¼Œä¸»æ©Ÿä¸Šçš„æ‡‰ç”¨ç¨‹åºå¯¦éš›ä¸Šæ˜¯åˆ©ç”¨äº†ä¸»æ“作系統所æä¾›çš„USB編程接å£ï¼Œä½†å¯¦ç¾çš„æ˜¯ä¸²è¡Œé€šä¿¡å”è°ï¼›æœ€åŽä¸€ç¨®æ˜¯è¨å‚™å°‡ä¸»è¨ˆç®—機作為網關,將USBè¨å‚™é€£æŽ¥åˆ°è¾¦å…¬å±€åŸŸç¶²æˆ–互è¯ç¶²ä¸Šï¼Œå¾žè€ŒUSBè¨å‚™æ§‹æˆäº†ä¸€å€‹æ¨¡æ“¬ä»¥å¤ªç¶²æŽ¥å£ã€‚本方案采用最åŽä¸€ç¨®æ–¹å¼ï¼Œé…ç½®äº†å…§æ ¸ä¸çš„USB RNDIS gadget模塊,該模塊利用USB接å£ä½œç‚ºç‰©ç†åª’介,模擬出一個虛構的以太網è¨å‚™ã€‚
文件系統是用戶模å¼é€²ç¨‹èˆ‡å…§æ ¸æ¨¡å¼é€²ç¨‹äº¤äº’çš„ç´å¸¶ï¼Œåˆ¶ä½œå…·æœ‰ç‰¹å®šçš„功能的文件系統是移æ¤åµŒå…¥å¼ç³»çµ±ä¸å¯ç¼ºå°‘的部分。本方案利用Busyboxè»Ÿä»¶å·¥å…·åŒ…æ§‹é€ EXT2文件系統,æ¤è»Ÿä»¶åŒ…集æˆäº†Linuxå¸¸ç”¨å‘½ä»¤ï¼Œå¯æ ¹æ“šéœ€æ±‚è£æ¸›ï¼Œæ¥µå¤§çš„æ–¹ä¾¿äº†åµŒå…¥å¼ç³»çµ±çš„開發。
2.應用程åºçš„具體實ç¾
數據在多個接å£ä¹‹é–“的轉æ›ä¸»è¦æ˜¯åœ¨ç”¨æˆ¶æ…‹çš„æ‡‰ç”¨ç¨‹åºä¸å¯¦ç¾ã€‚æ¤æ‡‰ç”¨ç¨‹åºä¸»è¦å®Œæˆçš„功能是兩個USB主å£ï¼ˆä¸€å€‹æŽ¥USB儀器,一個接U盤)ã€ä¸€å€‹USB從å£ã€GPIBå£å’Œç¶²å£ä¹‹é–“的數據交æ›ã€‚程åºè‡ªå‹•æª¢æ¸¬æŽ¥å£æ˜¯å¦è™•äºŽé€£æŽ¥ç‹€æ…‹ï¼šå¦‚æžœæ˜¯ï¼Œä¾¿ç›£è½æ˜¯å¦æœ‰æ•¸æ“šéœ€è¦å‚³é€ï¼Œå¹¶å°‡ç›£è½åˆ°çš„æ•¸æ“šå‚³çµ¦å…¶ä»–處于連接狀態的接å£ã€‚整個應用程åºçš„æ¡†æž¶å¦‚圖2所示。

3.å„個å進程的功能如下:
å進程1:USB從å£çš„實ç¾ä¸»è¦ä¾é å…§æ ¸ä¸çš„USB RNDIS gadget模塊的支æŒï¼Œç•¶USB從å£é€£æŽ¥è‡³PC時,在PC上模擬以太網接å£ï¼Œç”¨TCP/IP網絡å”è°å‚³è¼¸æ•¸æ“šï¼›
å進程2:USB主å£1專用于USBè¨å‚™çš„USB端å£ï¼›
å進程3:USB主å£2專用于U盤,將U盤實際連接,當有數據傳給U盤時,便在Linuxæ“作系統上掛載U盤,并以二進制方å¼å°‡æ•¸æ“šå˜å„²åˆ°U盤的linux.txt文件ä¸ï¼Œ15s內沒有數據傳輸就會å¸è¼‰U盤;
å進程4ï¼šç¶²å£æ˜¯ä»¥TCP/IP網絡å”è°å‚³è¼¸æ•¸æ“šã€‚å進程1å’Œå進程4分別實ç¾äº†ç¶²çµ¡æœå‹™å™¨åŠŸèƒ½ï¼›
å進程5:在Linuxæ“作系統ä¸ç‚ºGPIB壿º–備䏀個䏿–·ä¾‹ç¨‹ï¼Œç•¶GPIB壿œ‰å‹•ä½œæ™‚ï¼Œæœƒé¦–å…ˆç”¢ç”Ÿä¸€å€‹ä¸æ–·ï¼Œæ‡‰ç”¨ç¨‹åºç«‹å³è·³è½‰ä¸æ–·è™•ç†åŸ·è¡Œç¨‹åºç›¸é—œæ“作。
由于接å£ç¸½ç·šå”è°çš„è§£æžéƒ½åœ¨Linuxé©…å‹•ä¸å®Œæˆï¼Œæ‰€ä»¥å進程間的數據傳輸直接代表了接å£ç¸½ç·šçš„通信。å進程創建了自己專用的管é“FIFO,以完æˆé€²ç¨‹é–“的數據交æ›ã€‚
æ¯å€‹å進程都有一個主線程,完æˆç«¯å£çš„連接狀態檢測,主線程的æµç¨‹åœ–如圖3所示。端å£è¼¸å‡ºæ•¸æ“šçš„處ç†ä¸»è¦ç”±ç·šç¨‹readfifo完æˆï¼Œå®ƒè®€å–該進程的專用管é“FIFO的數據,如果從FIFOä¸è®€åˆ°äº†æ•¸æ“šï¼Œå¹¶ä¸”該端å£é€£æŽ¥æ¨™å¿—ä½flag為1(表示該端å£è™•äºŽé€£æŽ¥ç‹€æ…‹ï¼‰ï¼Œä¾¿å°‡æ¤æ•¸æ“šå¡«å…¥è©²ç«¯å£çš„輸出緩沖å€ï¼Œå¦å‰‡å°‡è®€åˆ°çš„æ•¸æ“šèˆåŽ»ã€‚ç«¯å£è¼¸å…¥æ•¸æ“šçš„處ç†ç”±å¦ä¸€å€‹ç·šç¨‹å®Œæˆï¼Œå¦‚果該端å£è™•于連接狀態,主線程就會創建該å線程實時讀å–該端å£çš„輸入數據,并將數據通éŽå°ˆç”¨ç®¡é“傳給其他進程。

在整個應用程åºä¸ï¼Œå„個端å£çš„æ•¸æ“šè½‰ç™¼åˆ©ç”¨äº†Linux進程間的數據通信技術。æ¯å€‹ç«¯å£éƒ½è¨ç½®äº†ä¸€å®šå¤§å°çš„æ•¸æ“šç·©æ²–å€ï¼Œä½¿æ•¸æ“šèƒ½å¤ 連續發é€è€Œä¸å—å¤–åœæŽ§åˆ¶å™¨é€Ÿåº¦çš„å½±éŸ¿ï¼ŒæŽ¥æ”¶æ•¸æ“šå¯é ,并盡å¯èƒ½æ¸›å°‘了錯誤接收和錯誤判斷的å¯èƒ½æ€§ã€‚
å››ã€çµèªž
本文介紹了基于AT91RM9200平臺和嵌入å¼Linux的一種接å£è½‰æ›å¡çš„軟硬件è¨è¨ˆï¼Œå®ƒå¯¦ç¾äº†USBã€GPIB和網絡之間的數據通信。æ¤è½‰æ›å¡å…·æœ‰å»£æ³›çš„實際應用價值,如PC通éŽç¶²çµ¡é 程控制USBè¨å‚™æˆ–GPIB主機控制USBè¨å‚™ç‰ç‰ã€‚ç›®å‰æœ¬æ–¹æ¡ˆå·²æˆåŠŸæ‡‰ç”¨äºŽç¤ºæ³¢å™¨çš„æŽ¥å£æ“´å±•ï¼Œäº‹å¯¦è‰æ˜Žè©²æ–¹æ¡ˆèƒ½å¤ 為組建接å£ç¸½ç·šç¹å¤šçš„自動測試系統æä¾›å¹«åŠ©ï¼Œå–得了良好的效果。