基于ARM的遠距離便攜式無線傳輸系統
2 USB及Linux USB驅動
2.1 USB的基本原理
USB是一種快速、雙向的串行接口,它采用總線拓撲結構,其主控制器通過USB集線器可擴展主機的sub端口。USB具有4種傳輸方式:控制傳輸、中斷傳輸、批量傳輸、等時傳輸。其數據的通信是雙向的,數據從主機傳向USB設備稱下行通信,數據從USB設備傳向主機稱上行通信??刂茩嗍窃趆ost方,不支持設備間的直接通信。
USB設備是由接口和端點構成的,端點是USB通信最基本的形式,它只能往一個方向傳送數據。接口是用來綁定到設備上的,一個接口只處理一種USB邏輯連接。一個USB設備可以有多個接口,不同的接口可以代表不同的功能。USB驅動程序是綁定到接口上的。此外,一個USB設備通常又有多個配置的,而且可以在配置之間切換以改變設備的狀態(tài);但是一個時刻只能激活一個配置,一個配置通常具有一個或者更多的接口,如圖3所示。本文引用地址:http://2s4d.com/article/150321.htm
2.2 基于Linux的USB驅動
由于數據記錄的USB接口采用FTDI公司開發(fā)的FT245 USB芯片,能單芯片實現并行FIFO緩存區(qū)的雙向數據傳輸,且支持VCP(虛擬串口)功能。本文以實際應用出發(fā),針對FT245芯片介紹Linux環(huán)境下的USB驅動程序。
在Linux的內核源碼中有一個USB驅動的框架程序,文件名為usb-skeleton.c,目錄在/drivers/usb下,大多數的USB驅動都是在這個框架的基礎上修改的。這里針對FT245芯片修改這個USB驅動的框架程序。
USB驅動程序中有兩個宏:
這兩個宏的值是USB芯片制造商所提供的,VID是芯片制造商ID,PID是芯片的識別碼,不同廠商不同型號的USB芯片的VID和PID是不同的,FT245芯片的VID=0x0403,PID=0x6001。
file_operation是驅動程序中一個很重要的類,它定義了一組常見文件I/O函數,而這些函數的使用類似于普通文件的I/O操作。程序如下:
這里定義的函數是USB驅動程序的入口點,要打開USB設備時,使用系統函數Open(),系統就會自動調用驅動中的ft245_open()函數。其他函數類似,如write()對應ft245_write(),rcad()對應ft245_rcad(),close()對應ft245_release()。
評論