引言
目前,USB 設(shè)備產(chǎn)品的應(yīng)用非常廣泛,但市場上能夠提供Host/Slave兩種模式的USB控制芯片并不多,本系統(tǒng)采用CYPRESS公司的SL811HST芯片作為USB接口的控制芯片,實(shí)現(xiàn)Host/Slave兩種工作模式。
系統(tǒng)介紹
本系統(tǒng)是以三星公司的S3C44B0X為嵌入式處理器,mClinux為操作系統(tǒng)的專用PDA,通過無線方式實(shí)現(xiàn)與上位機(jī)的通信,同時(shí)也可通過USB接口直接控制USB打印機(jī)輸出。其中USB控制芯片采用CYPRESS公司的SL811HST芯片,它有兩種工作模式Host/Slave。模式的改變是由該芯片M/S腳的電平值決定,其值可以通過軟件設(shè)置來改變。當(dāng)置M/S腳為低電平時(shí),它是Host模式,可以直接控制打印機(jī);當(dāng)置M/S腳為高電平時(shí),它是Slave模式,可以下載PC的最新資料,同時(shí)可對(duì)PDA充電電池充電。
硬件設(shè)計(jì)
三星公司的S3C44B0X是一款專為手持設(shè)備和通用設(shè)備而設(shè)計(jì)的,16/32位RISC 結(jié)構(gòu)的嵌入式處理器。
CYPRESS公司的SL811HST是嵌入式的USB 主機(jī)或外設(shè)接口控制器。其基本功能如下:
1) 支持USB 1.1 的全速和低速設(shè)備;
2) 虛擬的外部總線,使得僅需占用和外接CPU 的1 根地址線A0,數(shù)據(jù)線為8位;
3) 16 個(gè)內(nèi)部寄存器,可以對(duì)USB Host 進(jìn)行充分的控制;內(nèi)部多達(dá)256 字節(jié)的RAM,為USB 傳輸建立了足夠的緩沖區(qū);
4) 操作電壓為3.3V,但是I/O 端口為5V Tolerant,因此可以自由地和5V 或3.3V 的CPU 系統(tǒng)連接;
5) 可接12MHz 或48MHz外置晶振,對(duì)其操作通過16個(gè)寄存器來完成。
GPE5是Host/Slave模式控制管腳,它同時(shí)同步控制USB接口的負(fù)載方式。GPE4口可以監(jiān)視USB接口上是否有主USB設(shè)備插入,如果有,VUSB為高電平;沒有則為低電平。GPE3口用于顯示USB設(shè)備是否處于就緒或相應(yīng)的Host/Slave模式工作狀態(tài)
軟件設(shè)計(jì)
在Linux操作系統(tǒng)中,驅(qū)動(dòng)程序的加載方式為:
1) 將驅(qū)動(dòng)程序作為可加載的模塊(Module),在系統(tǒng)超級(jí)用戶(Root)權(quán)限下使用insmod命令動(dòng)態(tài)加載,使之成為系統(tǒng)核心的一部分。對(duì)于USB 設(shè)備而言,由于可熱插拔,一般采用模塊化的設(shè)備驅(qū)動(dòng)程序。
2) 將設(shè)備驅(qū)動(dòng)程序的源代碼加進(jìn)系統(tǒng)內(nèi)核,編譯移植到嵌入式系統(tǒng),系統(tǒng)啟動(dòng)后將自動(dòng)加載驅(qū)動(dòng)。USB 協(xié)議棧程序一般采用這種方法加入內(nèi)核,進(jìn)而產(chǎn)生一個(gè)叫做“USB 核心”的子系統(tǒng)。這個(gè)子系統(tǒng)提供了許多數(shù)據(jù)結(jié)構(gòu)、宏定義、功能函數(shù)和應(yīng)用程序接口(API)來對(duì)硬件或設(shè)備進(jìn)行支持。
本系統(tǒng)就是采用第二種方式加載USB驅(qū)動(dòng)的。由于本系統(tǒng)的mClinux包來自于英蓓特公司的包,因此節(jié)省了很多工作,具體編譯過程如下:
1) 在mClinux內(nèi)核的USB驅(qū)動(dòng)目錄中添加如下三個(gè)文件:sl811h-usb.c 、sl811h.h、 sl811husb.h。這兩個(gè)頭文件中主要定義了一些關(guān)于811HS/T寄存器的宏。
2) 編輯/uclinux-s3cev40/linux-2.4.x/drivers/usb/config.in文件。
首先在config.in文件開頭添加如下語句:
dep_tristate ‘Support for USB’ CONFIG_USB $CONFIG_PCI
if [ “$CONFIG_USB” = “y” -o? “$CONFIG_USB” = “m” ]; then
?? bool ‘? USB verbose debug messages’ CONFIG_USB_DEBUG
comment ‘Miscellaneous USB options’
?? bool ‘? Preliminary USB device filesystem’ CONFIG_ USB_DEVICEFS
?? if [ “$CONFIG_ EXPERIMENTAL” = “y” ]; then
????? bool ‘? Enforce USB bandwidth allocation (EXPERIMENTAL)’ CONFIG_USB_BANDWIDTH
?? else
??? define_bool CONFIG_USB_ BANDWIDTH n
?? fi
?? bool ‘? Long timeout for slow-responding devices (some MGE Ellipse UPSes)’ CONFIG_USB_ LONG_TIMEOUT
fi
然后在makefile文件中添加
ifeq ($(CONFIG_USB_ DEBUG),y)
?????? L_OBJS+=sl811h-usb.o
endif
最后在/uclinux-s3cev40/linux-2.4.x/drivers/usb/sl811h_usb.c文件中添加如下代碼:
#ifdef CONFIG_USB_DEBUG
?????? #define DEBUG
#else
?????? #undef DEBUG
#endif
#SL811HS/T----- USB Host Controller driver
INCLUDEDIR = /usr/src/linux/include
CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -
static -I$(INCLUDEDIR)
VER = $(shell awk -F\“ ‘/REL/ {print $$2}’
$(INCLUDEDIR)/linux/version.h)
all:sl811h-usb.o
sl811h-usb.o:sl811h-usb.csl811h-usb.hsl811h.h
gcc sl811h-usb.c -c $(CFLAGS)
# End this file
3) 在/usr/local/src/uClinux-s3cev40/fs/dev中增加一個(gè)設(shè)備文件。因?yàn)閁SB設(shè)備主要都是通過快速串行通訊來讀寫數(shù)據(jù), 故一般作為字符設(shè)備。在/usr/local/src/uClinux-s3cev40/fs/devfs 下執(zhí)行:
mknod usb0 c 127 0
mknod usb1 c 127 1
4) 執(zhí)行make xconfig,用戶內(nèi)核設(shè)置選擇y。
5) 執(zhí)行make dep。
6) 執(zhí)行make。USB設(shè)備驅(qū)動(dòng)程序被編譯進(jìn)mClinux內(nèi)核,包含在image.bin文件中。
在嵌入式系統(tǒng)啟動(dòng)時(shí),USB設(shè)備驅(qū)動(dòng)就自動(dòng)執(zhí)行了。
結(jié)語
本設(shè)計(jì)以mClinux嵌入式操作系統(tǒng)為平臺(tái),充分發(fā)揮了SL811HST芯片的Host/Slave兩種模式的作用,使其在實(shí)際使用中非常方便。隨著嵌入式USB設(shè)備Host/Slave模式的研發(fā),USB設(shè)備的使用會(huì)更加普及。
責(zé)任編輯:gt
-
處理器
+關(guān)注
關(guān)注
68文章
19100瀏覽量
228813 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
302015 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6684瀏覽量
123140
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論