999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ARM-Linux平臺的USB數據存儲設計與實現

2019-04-04 03:17:40焦新泉袁小康儲成群
現代電子技術 2019年6期
關鍵詞:數據存儲

焦新泉 袁小康 儲成群

關鍵詞: USB; 數據存儲; ARM?Linux; Libusb庫; CY7C68013; 接口函數

中圖分類號: TN919?34; TP273 ? ? ? ? ? ? ? ? 文獻標識碼: A ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2019)06?0006?04

Abstract: The ARM microcontroller carried with the embedded Linux system can be taken as a handheld terminal to complete some complicated interaction functions on the personnel computer. The basic methods of data storage are implemented by driving the USB control chip CY7C68013 based on the Libusb library under the ARM?Linux platform. The direct access to the USB device CY7C68013 in the user space is realized based on the Libusb library under the ARM?Linux platform. The USB device development without any driver under the Linux can be realized by recalling the interface function provided by the Libusb library, during which the development personnel do not need to understand the complex USB protocol and Linux kernel mechanism.

Keywords: USB; data storage; ARM?Linux; Libusb library; CY7C68013; interface function

0 ?引 ?言

USB控制器在數據采集系統具有廣泛的應用,通常將獲取到的數據保存至PC機進行處理。隨著嵌入式設備的日趨成熟,應用更加便攜、靈活的嵌入式平臺代替PC平臺接收數據并進行分析成為可能。為此,以USB控制芯片CY7C68013為例,介紹了一種在嵌入式ARM?Linux平臺的USB數據存儲方法。

1 ?系統設計

一個數據采集系統可以由如圖1所示的系統組成。該系統主要是由FPGA和USB 2.0控制器CY7C68013組成,可以根據實際系統的需要,用FPGA實現預定功能,如數據采集卡、控制硬盤讀寫等[1]。采用嵌入式ARM平臺代替PC機,將采集的數據通過USB傳遞給由ARM構成的上位機系統并顯示到觸摸屏上,實現數據采集處理與顯示功能。本文使用的嵌入式ARM?Linux系統的硬件平臺是深圳市英蓓特科技有限公司推出的基于德州儀器(TI)AM1808處理器的評估套件。AM1808處理器擁有豐富的外設資源,也是功耗最低的ARM9處理器之一,同時也是TI首批集成SATA的器件。這些特點使其非常適合在數據采集領域的應用。

CY7C68013是Cypress公司的一種單芯片集成USB 2.0收發器、能串行接口引擎(SIE)和增強型8051微處理器的功能強大的接口芯片,圖2是它的結構框圖。CY7C68013符合USB 2.0協議規范,可以按照USB設備進行開發。

2 ?Linux USB驅動概述

2.1 ?USB簡介

通用串行總線(Universal Serial Bus,USB)是一種用于規范電腦與外部設備的連接和通信的外部總線標準。USB設備邏輯上劃分為設備(device)、配置(config)、接口(interface)和端點(endpoint)四個層次,并具有以下關系:設備可以有一個或多個配置;配置可以有一個或多個接口;接口可以有一個或多個設置;接口可以有一個或多個端點。

USB通信最基本的形式是通過端點(USB端點分中斷、批量、等時、控制4種,每種功能不同),主機通過端點與設備進行通信[2]。

2.2 Libusb簡介

USB協議是目前使用最廣泛的外部總線協議,目前Linux對USB有了比較完善的支持。但由于USB所支持的設備的多樣性,一些特殊的USB設備的驅動還需要開發人員自行編寫。

在Linux平臺,USB驅動開發主要有兩種方式:一種是基于Linux內核編譯驅動,需要在內核空間完成,通常是參考內核中USB_skeleton修改[3?4];另一種是基于Libusb庫在用戶空間實現(也稱作“免驅”或者“無驅”設計)。本文主要介紹基于Libusb的USB驗證性應用設計。

Libusb是一種高級別的API,它封裝了低級別的內核與USB模塊的交互,并提供了一系列適合在用戶空間進行USB驅動開發的函數[5]。基于Libusb庫的驅動設計具有與內核版本無關、跨平臺的優點,無需對內核重新編譯,也不用考慮內核版本兼容性,相對于內核編譯大大降低了開發門檻,是一種高效的開發方式。Libusb提供了用戶空間的結構體struct Libusb_XXX_descriptor描述設備、配置、接口和端點。可以按照描述根據Libusb_open(),Libusb_XXX_transfer();Libusb_close()等函數編寫針對CY7C68013的特定功能的應用程序。

3 ?功能設計

針對數據存取的基本功能,本文實現在ARM?Linux 2.6.33系統下基于Libusb設計CY7C68013驅動。應用針對Cypress官方提供的測試用固件例程bulkloop驗證功能如

圖3所示。圖形用戶界面使用Qt實現。整個

工作在圖形編程工具Qt 4.5環境完成。

3.1 ?CY7C68013功能實現

CY7C68013的固件下載通過調用Cypress公司提供的對應Linux平臺的函數cyUSB_download_fx2( ) 實現,函數依托于Cypress官網提供的Linux平臺的cyUSB庫,因此使用前需要將該庫交叉編譯到ARM?Linux平臺編寫的應用要先調用USB_init()函數進行初始化,初始化之后才能按照Libusb庫進行操作。

Linux的宗旨是一切皆文件,而文件操作首先要打開設備。對USB設備操作也一樣,開發人員可以使用Libusb_open(Libusb_device*dev,Libusb_device_handle **

handle);打開由VID/PID指定的USB設備。handle句柄作為對應USB的唯一標識,貫穿于設備的整個操作過程,直至最后調用Libusb_close(handle)關閉指定的USB設備,釋放該句柄。

打開設備后通過四個層次的描述符struct Libusb_XXX_descriptor進行描述。USB設備將端點封裝到接口,操作端點必須先要聲明接口:Libusb_claim_interface(Libusb_device_handle *handle,int interface_number)。其中interface_number是所要聲明的接口號碼。Libusb完成的是用戶層的操作,操作前必須解除內核對接口的占用:

Libusb_kernel_driver_active(Libusb_device_handle*dev,int interface_number); ? ? ? ? ? //該函數判斷內核是否占用這個接口

Libusb_detach_kernel_driver(Libusb_device_handle *dev,int interface_number); ? ? ? ? ? //該函數解除內核對這個接口的占用

聲明接口后利用結構體端點描述符該接口的端點及其他信息:

struct Libusb_endpoint_descriptor {uint8_t ?bLength;

//端點長度

uint8_t ?bDescriptorType;

uint8_t ?bEndpointAddress;

//端點地址,可以用來確定端點傳輸的方向

uint8_t ?bmAttributes; ? ? ? ? ? ? ? ? ? ? ? ? //端點類型(四種)

uint16_t wMaxPacketSize; ? ? ? ? ? ? ? ? ? ? ? //最大數據尺寸

uint8_t ?bInterval;

uint8_t ?bRefresh;

uint8_t ?bSynchAddress;

};

之后可以根據端點的屬性通過操作函數Libusb_

XXX_transfer()結合文件操作函數實現數據傳輸存儲功能。

根據固件功能使用端點塊傳輸函數實現數據回環:

Libusb_bulk_transfer(dev_handle,out_endpoint,data,length,actual_length, timeout);

Libusb_bulk_transfer(dev_handle,in_endpoint,data,length,actual_length, timeout);

之后根據Linux文件操作將數據進行保存:

/*將data緩沖區數據寫入句柄fp指向的文件當中,返回寫入字節數*/

sum=write(fp, data, actual_length);

完成操作后調用Libusb_close()函數關閉指定的USB設備,釋放句柄。

3.2 ?SATA硬盤存儲功能實現

Linux 2.6系統內核已經支持了SATA的讀/寫,只需在內核編譯時勾選即可。Linux 2.6系統對ntfs格式寫支持不很完善,把第三方庫ntfs?3g交叉編譯到ARM?Linux,完善對SATA硬盤的讀/寫功能。在PC?linux端執行:

# ./configure CC=arm?none?linux?gnueabi?gcc ??host=arm?linux ??prefix=/home/ntfs/ ??exec?prefix=/home/ntfs/target

# make

# make install

把生成的動態庫復制到開發板的/usr/local目錄下。

3.3 ?程序移植

把在PC?Linux端編寫好的數據傳輸應用程序以及CY7C68013需要的cyUSB庫,觸摸屏需要的QT庫、tslib庫用ARM?none?linux?gnueabi?gcc編譯,并把編譯生成的庫文件復制到ARM?Linux的/usr/local目錄下。之后添加環境變量,再修改系統啟動時的等級,添加啟動后執行的腳本使應用程序開機自啟,即完成了專用設備的搭建。

4 ?數據傳輸及上位機顯示

本文用到的硬件有SBC8018開發板、基于CY7C68013和FPGA的讀數盒、金士頓60 GB SATA固態硬盤、PC機及硬盤供電電源,如圖4所示。

如圖5所示,scan按鈕實現USB硬件探測功能,設備信息顯示在文本框當中;claim_iface按鈕實現接口選擇功能,USB協議邏輯上支持多接口,所以對于特殊功能的設備提供接口選擇是值得的;in_ep,out_ep實現端點選擇功能,根據CY7C68013固件,測試選擇86端點入,2端點配套;rcv按鈕實現數據接收功能,在文本框顯示接收的數據及其ASCII碼(字符B對應ASCII碼值42)。save_as按鈕實現將數據保存功能,保存操作如圖6所示;reset按鈕是硬件復位,兩個clear按鈕實現清屏功能。

5 ?結 ?語

嵌入式設備可以為數據采集系統設計驗證帶來方便。本文實現了在ARM?Linux平臺下基于Libusb 庫在用戶空間直接訪問USB設備CY7C68013。開發人員無需了解復雜的USB協議與Linux內核機制,通過Libusb 庫提供的接口函數調用可以實現Linux下USB設備“無驅”開發。本文在AM1808開發平臺上實現數據采集顯示,為目前主流的嵌入式Linux平臺的USB驅動開發提供參考,開發人員可以據此模型開發工程上的特定功能,提高開發效率縮短開發周期。

參考文獻

[1] 譚安菊,龔彬.USB 2.0控制器CY7C68013與FPGA接口的Verilog HDL實現[J].電子工程師,2007,33(7):52?55.

TAN Anju, GONG Bin. Implementation of USB2.0 controller CY7C68013 and FPGA′s interface in Verilog HDL [J]. Electronic engineer, 2007, 33(7):52?55.

[2] 薛園園,趙建領.USB 應用開發實例詳解[M].北京:人民教育出版社,2009.

XUE Yuanyuan, ZHAO Jianling. Detailed explanation of USB application development examples [M]. Beijing: People′s Education Press, 2009.

[3] 彭定軍,陳安,高健華.嵌入式Linux下基于Libusb的USB驅動開發[J].技術與市場,2008(11):4?5.

PENG Dingjun, CHEN An, GAO Jianhua. Development of USB driver based on Libusb under embedded Linux [J]. Technology and market, 2008(11): 4?5.

[4] 楊強,王志斌,李曉,等.Linux中USB設備驅動程序的設計及其應用[J].濟南大學學報(自然科學版),2014,28(3):224?229.

YANG Qiang, WANG Zhibin, LI Xiao, et al. Design of USB device driver in Linux and its applications [J]. Journal of University of Jinan (Science and technology), 2014, 28(3): 224?229.

[5] 杜敏杰,馬彥恒,劉利民.Linux下基于CY7C68013芯片的USB設備驅動程序開發[J].科學技術與工程,2008,8(21):5933?5937.

DU Minjie, MA Yanheng, LIU Limin. USB device driver development of CY7C68013 chip under Linux [J]. Science technology and engineering, 2008, 8(21): 5933?5937.

[6] XU Z, LIU Z, ZHANG H, et al. Development of Linux based USB device driver for portable spectrometer [C]// Proceedings of 20st Annual International Conference on Chinese Control and Decision Conference. Guilin: IEEE, 2009: 5161?5164.

[7] 馬宗驥,李佩玥,章明朝,等.基于FPGA+ARM的數據采集系統設計[J].化工自動化及儀表,2012,39(9):1187?1189.

MA Zongji, LI Peiyue, ZHANG Mingchao, et al.Design of data acquisition system based on FPGA and ARM [J]. Control and instruments in chemical industry, 2012, 39(9): 1187?1189.

[8] QI Guangping, SUN Peng. The embedded system design for military or industry personal data assistant [C]// Proceedings of IEEE International Conference on Computer Science and Automation Engineering. Zhangjiajie: IEEE, 2012: 521?525.

[9] 曾希強.Linux下基于Libusb的USB設備驅動程序設計與實現[J].信息與電腦,2009(7):101.

ZENG Xiqiang. Design and implementation of USB device driver in Linux based on Libusb [J]. China computer & communication, 2009(7): 101.

[10] 朱恩亮,趙臘才,茹偉,等.Linux環境下USB設備驅動程序設計[J].電子科技,2016,29(1):108?110.

ZHU Enliang, ZHAO Lacai, RU Wei, et al. Development of USB device drivers of Linux [J]. Electronic science and technology, 2016, 29(1): 108?110.

猜你喜歡
數據存儲
簡單的數據修復
文理導航(2017年2期)2017-02-16 13:18:46
大數據時代檔案信息建設的認識和實踐
淺談電力大數據平臺關鍵技術研究與應用
開源數據庫數據存儲的實現路徑分析
基于Android開發的APP數據存儲研究
哈希算法在物聯網數據存儲中的應用
空難事故跨媒體信息采集與檢索方法的研究
基于STM32的AD采集與SD卡數據存儲
淺談信息系統工程和POJO模型組件開發
基于MongoDB的調查決策系統數據存儲方案設計
主站蜘蛛池模板: 国产产在线精品亚洲aavv| 亚洲综合色在线| 国产毛片基地| 九九视频免费在线观看| 国产精品永久免费嫩草研究院| 国产日韩欧美精品区性色| 久久99国产精品成人欧美| 91亚瑟视频| 熟妇无码人妻| 国产亚洲视频免费播放| 91偷拍一区| 国产91麻豆视频| 国产综合色在线视频播放线视| 国内丰满少妇猛烈精品播| 日本欧美精品| 国产大片喷水在线在线视频| 蜜芽一区二区国产精品| 精品无码一区二区三区电影| 高h视频在线| yjizz视频最新网站在线| 国产女人在线观看| 999国内精品视频免费| 国产永久无码观看在线| 国产偷倩视频| 在线观看国产黄色| 国产日韩久久久久无码精品| 国产99视频免费精品是看6| 伊人丁香五月天久久综合 | 综合社区亚洲熟妇p| 国产人人射| 国产高清免费午夜在线视频| 喷潮白浆直流在线播放| 亚洲精品动漫| 2018日日摸夜夜添狠狠躁| 色屁屁一区二区三区视频国产| 91年精品国产福利线观看久久 | 久久中文电影| 91福利在线看| 久久久久亚洲精品成人网 | 久久无码av三级| 久久人妻系列无码一区| 日本久久久久久免费网络| 精品少妇人妻一区二区| 亚洲高清在线天堂精品| 四虎免费视频网站| 19国产精品麻豆免费观看| 国产精品9| 日韩第九页| 亚洲精品欧美日韩在线| 精品亚洲麻豆1区2区3区| 亚洲高清无码久久久| 福利片91| 午夜视频免费试看| 国产在线自揄拍揄视频网站| 青青草国产精品久久久久| 国产亚洲视频免费播放| 国产成人亚洲精品蜜芽影院| 亚洲欧美综合另类图片小说区| 国产va在线观看| 国产人前露出系列视频| 狠狠色噜噜狠狠狠狠奇米777 | 成人免费视频一区| 日韩无码真实干出血视频| 免费三A级毛片视频| 九九热精品在线视频| 国产无码精品在线播放| 免费亚洲成人| 99热这里只有精品5| 成人av手机在线观看| 亚洲一区二区三区国产精品 | 欧美一区中文字幕| 一级高清毛片免费a级高清毛片| 日韩国产高清无码| 欧美日韩高清在线| 91蜜芽尤物福利在线观看| 国产1区2区在线观看| 久久精品人人做人人综合试看| 国产第三区| 无码精油按摩潮喷在线播放| 欧洲在线免费视频| 青青青草国产| 亚洲日韩日本中文在线|