0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在ZLG打造的AWorks嵌入式實(shí)時(shí)操作系統(tǒng)中,如何創(chuàng)建一個(gè)自定義的USB設(shè)備

UtFs_Zlgmcu7890 ? 來源:lq ? 2019-05-09 09:27 ? 次閱讀

由于USB的靈活性,已被廣泛應(yīng)用于PC機(jī)的人機(jī)接口、存儲及嵌入式系統(tǒng)中。本文為大家介紹在ZLG打造的AWorks嵌入式實(shí)時(shí)操作系統(tǒng)中,如何創(chuàng)建一個(gè)自定義的USB設(shè)備。

USB,是英文Universal Serial Bus(通用串行總線的縮寫),是一種快速、靈活的總線接口。USB對所有的USB外設(shè)提供了單一的易于使用的標(biāo)準(zhǔn)的連接類型,簡化了USB外設(shè)的設(shè)計(jì)。USB接口支持熱插拔,計(jì)算機(jī)系統(tǒng)可以動(dòng)態(tài)地檢測外設(shè)的插拔,并且動(dòng)態(tài)地加載驅(qū)動(dòng)程序。另外,USB還具有很靈活的擴(kuò)展性,一個(gè)USB端口接上一個(gè)USB HUB(集線器)就可以擴(kuò)展多個(gè)USB端口。USB廣泛的應(yīng)用于PC機(jī)中的人機(jī)接口、音頻、存儲等功能,隨著嵌入式系統(tǒng)在各個(gè)領(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ī)范演變而來,它的傳輸速率達(dá)到了480Mbps,足以滿足大多數(shù)外設(shè)的速率要求。USB2.0中的EHCI(增強(qiáng)主機(jī)控制器接口)定義了一個(gè)與USB1.1相兼容的結(jié)構(gòu)。它可以用USB2.0的驅(qū)動(dòng)程序驅(qū)動(dòng)USB1.1的設(shè)備,也就是說所有支持USB1.1的設(shè)備都可以直接在USB2.0的接口上使用而不必?fù)?dān)心兼容性問題。

USB采用四線電纜,其中兩根是用來傳送數(shù)據(jù)的串行通道,另兩根為下游設(shè)備提供電源,對于任何已經(jīng)成功連接且相互識別的外設(shè),將以對方設(shè)備均能夠支持的最高速率傳輸數(shù)據(jù)。USB總線會(huì)根據(jù)外設(shè)情況在所兼容的傳輸模式中自動(dòng)地由高速向低速動(dòng)態(tài)轉(zhuǎn)換且匹配鎖定在合適的速率。USB系統(tǒng)采用級聯(lián)星型拓?fù)?,該拓?fù)溆扇齻€(gè)基本部分組成:主機(jī),集線器和功能設(shè)備。

主機(jī)包含有主控制器和根集線器,控制著USB總線上的數(shù)據(jù)和控制信息的流動(dòng),每個(gè)USB系統(tǒng)只能有一個(gè)根集線器,它連接在主控制器上。

集線器是USB結(jié)構(gòu)中的特定成分,它可以對原有的USB端口在數(shù)量上進(jìn)行擴(kuò)展以獲得更多的USB端口(集線器只能擴(kuò)展出更多的USB端口,而不能擴(kuò)展出更多的帶寬),設(shè)備通過端口連接到USB總線上,同時(shí)檢測連接在總線上的設(shè)備,并為這些設(shè)備提供電源管理,負(fù)責(zé)總線的故障檢測和恢復(fù)。集線可為總線提供能源,亦可為自身提供能源。

功能設(shè)備通過端口與總線連接。

本文章以M1052平臺為例,主要講解在AWorks平臺中如何創(chuàng)建一個(gè)自定義的USB設(shè)備。

1AWorks工程配置

在AWorks工程中,用戶可以通過aw_prj_params.h配置文件進(jìn)行設(shè)備添加與刪除,aw_prj_params.h在工程目錄user_config中。

在aw_prj_params.h文件中,有效定義設(shè)備的使能宏,才表示一個(gè)有效的硬件設(shè)備,在本文章中我們需要使能USB Device,所以在aw_prj_params.h中添加AW_DEV_IMX1050_USBD設(shè)備宏。

在aw_prj_params.h中添加AW_DEV_IMX1050_USBD設(shè)備宏之后,在aw_prj_param_auto_cfg.h文件中會(huì)自動(dòng)添加AW_COM_USBD的定義,AW_COM_USBD代表的是USB Device協(xié)議棧組件。此處要注意AW_DEV_IMX1050_USBD與AW_DEV_IMX1050_USBH1有沖突(一個(gè)USB控制器不能同時(shí)出現(xiàn)主機(jī)設(shè)備模式),兩個(gè)只能使能一個(gè)。AW_DRV_IMX1050_USBD表示加載USB Device的驅(qū)動(dòng):

2AWorks中USB Device的硬件配置

在AWorks中所有設(shè)備集中由AWbus_lite進(jìn)行管理,在使用一個(gè)硬件設(shè)備前,必須將其添加到系統(tǒng)硬件設(shè)備列表(在awbus_lite_hwconf_usrcfg.c中定義),各個(gè)硬件設(shè)備的類型為struct awbl_devhcf。USB設(shè)備相關(guān)硬件配置可以查閱工程目錄下的:

\user_config\awbl_hwconf_usrcfg\awbl_hwconf_imx1050_usbd.h文件,USB設(shè)備模式的設(shè)備信息詳見程序清單2.1。

程序清單2.1 USB設(shè)備模式的設(shè)備信息類型定義

其中"/dev/usbd" 是USB Device外設(shè)的設(shè)備名字,在實(shí)際的應(yīng)用中需要通過該名字來使用USB Device

AWBL_USBD_CFG_SELF_POWERED 表示本設(shè)備為自行供電設(shè)備。__imx1050_usbd_plfm_init函數(shù)是用來初始化與USB Device平臺相關(guān)的信息,在這里是初始化USB Device時(shí)鐘,詳見程序清單2.2。

程序清單2.2 USB設(shè)備模式的平臺初始化函數(shù)

3與USB Device操作函數(shù)相關(guān)重要結(jié)構(gòu)體介紹

USB設(shè)備類回調(diào)函數(shù)列表,這個(gè)結(jié)構(gòu)體用于提供USB枚舉以及USB通信過程中的事件回調(diào)接口,方便用戶接入應(yīng)用代碼:

USB設(shè)備信息結(jié)構(gòu)體,此結(jié)構(gòu)體用于配置USB設(shè)備的基礎(chǔ)信息(具體信息詳見結(jié)構(gòu)體定義),當(dāng)設(shè)備連接到PC端后,可以在PC端查看到這些信息:

USB設(shè)備接口信息結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體是用來描述當(dāng)前USB設(shè)備接口的信息:

4USB Device操作接口

AWorks提供了一系列的USB Device操作相關(guān)的標(biāo)準(zhǔn)接口,包括初始化一個(gè)USB設(shè)備、USB功能初始化、啟動(dòng)USB設(shè)備和USB數(shù)據(jù)傳輸?shù)?,用戶在使用AWorks開發(fā)USB Device的應(yīng)用程序時(shí),使用上述標(biāo)準(zhǔn)接口就能方便快捷的開發(fā)出源代碼。詳見表4.1

表4.1 USB設(shè)備模式操作接口函數(shù)

struct aw_usbd 為USB Device對象

struct aw_usbd_fun 為功能接口對象

struct aw_usbd_pipe 為端點(diǎn)管道對象

5應(yīng)用案例代碼詳解

這里基于M1052平臺,展示如何創(chuàng)建一個(gè)自定義的USB設(shè)備。本例子會(huì)初始化一個(gè)USB設(shè)備,為USB設(shè)備創(chuàng)建一個(gè)OUT管道和一個(gè)IN管道用于接收和發(fā)送數(shù)據(jù)(IN和OUT的概念是相對于USB主機(jī)而言),并在這個(gè)USB設(shè)備添加接口功能。通過USB設(shè)備與PC機(jī)的連接,實(shí)現(xiàn)與PC的通訊,當(dāng)PC機(jī)上位機(jī)軟件發(fā)送數(shù)據(jù)時(shí),USB設(shè)備通過OUT管道接收數(shù)據(jù),并通過IN管道把收到的數(shù)據(jù)發(fā)送回PC端上位機(jī)。這里只對部分關(guān)鍵的代碼進(jìn)行講解,完整的代碼請自行下載查看,本例程所在目錄位于:

\examples\peripheral\common\usb\ demo_usbd_vendor.c

定義數(shù)據(jù)接收緩沖區(qū)的大小和等待超時(shí)時(shí)間:

定義USB Device的信息,當(dāng)USB Device與PC端連接時(shí),PC端會(huì)對其進(jìn)行枚舉從而獲取USB Device的設(shè)備信息,這些信息都可以在PC端進(jìn)行查看:

USB Device接口信息結(jié)構(gòu)體:

USB Device例程入口函數(shù),這里主要是初始化USB Device對象,并為這個(gè)USB Device對象添加自定義功能,最后通過調(diào)用aw_usbd_start函數(shù)啟動(dòng)配置好的USB Device。

創(chuàng)建USB Device自定義功能,在本例程中,調(diào)用aw_usbd_pipe_create函數(shù)為USB Devie的自定義功能創(chuàng)建兩個(gè)管道,一個(gè)OUT管道和一個(gè)IN管道用于接收和發(fā)送數(shù)據(jù),然后把這個(gè)功能添加進(jìn)上文中初始化好的USB Device對象,最后創(chuàng)建一個(gè)任務(wù)用于接收數(shù)據(jù)并把數(shù)據(jù)發(fā)送回去。

USB Device接收發(fā)送任務(wù),當(dāng)USB Device連接到PC端后,PC端檢測到USB Device的設(shè)備信息和設(shè)置功能接口后,就會(huì)調(diào)用USB Device接口信息的回調(diào)函數(shù)__custom_alt_set,__custom_alt_set會(huì)發(fā)送信號量,通知USB Device接收發(fā)送任務(wù)USB Device已連接到PC端,然后進(jìn)入等待數(shù)據(jù)接收狀態(tài),當(dāng)收到數(shù)據(jù)后會(huì)取消阻塞狀態(tài),然后把收到的數(shù)據(jù)通過IN管道再發(fā)送出去:

6應(yīng)用案例演示

把完整的例程拷貝到工程的user_code目錄,并把USB Device入口函數(shù)demo_usbd_vendor_entry添加到main.c文件中:

編譯程序并把程序燒寫進(jìn)M1052開發(fā)板后,通過USB線連接開發(fā)板上的USB HOST1 和PC機(jī),這時(shí)PC即會(huì)檢測到有USB設(shè)備插入,在PC機(jī)上安裝對應(yīng)的驅(qū)動(dòng)后,PC機(jī)識別到我們的自定義USB設(shè)備。

打開PC端串口打?。?/p>

PC端上檢測到USB Device的插入,此時(shí)因?yàn)镻C端沒有相應(yīng)的驅(qū)動(dòng),所以檢測到是未知設(shè)備:

在PC機(jī)上安裝相應(yīng)的驅(qū)動(dòng)后,PC機(jī)識別到我們的自定義USB設(shè)備:

打開專用的USB通訊軟件,選擇要操作的端點(diǎn),因?yàn)樵诒纠讨袆?chuàng)建了兩個(gè)管道,一個(gè)IN管道一個(gè)OUT管道,所以在軟件中會(huì)看到本USB設(shè)備有兩個(gè)端點(diǎn),選擇后會(huì)出現(xiàn)兩個(gè)窗口,一個(gè)是接收一個(gè)是發(fā)送。

在發(fā)送窗口輸入想要發(fā)送的數(shù)據(jù),點(diǎn)擊發(fā)送,接收窗口就會(huì)收到響應(yīng)的數(shù)據(jù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18909

    瀏覽量

    300740
  • 集線器
    +關(guān)注

    關(guān)注

    0

    文章

    378

    瀏覽量

    39386
  • USB設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    56

    瀏覽量

    16310
  • 嵌入式實(shí)時(shí)操作系統(tǒng)

    關(guān)注

    1

    文章

    127

    瀏覽量

    7810

原文標(biāo)題:AWorks?編程——USB設(shè)備模式的使用

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【安富萊】【RTX操作系統(tǒng)教程】第2章 嵌入式實(shí)時(shí)操作系統(tǒng)介紹

    操作系統(tǒng)。注:工業(yè)控制、 軍事設(shè)備、 航空航天等領(lǐng)域?qū)?b class='flag-5'>系統(tǒng)的響應(yīng)時(shí)間有苛刻的要求,這就需要使用實(shí)時(shí)系統(tǒng)
    發(fā)表于 01-15 15:35

    轉(zhuǎn):第2章嵌入式實(shí)時(shí)操作系統(tǒng)介紹

    系統(tǒng)定義 當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚?b class='flag-5'>系統(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)
    發(fā)表于 08-19 09:47

    【案例分享】FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)

    FreeRTOS是個(gè)源碼公開的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過研究其內(nèi)核可以更好地理解嵌入式
    發(fā)表于 07-23 04:30

    嵌入式操作系統(tǒng)USB雙向通信怎么實(shí)現(xiàn)?

    。本文介紹種基于S1C33L11芯片利用嵌入式操作系統(tǒng)的同步機(jī)制通過對循環(huán)隊(duì)列及自定義控制包的操作來實(shí)現(xiàn)雙向通信的方法。
    發(fā)表于 03-19 07:35

    如何在嵌入式操作系統(tǒng)ARM Linux實(shí)現(xiàn)ZLG7290的驅(qū)動(dòng)?

    I2C總線接口的工作模式和特點(diǎn)如何在嵌入式操作系統(tǒng)ARM Linux實(shí)現(xiàn)ZLG7290的驅(qū)動(dòng)?I2C總線傳送數(shù)據(jù)過程中有哪幾種信號?
    發(fā)表于 04-23 06:00

    嵌入式實(shí)時(shí)操作系統(tǒng)教程

    嵌入式實(shí)時(shí)操作系統(tǒng)教程:以VRTX為對象詳細(xì)介紹了嵌入式實(shí)時(shí)操作系統(tǒng)的原理和應(yīng)用,特別是第
    發(fā)表于 04-19 21:55 ?44次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>教程

    嵌入式操作系統(tǒng)USB雙向通信的設(shè)計(jì)與實(shí)現(xiàn)

    本文介紹種基于S1C33L11芯片利用嵌入式操作系統(tǒng)的同步機(jī)制通過對循環(huán)隊(duì)列及自定義控制包的操作來實(shí)現(xiàn)雙向通信的方法。
    發(fā)表于 08-16 12:09 ?1253次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>中</b><b class='flag-5'>USB</b>雙向通信的設(shè)計(jì)與實(shí)現(xiàn)

    實(shí)時(shí)操作系統(tǒng)用于嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)

    概述了嵌入式系統(tǒng)的開發(fā)工具實(shí)時(shí)操作系統(tǒng)的特點(diǎn)和核心內(nèi)容;分析了利用實(shí)時(shí)
    發(fā)表于 10-10 15:23 ?42次下載
    <b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>用于<b class='flag-5'>嵌入式</b>應(yīng)用<b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)

    基于FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的原理和實(shí)現(xiàn)

    FreeRTOS是個(gè)源碼公開的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過研究其內(nèi)核可以更好地理解嵌入式
    發(fā)表于 11-18 03:34 ?6609次閱讀

    不同的實(shí)時(shí)嵌入式Linux操作系統(tǒng)有什么差異

    嵌入式實(shí)時(shí)操作系統(tǒng)(Embedded Real-time Operation System,RTOS)。嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助
    發(fā)表于 11-06 11:36 ?1224次閱讀

    嵌入式實(shí)時(shí)操作系統(tǒng)的應(yīng)用詳細(xì)教程說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是嵌入式實(shí)時(shí)操作系統(tǒng)的應(yīng)用詳細(xì)教程說明包括了:1 嵌入式系統(tǒng)嵌入式
    發(fā)表于 12-05 08:00 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>的應(yīng)用詳細(xì)教程說明

    嵌入式實(shí)時(shí)操作系統(tǒng)

    14 種主流的嵌入式實(shí)時(shí)操作系統(tǒng) RTOS,分別為μClinux、μC/OS-II、eCos、FreeRTOS、mbed OS、RTX、Vxworks、QNX、NuttX,而國產(chǎn)的嵌入式
    發(fā)表于 10-20 14:05 ?17次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>

    嵌入式操作系統(tǒng)

    嵌入式操作系統(tǒng)一嵌入式操作系統(tǒng)概述1.1 嵌入式操作系統(tǒng)的特點(diǎn)1.2
    發(fā)表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>

    基于HAL庫的USB自定義HID設(shè)備實(shí)現(xiàn)

    設(shè)備,實(shí)現(xiàn)USB人機(jī)接口通訊。參考博文https://blog.csdn.net/zhanglifu3601881/article/details/89675307準(zhǔn)備工作1.CubeMX創(chuàng)
    發(fā)表于 12-28 20:04 ?13次下載
    基于HAL庫的<b class='flag-5'>USB</b><b class='flag-5'>自定義</b>HID<b class='flag-5'>設(shè)備</b>實(shí)現(xiàn)

    嵌入式開發(fā)自定義協(xié)議的解析與組包

    嵌入式產(chǎn)品開發(fā),經(jīng)常會(huì)遇到兩個(gè)設(shè)備之間的通信、設(shè)備與服務(wù)器的通信、
    發(fā)表于 01-25 11:14 ?5次下載
    <b class='flag-5'>嵌入式</b>開發(fā)<b class='flag-5'>中</b><b class='flag-5'>自定義</b>協(xié)議的解析與組包