USB是英文Universal Serial Bus(通用串行總線的縮寫),是一種快速、靈活的總線接口。USB對所有的USB外設(shè)提供了單一的易于使用的標(biāo)準的連接類型,簡化了USB外設(shè)的設(shè)計。USB接口支持熱插拔,計算機系統(tǒng)可以動態(tài)地檢測外設(shè)的插拔,并且動態(tài)地加載驅(qū)動程序。另外,USB還具有很靈活的擴展性,一個USB端口接上一個USB HUB(集線器)就可以擴展多個USB端口。USB廣泛的應(yīng)用于PC機中的人機接口、音頻、存儲等功能,隨著嵌入式系統(tǒng)在各個領(lǐng)域上廣泛應(yīng)用,USB也在嵌入式系統(tǒng)中被廣泛的使用。
一、USB簡介
USB是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯(lián)合提出。ISB1.1是較為普遍的USB規(guī)范,其高速方式的傳輸速率是12Mbps,低速模式的傳輸速率為1.5Mbps(b是bit的意思,12Mbps=1.5MB/s),USB2.0規(guī)范是由USB1.1規(guī)范演變而來,它的傳輸速率達到了480Mbps,足以滿足大多數(shù)外設(shè)的速率要求。USB2.0中的EHCI(增強主機控制器接口)定義了一個與USB1.1相兼容的結(jié)構(gòu)。它可以用USB2.0的驅(qū)動程序驅(qū)動USB1.1的設(shè)備,也就是說所有支持USB1.1的設(shè)備都可以直接在USB2.0的接口上使用而不必擔(dān)心兼容性問題。USB采用四線電纜,其中兩根是用來傳送數(shù)據(jù)的串行通道,另兩根為下游設(shè)備提供電源,對于任何已經(jīng)成功連接且相互識別的外設(shè),將以對方設(shè)備均能夠支持的最高速率傳輸數(shù)據(jù)。USB總線會根據(jù)外設(shè)情況在所兼容的傳輸模式中自動地由高速向低速動態(tài)轉(zhuǎn)換且匹配鎖定在合適的速率。USB系統(tǒng)采用級聯(lián)星型拓撲,該拓撲由三個基本部分組成:主機,集線器和功能設(shè)備。
主機包含有主控制器和根集線器,控制著USB總線上的數(shù)據(jù)和控制信息的流動,每個USB系統(tǒng)只能有一個根集線器,它連接在主控制器上。
集線器是USB結(jié)構(gòu)中的特定成分,它可以對原有的USB端口在數(shù)量上進行擴展以獲得更多的USB端口(集線器只能擴展出更多的USB端口,而不能擴展出更多的帶寬),設(shè)備通過端口連接到USB總線上,同時檢測連接在總線上的設(shè)備,并為這些設(shè)備提供電源管理,負責(zé)總線的故障檢測和恢復(fù)。集線可為總線提供能源,亦可為自身提供能源。功能設(shè)備通過端口與總線連接。
本文章以M1052平臺為例,主要講解在AWorks平臺中如何創(chuàng)建一個自定義的USB設(shè)備。
二、AWorks工程配置
在AWorks工程中,用戶可以通過aw_prj_params.h配置文件進行設(shè)備添加與刪除,aw_prj_params.h在工程目錄user_config中。
在aw_prj_params.h文件中,有效定義設(shè)備的使能宏,才表示一個有效的硬件設(shè)備,在本文章中我們需要使能USB Device,所以在aw_prj_params.h中添加AW_DEV_IMX1050_USBD設(shè)備宏。
#define AW_DEV_IMX1050_USBD /**< brief USB Device */ |
在aw_prj_params.h中添加AW_DEV_IMX1050_USBD設(shè)備宏之后,在aw_prj_param_auto_cfg.h文件中會自動添加AW_COM_USBD的定義,AW_COM_USBD代表的是USB Device協(xié)議棧組件。此處要注意AW_DEV_IMX1050_USBD與AW_DEV_IMX1050_USBH1有沖突(一個USB控制器不能同時出現(xiàn)主機設(shè)備模式),兩個只能使能一個。AW_DRV_IMX1050_USBD表示加載USB Device的驅(qū)動:
/** * name 內(nèi)部USB Device控制器 * @{ */ #ifdef AW_DEV_IMX1050_USBD #ifndef AW_COM_USBD #define AW_COM_USBD #endif #define AW_DRV_IMX1050_USBD #endif |
三、AWorks中USB Device的硬件配置
在AWorks中所有設(shè)備集中由AWbus_lite進行管理,在使用一個硬件設(shè)備前,必須將其添加到系統(tǒng)硬件設(shè)備列表(在awbus_lite_hwconf_usrcfg.c中定義),各個硬件設(shè)備的類型為struct awbl_devhcf。USB設(shè)備相關(guān)硬件配置可以查閱工程目錄下的user_configawbl_hwconf_usrcfgawbl_hwconf_imx1050_usbd.h文件,USB設(shè)備模式的設(shè)備信息詳見程序清單2.1。
程序清單2.1 USB設(shè)備模式的設(shè)備信息類型定義
1 | aw_local aw_const struct awbl_imx1050_usbd_info __g_imx1050_usbd_info = { |
2 | { |
3 | "/dev/usbd", /**< 控制器名字 */ |
4 | AWBL_USBD_CFG_SELF_POWERED /**< 控制器配置信息*/ |
5 | }, |
6 | |
7 | IMX1050_USB1_BASE_ADDR, /**< 寄存器基地址 */ |
8 | IMX1050_USBPHY1_BASE_ADDR, /**< USB PHY寄存器基地址 */ |
9 | INUM_USB_OTG1, /**< USB 中斷號*/ |
10 | 5, /**< 處理usb中斷業(yè)務(wù)的任務(wù)優(yōu)先級 */ |
11 | 32, |
12 | __imx1050_usbd_plfm_init /**< 平臺相關(guān)初始化:初始化時鐘 */ |
13 | }; |
14 |
其中"/dev/usbd" 是USB Device外設(shè)的設(shè)備名字,在實際的應(yīng)用中需要通過該名字來使用USB Device
AWBL_USBD_CFG_SELF_POWERED 表示本設(shè)備為自行供電設(shè)備。__imx1050_usbd_plfm_init函數(shù)是用來初始化與USB Device平臺相關(guān)的信息,在這里是初始化USB Device時鐘,詳見程序清單2.2。
程序清單2.2 USB設(shè)備模式的平臺初始化函數(shù)
1 | aw_local void __imx1050_usbd_plfm_init (void) { |
2 | /* 配置USB Device時鐘 */ |
3 | usbd_clk_init(); |
4 | }; |
四、與USB Device操作函數(shù)相關(guān)重要結(jié)構(gòu)體介紹
USB設(shè)備類回調(diào)函數(shù)列表,這個結(jié)構(gòu)體用于提供USB枚舉以及USB通信過程中的事件回調(diào)接口,方便用戶接入應(yīng)用代碼:
/** brief USB設(shè)備類回調(diào)函數(shù)列表 */ struct aw_usbd_cb { /** brief 控制器鏈接到設(shè)備 */ int (*pfn_link) (struct aw_usbd *p_obj); /** brief 控制器和設(shè)備斷開鏈接 */ int (*pfn_unlink) (struct aw_usbd *p_obj); /** brief 接收到SETUP包 */ int (*pfn_ctrl_setup) (struct aw_usbd *p_obj, struct aw_usb_ctrlreq *p_setup, void *p_buf, int buf_len); /** brief 設(shè)置或清除配置 */ int (*pfn_config_set) (struct aw_usbd *p_obj, struct aw_usbd_cfg *p_cfg, bool_t set); /** brief 總線掛起 */ void (*pfn_suspend) (struct aw_usbd *p_obj); /** brief 總線恢復(fù) */ void (*pfn_resume) (struct aw_usbd *p_obj); /** brief 總線斷開連接 */ void (*pfn_disconnect) (struct aw_usbd *p_obj); }; |
USB設(shè)備信息結(jié)構(gòu)體,此結(jié)構(gòu)體用于配置USB設(shè)備的基礎(chǔ)信息(具體信息詳見結(jié)構(gòu)體定義),當(dāng)設(shè)備連接到PC端后,可以在PC端查看到這些信息:
/** brief USBD信息結(jié)構(gòu)定義 */ struct aw_usbd_info { uint8_t clss; /**< brief 類代碼 */ uint8_t sub_clss; /**< brief 子類代碼 */ uint8_t protocol; /**< brief 協(xié)議代碼 */ uint8_t mps0; /**< brief 端點0包最大尺寸 */ uint16_t bcd; /**< brief 設(shè)備版本號 */ uint16_t vid; /**< brief 廠商ID */ uint16_t pid; /**< brief 產(chǎn)品ID */ const char *manufacturer; /**< brief 制造商字符串描述 */ const char *product; /**< brief 產(chǎn)品字符串描述 */ const char *serial; /**< brief 序列號字符串描述 */ }; |
USB設(shè)備接口信息結(jié)構(gòu)體,這個結(jié)構(gòu)體是用來描述當(dāng)前USB設(shè)備接口的信息:
/** brief USBD接口信息 */ struct aw_usbd_fun_info { uint8_t clss; /**< brief 類代碼 */ uint8_t sub_clss; /**< brief 子類代碼 */ uint8_t protocol; /**< brief 協(xié)議代碼 */
/** brief 替代設(shè)置回調(diào) */ int (*pfn_alt_set) (struct aw_usbd_fun *p_fun, bool_t set);
/** brief setup控制傳輸回調(diào) */ int (*pfn_ctrl_setup) (struct aw_usbd_fun *p_fun, struct aw_usb_ctrlreq *p_setup, void *p_buf, int buf_len); }; |
五、USB Device操作接口
Aworks提供了一系列的USB Device操作相關(guān)的標(biāo)準接口,包括初始化一個USB設(shè)備、USB功能初始化、啟動USB設(shè)備和USB數(shù)據(jù)傳輸?shù)龋脩粼谑褂肁works開發(fā)USB Device的應(yīng)用程序時,使用上述標(biāo)準接口就能方便快捷的開發(fā)出源代碼。詳見表4.1
表4.1 USB設(shè)備模式操作接口函數(shù)
● struct aw_usbd_fun 為功能接口對象
● struct aw_usbd 為USB Device對象
● struct aw_usbd_pipe 為端點管道對象
六、應(yīng)用案例代碼詳解
這里基于M1052平臺,展示如何創(chuàng)建一個自定義的USB設(shè)備。本例子會初始化一個USB設(shè)備,為USB設(shè)備創(chuàng)建一個OUT管道和一個IN管道用于接收和發(fā)送數(shù)據(jù)(IN和OUT的概念是相對于USB主機而言),并在這個USB設(shè)備添加接口功能。通過USB設(shè)備與PC機的連接,實現(xiàn)與PC的通訊,當(dāng)PC機上位機軟件發(fā)送數(shù)據(jù)時,USB設(shè)備通過OUT管道接收數(shù)據(jù),并通過IN管道把收到的數(shù)據(jù)發(fā)送回PC端上位機。這里只對部分關(guān)鍵的代碼進行講解,完整的代碼請自行下載查看,本例程所在目錄位于examplesperipheralcommonusb demo_usbd_vendor.c
上一篇:小米8屏幕指紋版要來?官方暗示:壓感指紋識別
下一篇:Zwipe和英飛凌就生物識別支付達成合作協(xié)議
推薦閱讀
史海拾趣
Brainboxes一直注重與客戶建立緊密的合作關(guān)系。公司深入了解客戶的需求和應(yīng)用場景,為其提供定制化的解決方案。此外,Brainboxes還積極參與工業(yè)連接領(lǐng)域的發(fā)展,與多家知名企業(yè)建立合作關(guān)系,共同推動行業(yè)的技術(shù)進步和應(yīng)用創(chuàng)新。這種客戶親密度和工業(yè)連接能力使得Brainboxes在市場競爭中占據(jù)有利地位。
風(fēng)華的故事始于1984年,當(dāng)時廣東肇慶風(fēng)華電子廠成立,最初業(yè)務(wù)聚焦于收錄機裝配。一年后,即1985年,國內(nèi)首條從美國引進的年產(chǎn)1億只片式多層陶瓷電容器生產(chǎn)線落戶風(fēng)華,標(biāo)志著公司正式踏入高新技術(shù)產(chǎn)業(yè)領(lǐng)域。這一舉措不僅提升了公司的技術(shù)實力,也為后續(xù)的發(fā)展奠定了堅實基礎(chǔ)。
EEMB集團一直非常重視企業(yè)文化和團隊建設(shè)。公司注重培養(yǎng)員工的創(chuàng)新意識和團隊精神,為員工提供了良好的工作環(huán)境和發(fā)展機會。同時,公司也積極履行社會責(zé)任,關(guān)注環(huán)保和公益事業(yè),為社會做出了積極貢獻。這些舉措不僅增強了公司的凝聚力和向心力,也為公司的可持續(xù)發(fā)展奠定了堅實基礎(chǔ)。
請注意,以上故事是基于公開信息和一般情況下的假設(shè)而編寫的,可能與EEMB Co Ltd公司的實際發(fā)展情況存在差異。
隨著企業(yè)規(guī)模的擴大和影響力的提升,AdTech公司開始更加關(guān)注自身的社會責(zé)任和可持續(xù)發(fā)展。公司積極參與公益活動,支持教育、環(huán)保等事業(yè),為社會的發(fā)展做出了積極貢獻。同時,公司還注重環(huán)境保護和資源利用,通過采用環(huán)保材料和節(jié)能技術(shù),降低生產(chǎn)過程中的能耗和排放。這些舉措不僅提升了公司的社會形象,也為其實現(xiàn)長期可持續(xù)發(fā)展奠定了堅實基礎(chǔ)。
這些故事是基于對AdTech公司可能發(fā)展路徑的假設(shè)和推測而創(chuàng)作的,并不代表該公司的實際發(fā)展情況。實際上,每個公司的發(fā)展都是獨特而復(fù)雜的,受到多種因素的影響。如需了解更多關(guān)于AdTech公司的真實發(fā)展情況,建議查閱相關(guān)新聞報道、行業(yè)報告或公司年報等權(quán)威資料。
AdTech公司深知人才是企業(yè)發(fā)展的核心動力。因此,公司一直致力于培養(yǎng)和引進高素質(zhì)的人才,打造了一支具有豐富經(jīng)驗和專業(yè)技能的團隊。公司通過提供良好的工作環(huán)境和福利待遇,吸引了一批優(yōu)秀的研發(fā)、市場和管理人才。同時,公司還注重員工的培訓(xùn)和成長,為員工的職業(yè)發(fā)展提供了廣闊的空間。這些措施使得公司的團隊更加穩(wěn)定和高效,為公司的持續(xù)發(fā)展提供了有力保障。
面對數(shù)字化浪潮的沖擊,超音積極響應(yīng)行業(yè)變革,加快了數(shù)字化轉(zhuǎn)型和智能化升級的步伐。公司引入了先進的生產(chǎn)設(shè)備和管理系統(tǒng),提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。同時,超音還加大了對智能化產(chǎn)品的研發(fā)投入,推出了一系列具有智能化功能的音頻設(shè)備產(chǎn)品。這些產(chǎn)品不僅滿足了消費者對高品質(zhì)音頻的需求,還提供了更加便捷和智能的使用體驗。這些努力使得超音在數(shù)字化轉(zhuǎn)型和智能化升級方面取得了顯著成效,為公司的未來發(fā)展注入了新的活力。
各位大哥們,我還是一個大一的學(xué)生,現(xiàn)在聽說嵌入開發(fā)還可以,所以就有一點想向這一方面發(fā)展,但是現(xiàn)在在我面前的一個問題就是 我不知道要學(xué)那些東西,我也是一個計算機班的學(xué)生,這是不是有很大的優(yōu)點. 所以就想問一下大哥們的應(yīng)該出什么方向入手好一 ...… 查看全部問答∨ |
|
小弟最近用wince5.0編譯內(nèi)核,發(fā)現(xiàn)在某些情況下會生成。nb1文件,比如說eboot.nb1這種情況看了一些說法是eboot.nb0空間不夠存放內(nèi)核,所以放到eboot.nb1中,但是查看eboot.bin文件發(fā)現(xiàn)空間還多的是。在有些時候會出現(xiàn)上面的情況。我用的AT91SAM9261 ...… 查看全部問答∨ |
|
我用vpm642開發(fā)板,的電源芯片tps54310壞了,自己換的,發(fā)現(xiàn)電流增大了300mA,現(xiàn)在是1A,一會cpu就燙手,程序很容易跑飛,時間久了cpu會不斷的復(fù)位,只能歇會再用。好多程序要調(diào)幾次才能成功,對于Date-copy指令,傳送一次(720個數(shù))可以,可是加 ...… 查看全部問答∨ |
最近仔細看了看板子,開發(fā)板很多過孔,原本覺得是板子布線不好呢,但是怎么想都不對,有很多過孔并沒有參加到電路之中啊,請論壇中的大?;蛘吖芾韱T解釋解釋好嗎???為什么設(shè)置那么多過孔呢,在我看來一定是有什么特殊的作用 … 查看全部問答∨ |
Linux 2.6.36內(nèi)核移植飛凌OK6410開發(fā)板完整步驟詳解 今天終于讓Linux內(nèi)核在飛凌的板子上跑起來了,想來也是艱辛,為了移植成功,斷斷續(xù)續(xù)做了將近兩個月的努力,期間郁悶不可言 語形容啊, 了解其中艱辛,將自己移植步驟與心得與大家分享,希望對初踏次領(lǐng)域之人有所幫助,我所寫 ...… 查看全部問答∨ |
- 蘋果智能戒指專利獲批:邊緣配照明,配合觸覺反饋革新交互體驗
- 蘋果折疊屏iPhone參數(shù)曝光:首發(fā)自研基帶C2替代高通
- 英國初創(chuàng)公司 HoloMem 推出全息磁帶存儲技術(shù)
- 全新OPPO K13 Turbo系列官宣,7月21日正式首發(fā)
- 小米回應(yīng) MIX Flip 2 折疊手機未搭載玄戒 O1
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- BOE(京東方)聯(lián)合榮耀打造榮耀Magic V5 以領(lǐng)先LTPO技術(shù)打造行業(yè)新標(biāo)桿
- 曾與諾基亞三星比肩的手機巨頭沒落!LG手機退場
- 手機上的免費Manus來了!OPPO小布助手發(fā)布深度執(zhí)行功能,可一鍵生成專業(yè)報告
- 新年芯幣競價第二期——開發(fā)板競價
- 答題有好禮 | 是德科技《優(yōu)化物聯(lián)網(wǎng)設(shè)備電池續(xù)航時間的4個技巧》
- 獨家拆解 | 語音控制在真無線立體聲TWS耳機上的創(chuàng)新應(yīng)用
- 【EE團】ST最新STM32F429i高性能開發(fā)板重磅登場
- 月度原創(chuàng)精選評選2018年6月(總第5期)
- 【已結(jié)束】TI 有獎直播|使用低成本 MSPM0 MCU 快速開發(fā)
- “傳感器文旅”小調(diào)查:你比較期待哪類傳感器的主題文旅?
- 學(xué)《TIVA C Launchpad入門課程》 曬成績 贏大禮!
- 兆易GD32307E-START免費測評試用
- 恩智浦LPC2000系列全套資料!