国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C8051F340的USB通訊設(shè)計(jì)的實(shí)現(xiàn)

2016-06-16 22:22沈鑫彪
電腦知識(shí)與技術(shù) 2016年10期

沈鑫彪

摘要:該設(shè)計(jì)旨在通過USB(Universal Serial Bus)通訊技術(shù)2.0版本協(xié)議以及C8051F340芯片嘗試與計(jì)算機(jī)通訊的可行性。通過運(yùn)用C8051F340這款51家族的高性能芯片的相關(guān)寄存器的功能,再根據(jù)USB 2.0版的通訊協(xié)議完成下位機(jī)的固件編寫,然后,在主機(jī)上編寫VB(Visual Basic)的相應(yīng)接口函數(shù),完成數(shù)據(jù)傳送的工作。經(jīng)過實(shí)驗(yàn),可以完成下位機(jī)與上位機(jī)連接,并完成數(shù)據(jù)傳送。

關(guān)鍵詞:C8051F340;USB通訊;Visual Basic

中圖分類號(hào):TP333 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)10-0266-03

USB設(shè)備以其熱插拔、簡(jiǎn)單易用的特性被廣泛運(yùn)用在社會(huì)的各個(gè)領(lǐng)域[1]。部分醫(yī)療設(shè)備在提供媒體文件,例如圖片、視屏等時(shí),也都選擇USB作為通訊接口,以方便醫(yī)院醫(yī)生可以方便取出所需資料,完成科研或教學(xué)工作。但是由于USB的廣泛化,導(dǎo)致其的個(gè)性化功能很少有廠家提供一套合理有效的方案。本設(shè)計(jì)通過USB相關(guān)協(xié)議的學(xué)習(xí),將其在C8051F340這款芯片上實(shí)現(xiàn)與主機(jī)的連接及數(shù)據(jù)傳輸,為醫(yī)院定制自己個(gè)性化USB移動(dòng)設(shè)備提供支持。

1 系統(tǒng)設(shè)計(jì)

本設(shè)計(jì)不但嘗試了和主機(jī)建立連接,而且完成隨時(shí)數(shù)據(jù)讀入,然后傳輸。數(shù)據(jù)讀入部分用的是CCD芯片輸出的數(shù)據(jù)。

本系統(tǒng)的流程框架為驅(qū)動(dòng)模塊成功驅(qū)動(dòng)CCD芯片之后,用AD(Analog to Digital)轉(zhuǎn)換芯片將CCD輸出的模擬量數(shù)據(jù)化,然后讀入主控芯片,主控芯片再利用USB傳輸將數(shù)據(jù)上傳至主機(jī),主機(jī)上的程序就會(huì)連接數(shù)據(jù)庫,數(shù)據(jù)庫再進(jìn)行進(jìn)一步的查詢工作。系統(tǒng)框架如圖1所示。

1.1條形碼數(shù)據(jù)讀取

本設(shè)計(jì)采用的CCD型號(hào)是TCD1206SUP。CCD芯片的驅(qū)動(dòng)需要一個(gè)時(shí)序產(chǎn)生模塊,按照手冊(cè)說明,提供相應(yīng)頻率和時(shí)序的觸發(fā)信號(hào),就可以成功驅(qū)動(dòng)CCD芯片,完成圖片掃描并將數(shù)據(jù)傳輸給主控芯片C8051F340。為了檢驗(yàn)數(shù)據(jù)的正確性,本設(shè)計(jì)在下位機(jī)也設(shè)置了一個(gè)顯示模塊,使用了型號(hào)為12864的液晶顯示屏。主控芯片接收傳輸過來的數(shù)據(jù)后,進(jìn)行一定的編碼處理后,就把數(shù)據(jù)一個(gè)一個(gè)送入主控芯片的USB數(shù)據(jù)發(fā)送緩存區(qū)。

圖2和圖3為CCD驅(qū)動(dòng)信號(hào),圖2分別是RS復(fù)位信號(hào)和Φ1移位信號(hào),RS的下降沿與Φ1移位信號(hào)的電平跳變沿對(duì)應(yīng),RS為1M,Φ1為0.5M,RS占空比約為1/3;圖3為Φ1和Φ2移位信號(hào),兩個(gè)信號(hào)根據(jù)手冊(cè)為互補(bǔ)信號(hào),占空比為1/2。

1.2 USB數(shù)據(jù)傳輸[2-3]

在USB通訊中,每一次通訊都由主機(jī)通過輪詢方式發(fā)起,本設(shè)計(jì)采用的USB傳輸協(xié)議是2.0版本,借用C8051F340的特定USB寄存器完成USB傳輸工作。根據(jù)USB2.0協(xié)議,通訊前首先要進(jìn)行一些USB傳輸?shù)母鱾€(gè)描述符的配置和主控芯片C8051F340相關(guān)寄存器的配置。

1.2.1 USB描述符設(shè)置

由USB協(xié)議2.0可知,USB的描述符有設(shè)備描述符、配置描述符、接口描述符和終端描述符等。這些描述符在設(shè)計(jì)固件時(shí)被存放在一個(gè)結(jié)構(gòu)體中,并以常量的形式存放在ROM(Read-OnlyMemory)中,即本設(shè)計(jì)主控芯片C8051F340的相關(guān)寄存器中,所以在設(shè)備使用過程中是不能改變的。

設(shè)備描述符中有關(guān)于這個(gè)設(shè)備的基本信息所存儲(chǔ)的地址,方便主機(jī)接下來的訪問。它是在設(shè)備連接主機(jī)時(shí)主機(jī)讀取的第一個(gè)描述符。以下為本設(shè)計(jì)所用的設(shè)備描述符。

18, // 字節(jié)長(zhǎng)度

0x01, // 固定設(shè)備(01h)

SWAP16(0x0200), // USB規(guī)范發(fā)布號(hào)(BCD),此處選2.0版本

0x00, // 類代碼

0x00, // 子類代碼

0x00, // 協(xié)議代碼

EP0_PACKET_SIZE, // 終端0最大包的大小

SWAP16(USB_HID_VID), // 銷售商ID (unsigned int)0xe001

SWAP16(USB_HID_PID), // 產(chǎn)品ID(unsigned int)0x02ff

0x0001, // 設(shè)備發(fā)布號(hào)(BCD)

0x01, // 制造商字符串描述符的指針

0x02, // 產(chǎn)品字符串描述符的指針

0x03, // 包括了序列號(hào)的字符串描述符的指針

0x01 // 配置的號(hào)碼

主機(jī)在接收到設(shè)備的配置、接口和終端描述符訪問地址以后,會(huì)請(qǐng)求選擇一個(gè)配置并用函數(shù)Get_Configuration請(qǐng)求來讀入當(dāng)前的配置,在固件中有一個(gè)同名的函數(shù)來上傳該描述符。在主機(jī)發(fā)起的輪詢中,有11種標(biāo)準(zhǔn)請(qǐng)求,Get_Configuration即為其中一個(gè),其字段取值為8。配置描述符有8個(gè)字段。這個(gè)描述符包括如下信息:描述符本身、配置和在該配置下設(shè)備的電能使用情況。對(duì)很多配置,一些字段是用不到的。以下為本設(shè)計(jì)所用的配置描述符。

0x09, // 描述符的字節(jié)長(zhǎng)度

0x02, // 固定配置(01h)

SWAP16( sizeof( CON_INT_HID_EP_DESCRIPTOR ) ) , // 所有數(shù)據(jù)的字節(jié)大小

0x01, // 該配置支持的接口號(hào)

0x01, // 請(qǐng)求的標(biāo)識(shí)符

0x00, // 字符串描述符的指針

0x80, // 自供電,不支持喚醒

USB_MAX_PWR/2 // 需要的總線電能

每個(gè)配置必須支持一個(gè)接口,并且對(duì)很多設(shè)備來說,一個(gè)就夠了。主機(jī)請(qǐng)求申請(qǐng)一個(gè)新的接口,并用一個(gè)Get_Interface請(qǐng)求來讀取當(dāng)前的接口,然后固件用一個(gè)同名的函數(shù)上傳相應(yīng)描述符。改變接口比改變配置容易,改變配置要影響這個(gè)設(shè)備。

一個(gè)接口描述符有9個(gè)字段。很多設(shè)備不需要所有這些字段,例如那些允許替換的設(shè)置和協(xié)議。以下為本設(shè)計(jì)所用的接口描述符。

0x09, // 描述符的字節(jié)長(zhǎng)度

0x04, // 固定接口(04h)

0x00, // 識(shí)別這個(gè)接口的號(hào)

0x00, // 用于選擇一個(gè)替換設(shè)置的值

0x01, // 支持的終端號(hào),除了終端0

0x03, // 類代碼

0x01, // 子類代碼

0x02, // 協(xié)議代碼

0x00 // 接口的字符串描述符的指針

以下為本設(shè)計(jì)的終端描述符。其中0x05表示固定的終端,EP_INTERVAL為一個(gè)宏定義。

0x07, // 描述符的字節(jié)長(zhǎng)度

0x05, // 固定終端(05h)

0x81, // 終端號(hào)和方向

0x03, // 支持的傳輸類型

SWAP16( EP1_PACKET_SIZE ), // 支持的最大包的大小

EP_INTERVAL // 查詢間隔,以ms為單位

一個(gè)字符串描述符包含了描述文本。USB協(xié)議規(guī)范為制造商、產(chǎn)品、序列號(hào)、配置和接口定義了字符串描述符。一個(gè)設(shè)備也可以支持其他的字符串描述符。字符串描述符是可選擇的。在此就不羅列該字符描述符信息了。

對(duì)于任何USB設(shè)備,HID(Human Interface Device)的描述符告訴了主機(jī)為了和設(shè)備通信,它需要知道什么。主機(jī)發(fā)送Get_Descriptor來請(qǐng)求包含HID的接口配置,類描述符可以有7個(gè)或更多個(gè)字段,這取決于其他描述符的數(shù)量。以下為本設(shè)計(jì)所用的HID描述符。

9,// 描述符的字節(jié)長(zhǎng)度

0x21, // 21h表示HID類

SWAP16(0x0110), // HID規(guī)范發(fā)布號(hào)(BCD)

33, // 識(shí)別本地化硬件的國(guó)家的數(shù)字表達(dá)式(BCD)

1, // 支持的從屬類描述符的數(shù)量

0x22, // 類描述符類型

SWAP16( sizeof( ReportDesc ) ) // 報(bào)告描述的總長(zhǎng)度

1.2.2 C8051F340相關(guān)寄存器的配置

C8051F340芯片集成了一個(gè)完整的全速/低速USB功能控制器,用于實(shí)現(xiàn)USB外部設(shè)備(C8051F340不能被用作USB主設(shè)備)。C8051F340又包括除了USB0DAT、USB0ADR和USB0XCN這些51寄存器之外的USB控制寄存器,共二十幾個(gè)(不包括FIFO)。USB控制寄存器又分為公共寄存器、中斷寄存器、索引寄存器和FIFO訪問。

本設(shè)計(jì)采用的主控芯片是C8051F340。C8051F340是51家族的一款高速多引腳集成了USB外設(shè)的高性能主控芯片,具有64K片內(nèi)FLASH存儲(chǔ)器、4352B片內(nèi)RAM(Random Access Memory)以及豐富的外設(shè)資源,具體詳細(xì)參數(shù)可以參閱該芯片數(shù)據(jù)手冊(cè)。

下位機(jī)做好相關(guān)初始工作,包括USB使能,開中斷允許和USB相關(guān)寄存器設(shè)置,之后就是上位機(jī)的中斷信號(hào)的觸發(fā)了,觸發(fā)后就進(jìn)入中斷。其中斷后的程序是通過分支結(jié)構(gòu)實(shí)現(xiàn)的,結(jié)構(gòu)框圖如圖4。

1.3主機(jī)查詢顯示

本設(shè)計(jì)的PC端軟件采用VB6.0開發(fā),底層驅(qū)動(dòng)采用WinDriver10.00,是一款由Jungo公司研制開發(fā)的可視化的硬件驅(qū)動(dòng)開發(fā)平臺(tái)。

由于VB不包含訪問一般USB設(shè)備的控制[4],而要使用WinDriver動(dòng)態(tài)連接庫中的接口函數(shù)(API, Application Programming Interface)。因?yàn)锳PI函數(shù)對(duì)傳遞和返回的變量有特殊的要求[5],出現(xiàn)錯(cuò)誤不會(huì)導(dǎo)致應(yīng)用程序或系統(tǒng)的崩潰,但要用VB正確調(diào)用這些函數(shù),就必須要對(duì)VB中的調(diào)用函數(shù)進(jìn)行適當(dāng)改動(dòng)。為了使編程更簡(jiǎn)單、更安全,VB對(duì)一般任務(wù)有它自己的控制。

只要下位機(jī)的USB固件程序編寫正確,就都可以利用WinDriver這款軟件順利生成想要的驅(qū)動(dòng)程序。本設(shè)計(jì)用到的動(dòng)態(tài)連接庫有WDAPI1000.DLL和XP系統(tǒng)中的kernel32.DLL。下面即為將WDAPI1000.DLL文件中的ThreadLoopStart聲明為VB_ThreadLoopStart,以供VB的正確調(diào)用[6],主要考慮到數(shù)據(jù)類型的匹配。

Declare Function ThreadLoopStart Lib "WDAPI1000.DLL" Alias "VB_ThreadLoopStart" ( _

ByRef phThread As Long, ByVal pFunc As Long, ByVal pData As Long, _

ByVal hWnd As Long) As Long

2測(cè)試與結(jié)果

本設(shè)計(jì)所使用的計(jì)算機(jī)系統(tǒng)版本是XP profession SP3。提供測(cè)試用的間有黑白條紋的紙板來給CCD掃描讀取,經(jīng)過編碼后得出一串只有“0”和“1”的代碼。主機(jī)程序中預(yù)置一個(gè)對(duì)應(yīng)不同代碼的文字信息,然后根據(jù)USB傳輸?shù)拇a對(duì)應(yīng)顯示相關(guān)信息。圖5為主機(jī)上顯示信息的界面。

3結(jié)論與總結(jié)

C8051F340芯片外圍集成USB功能,有許多的USB功能寄存器可供調(diào)用,學(xué)習(xí)相關(guān)資料手冊(cè),無論是驅(qū)動(dòng)CCD芯片,還是USB通訊都可以完成工作。

所選擇的C8051F340主控芯片的PWM管腳輸出頻率不能達(dá)到預(yù)期驅(qū)動(dòng)CCD的頻率,導(dǎo)致需要另加一塊時(shí)序產(chǎn)生模塊,該控制芯片的端口資源充分利用起來還可以提供更多的實(shí)用功能。前端CCD掃描的光路設(shè)計(jì)不能符合預(yù)期要求,以至于在掃描條形碼時(shí)不能達(dá)到預(yù)期效果,只能識(shí)別簡(jiǎn)單的黑白條紋。

通過本系統(tǒng)方案的設(shè)計(jì)及實(shí)施,對(duì)USB傳輸協(xié)議框架有了一個(gè)理性認(rèn)識(shí),為以后定制USB移動(dòng)設(shè)備提供技術(shù)支持,完成更多相關(guān)技術(shù)產(chǎn)品的開發(fā)。

參考文獻(xiàn):

[1]向文芳,邢濤,曹紅兵,等.高速數(shù)據(jù)采集系統(tǒng)的USB接口設(shè)計(jì)[J]. 計(jì)算機(jī)測(cè)量與控制,2011,19(10):2567-2570.

[2] 美國(guó)邁舍爾公司. USB系統(tǒng)體系[M]. 孟文,譯. 2版.北京:中國(guó)電力出版社,2003.

[3] Jan Axelson. USB大全[M]. 陳逸,譯.北京:中國(guó)電力出版社,2001.

[4] 李丹,胡滿紅,金新民.對(duì)VB的USB接口虛擬示波器的設(shè)計(jì)[J].濟(jì)源職業(yè)技術(shù)學(xué)院學(xué)報(bào),2007,6(1):8-10.

[5] 徐襲,楊志紅,吳漢松.基于VB的USB設(shè)備檢測(cè)通信研究[J].計(jì)算機(jī)應(yīng)用研究,2002(11):99-102,111.

[6] 王希望,于華麗,劉麗娟,等.基于VB的USB通信系統(tǒng)在智能溫濕度檢測(cè)儀中的應(yīng)用[J].儀表技術(shù)與傳感器,2007(10):16-17,32.

404 Not Found

404 Not Found


nginx
方山县| 来凤县| 渑池县| 杭锦后旗| 平遥县| 库车县| 克什克腾旗| 丰县| 绵竹市| 博客| 西乌珠穆沁旗| 襄樊市| 永善县| 新竹市| 三河市| 呼图壁县| 陵水| 都匀市| 潮安县| 平南县| 新野县| 平和县| 奉化市| 敦煌市| 驻马店市| 江都市| 新宾| 昌邑市| 交城县| 清远市| 甘孜| 阜平县| 沈丘县| 峨山| 莱阳市| 越西县| 神木县| 陵川县| 台中县| 修文县| 安仁县|