在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

從數(shù)據(jù)傳輸?shù)慕嵌壤斫釭adge框架

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-13 11:41 ? 次閱讀

5.1 使用流程

USB 協(xié)議中,永遠是 Host 主動發(fā)起傳輸。作為一個 Gadget 驅(qū)動程序,它永遠都是這樣:

  • 想接收數(shù)據(jù):
    • 先構(gòu)造好 usb_request:分配 buffer、設(shè)置回調(diào)函數(shù)
    • 把 usb_request 放入隊列
    • UDC 和 Host 完成 USB 傳輸,在 usb_request 中填充數(shù)據(jù),并觸發(fā)中斷調(diào)用 usb_request 的回調(diào)函數(shù)
  • 想發(fā)送數(shù)據(jù):
    • 先構(gòu)造好 usb_request:分配 buffer、在 buffer 里填充數(shù)據(jù)、設(shè)置回調(diào)函數(shù)
    • 把 usb_request 放入隊列
    • UDC 和 Host 完成 USB 傳輸,把 usb_request 的數(shù)據(jù)發(fā)給 Host,并觸發(fā)中斷調(diào)用 usb_request 的回調(diào)函數(shù)

5.2 endpoint 是核心

USB 傳輸?shù)膶ο笫?endpoint,使用流程如下:

  • 功能驅(qū)動里,通過 endpoint 描述符表明需要怎樣的 endpoint,比如(注意:bEndpointAddress 是表明方向,里面還沒有地址,driversusbgadgetfunctionf_loopback.c):

圖片

  • 功能驅(qū)動里,它的 bind 函數(shù)根據(jù) endpoint 描述符向底層申請分配 endpoint,比如:

圖片

  • 功能驅(qū)動里,使能 endpoint,比如:

圖片

  • 功能驅(qū)動里,給 endpoint 分配 buffer、設(shè)置 usb_request、提交 usb_request,比如:

圖片

5.3 回調(diào)函數(shù)

功能驅(qū)動里構(gòu)造的 usb_request,可以是接收 Host 發(fā)來的數(shù)據(jù),也可以是向 Host 發(fā)送數(shù)據(jù)。當(dāng)傳輸完成,usb_request 的回調(diào)函數(shù)被調(diào)用。

在回調(diào)函數(shù)里,可以再次提交 usb_request。

怎么調(diào)用到回調(diào)函數(shù)?源頭是 UDC 的中斷函數(shù)。

5.3.1 IMX6ULL

調(diào)用關(guān)系如下:

// Linux-4.9.88driversusbchipideacore.c
ci_irq
 /* Handle device/host interrupt */
 if (ci- >role != CI_ROLE_END)
  ret = ci_role(ci)- >irq(ci);  // udc_irq
   udc_irq
                if (USBi_UI  & intr)
                    isr_tr_complete_handler(ci);
                     err = isr_tr_complete_low(hwep);
                        usb_gadget_giveback_request(&hweptemp- >ep, &hwreq- >req);
                         req- >complete(ep, req);

5.3.2 STM32MP157

調(diào)用關(guān)系如下:

// Linux-5.4driversusbdwc2gadget.c
dwc2_hsotg_irq
  // 處理endpoint中斷
  for (ep = 0; ep < hsotg- >num_of_eps && daint_out;
      ep++, daint_out > >= 1) {
   if (daint_out & 1)
    dwc2_hsotg_epint(hsotg, ep, 0);
     dwc2_hsotg_handle_outdone(hsotg, idx);
      dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, result);
       usb_gadget_giveback_request(&hs_ep- >ep, &hs_req- >req);
        req- >complete(ep, req);
  }

  for (ep = 0; ep < hsotg- >num_of_eps  && daint_in;
      ep++, daint_in > >= 1) {
   if (daint_in & 1)
    dwc2_hsotg_epint(hsotg, ep, 1);
     dwc2_hsotg_complete_in(hsotg, hs_ep);
      dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0);
       usb_gadget_giveback_request(&hs_ep- >ep, &hs_req- >req);
        req- >complete(ep, req);
  }

5.4 f_loopback分析

loopback 就是回環(huán),Host 發(fā)數(shù)據(jù)給 Gadget,然后再讀 Gadget 就可以得到原樣的數(shù)據(jù)。

5.4.1 Gadget接收數(shù)據(jù)

Host 選擇某個配置時,默認會選擇這個配置下那些接口的第 0 個設(shè)置(altsetting);

當(dāng) Host 發(fā)來 USB_REQ_SET_INTERFACE 請求時,可以選擇指定的設(shè)置。

所以,我們從 f_loopback.c 的函數(shù)loopback_set_alt開始分析。

調(diào)用關(guān)系為:

loopback_set_alt
 enable_loopback
  result = enable_endpoint(cdev, loop, loop- >in_ep);
  
  result = enable_endpoint(cdev, loop, loop- >out_ep);
  
  result = alloc_requests(cdev, loop);

圖片

如上圖所示,先提交的是 out_req,它在等待 Host 發(fā)來數(shù)據(jù)。

假設(shè)斷點 loop->out_ep 的 out_req 獲得了數(shù)據(jù),它的回調(diào)函數(shù)loopback_complete被調(diào)用,如下:

圖片

5.4.2 Gadget 回環(huán)數(shù)據(jù)

圖片

5.5 f_sourcesink 分析

前面的 f_loopback 也實現(xiàn)了兩個方向的數(shù)據(jù)傳輸:Host 到 Gadget、Gadget 到 Host,但是它們之間是有依賴關(guān)系的,Host 必須先發(fā)送數(shù)據(jù)再讀數(shù)據(jù)。

f_sourcesink.c 也實現(xiàn)了兩個方向的數(shù)據(jù)傳輸:Host 到 Gadget、Gadget 到 Host,它們是獨立的。

  • Host 讀 Gadget:驅(qū)動程序里構(gòu)造好數(shù)據(jù),Host 可以讀到,Gadget 作為源(source)
  • Host 寫 Gadget:驅(qū)動程序里得到 Host 發(fā)來的數(shù)據(jù),Gadget 作為目的(sink)

5.5.1 Host 寫 Gadget

Host 選擇某個配置時,默認會選擇這個配置下那些接口的第 0 個設(shè)置(altsetting);

當(dāng) Host 發(fā)來 USB_REQ_SET_INTERFACE 請求時,可以選擇指定的設(shè)置。

所為,我們從 f_sourcesink.c 的函數(shù)sourcesink_set_alt開始分析。

sourcesink_set_alt
 enable_source_sink(cdev, ss, alt);

圖片

作為"source",函數(shù)source_sink_start_ep會構(gòu)造數(shù)據(jù)、提交 usb_request:

圖片

當(dāng) Host 讀取到數(shù)據(jù)后,usb_request 的回調(diào)函數(shù)被調(diào)用,它只是再次提交 USB 請求,給 Host 繼續(xù)提供跟上次一樣的數(shù)據(jù):

圖片

5.5.2 Host 讀 Gadget

仍然從 f_sourcesink.c 的函數(shù)sourcesink_set_alt開始分析。

sourcesink_set_alt
 enable_source_sink(cdev, ss, alt);

圖片

作為"sink",函數(shù)source_sink_start_ep會故意把數(shù)據(jù)設(shè)置為 0x55(這是為了調(diào)試,當(dāng)讀到數(shù)據(jù)時可以看到 0x55 被覆蓋)、提交 usb_request:

圖片

當(dāng) Host 發(fā)來數(shù)據(jù),usb_request 的回調(diào)函數(shù)被調(diào)用,它檢查收到的數(shù)據(jù),再次提交 usb_request:

圖片

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

    關(guān)注

    5096

    文章

    19199

    瀏覽量

    308171
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11353

    瀏覽量

    210606
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17558
收藏 人收藏

    評論

    相關(guān)推薦

    無線數(shù)據(jù)傳輸模塊的實際應(yīng)用

    隨著無線數(shù)據(jù)傳輸技術(shù)的發(fā)展,無線傳輸模塊的穩(wěn)定可靠、安裝簡便、靈活性高等優(yōu)勢獲得了廣泛的應(yīng)用,特別是在無線抄表、環(huán)境監(jiān)測等方向,無線數(shù)據(jù)傳輸模塊發(fā)揮著重要的傳輸
    發(fā)表于 06-18 04:21

    USART數(shù)據(jù)傳輸模型怎么理解

    親愛的所有人,正如我所能檢查到的,有三種不同的數(shù)據(jù)傳輸方式:a)使用逐字節(jié)模型-這用于一次傳輸一個字節(jié);b)使用文件I/O類型讀/寫傳輸模型-應(yīng)用程序調(diào)用USART驅(qū)動程序讀/寫例程通過USART
    發(fā)表于 04-23 13:56

    DMA進行數(shù)據(jù)傳輸和CPU進行數(shù)據(jù)傳輸的疑問

    求大佬解答,本人正在學(xué)習(xí)STM32單片機中DMA直接數(shù)據(jù)存儲部分的內(nèi)容 看了DMA簡介后,也上手過實例代碼,但是沒有實際的項目經(jīng)驗,所以有以下疑問: DMA外設(shè)在進行數(shù)據(jù)傳輸的操作,是否也是需要經(jīng)過
    發(fā)表于 05-25 17:18

    數(shù)據(jù)傳輸

    通信工程叢書--數(shù)據(jù)傳輸 這資料還是不錯的,可供參考學(xué)習(xí)哦!
    發(fā)表于 03-25 00:53 ?29次下載

    數(shù)據(jù)傳輸介質(zhì)

    2.5  數(shù)據(jù)傳輸介質(zhì)      傳輸介質(zhì)是通信網(wǎng)絡(luò)中連接計算機的具體物理設(shè)備和數(shù)據(jù)傳輸物理通路。傳輸介質(zhì)的特性包括物理描述
    發(fā)表于 06-27 21:47 ?0次下載

    什么是內(nèi)部數(shù)據(jù)傳輸

    什么是內(nèi)部數(shù)據(jù)傳輸率       數(shù)據(jù)傳輸率的單位一般采用MB/s或Mbit/s,尤其在內(nèi)部數(shù)據(jù)傳輸率上官方數(shù)據(jù)中更多的采
    發(fā)表于 06-17 07:39 ?1723次閱讀

    IDE數(shù)據(jù)傳輸模式

    IDE數(shù)據(jù)傳輸模式 隨著技術(shù)的發(fā)展,產(chǎn)品對數(shù)據(jù)傳輸速度要求的提高,IDE接口硬盤的數(shù)
    發(fā)表于 12-25 14:58 ?411次閱讀

    Modem數(shù)據(jù)傳輸標準

     Modem數(shù)據(jù)傳輸標準 數(shù)據(jù)傳輸標準是指MODEM的
    發(fā)表于 12-28 13:29 ?1040次閱讀

    RAID卡的數(shù)據(jù)傳輸速度

    RAID卡的數(shù)據(jù)傳輸速度              數(shù)據(jù)傳輸速度是指硬盤接口的傳輸速度。比如ATA100接口硬盤的
    發(fā)表于 01-09 10:47 ?2070次閱讀

    數(shù)據(jù)傳輸,數(shù)據(jù)傳輸的工作方式有哪些?

    數(shù)據(jù)傳輸,數(shù)據(jù)傳輸的工作方式有哪些? 將數(shù)據(jù)從一個地方傳輸到另一個地方的方法多得令人難以置信。 數(shù)
    發(fā)表于 03-18 14:41 ?6021次閱讀

    數(shù)據(jù)傳輸速率是什么意思

    數(shù)據(jù)傳輸速率是什么意思 數(shù)據(jù)傳輸速率是通過信道每秒可傳輸的數(shù)字信息量的量度。數(shù)據(jù)傳輸速率也稱為吞吐率。數(shù)據(jù)傳輸速率由很
    發(fā)表于 03-18 14:45 ?4999次閱讀

    tcp_ip 協(xié)議講座:介紹數(shù)據(jù)傳輸

    介紹了tcp協(xié)議:數(shù)據(jù)傳輸的問題(交互式數(shù)據(jù)傳輸,批量數(shù)據(jù)傳輸,流量控制,擁塞避免)
    的頭像 發(fā)表于 07-03 11:05 ?3500次閱讀
    tcp_ip 協(xié)議講座:介紹<b class='flag-5'>數(shù)據(jù)傳輸</b>

    硬件軟件角度理解Gadget框架

    2. 硬件軟件角度理解 Gadget 框架 USB 傳輸的核心是 endpoint,使用 endpoint 可以收發(fā)
    的頭像 發(fā)表于 07-13 11:32 ?1210次閱讀
    <b class='flag-5'>從</b>硬件軟件<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Gadget<b class='flag-5'>框架</b>

    SPI數(shù)據(jù)傳輸有哪些方式

    SPI 數(shù)據(jù)傳輸可以有兩種方式:同步方式和異步方式。 同步方式:數(shù)據(jù)傳輸的發(fā)起者必須等待本次傳輸的結(jié)束,期間不能做其它事情,用代碼來解釋就是,調(diào)用傳輸的函數(shù)后,直到
    的頭像 發(fā)表于 07-25 10:54 ?5309次閱讀
    SPI<b class='flag-5'>數(shù)據(jù)傳輸</b>有哪些方式

    網(wǎng)絡(luò)數(shù)據(jù)傳輸速率的單位是什么

    網(wǎng)絡(luò)數(shù)據(jù)傳輸速率的單位是 bps(bit per second) ,即比特每秒,也可以表示為b/s或bit/s。它表示的是每秒鐘傳輸的二進制數(shù)的位數(shù)。比特(bit)是計算機中數(shù)據(jù)量的單位,也是信息論
    的頭像 發(fā)表于 10-12 10:20 ?1947次閱讀
    主站蜘蛛池模板: 韩国三级理论在线看中文字幕 | 三级网站在线播放 | 国产三级日本三级韩国三级在线观看 | 手机看片久久青草福利盒子 | 午夜在线网站 | 色一欲一性一乱一区二区三区 | 色屁屁www免费看视频影院 | www.淫| 视频在线高清完整免费观看 | 国产jlzzjlzz视频免费 | 国产激情久久久久影院小草 | 中文字幕一区二区三区免费看 | 88av视频在线 | 亚洲一区二区影院 | 丁香六月激情婷婷 | 日本免费一级视频 | 成年人视频黄色 | 午夜影院性 | 国产视频二区 | 男女爱爱福利 | 欧美极品另类xxx | 成人美女隐私免费 | 国产高清在线视频 | 久久精品视频9 | 国产a一级毛片午夜剧场14 | 亚洲综合色在线 | 国产牛牛| 涩涩涩丁香色婷五月网视色 | 天天干夜夜骑 | 四虎在线精品免费高清在线 | 激情综合网激情 | 四虎影院免费在线播放 | 在线精品视频成人网 | 色老成人精品视频在线观看 | 男人的天堂色偷偷之色偷偷 | 视频一本大道香蕉久在线播放 | 综合久 | 午夜精品视频在线 | 五月亭亭免费高清在线 | 久青草视频免费视频播放线路1 | 久久狠狠躁免费观看 |