国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

winUSB設備的開發方法

RTThread物聯網操作系統 ? 來源:未知 ? 2022-12-14 20:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、winUSB功能介紹

winUSB設備在win10系統下自帶驅動程序的,winUSB設備連接到USB后,可以直接被系統識別,無需安裝驅動,實現了免驅的功能。就像鍵盤、鼠標插入到電腦上直接使用一下。

winUSB設備使用BULK傳輸,具有傳輸數據量的優點,設備使用BULK IN, BULK OUT,CONTROL3個端點來進行通信。因此winUSB設備在開發USB產品時是一個很好的選擇。

2、winUSB軟件選型

winUSB軟件采用RT thread操作系統自帶的USB device協議中 Winusb類驅動,此協議棧已經實現了USB的基本功能,具體代碼可以參考分享倉庫地址:GitHub - longtengmcu/USB-HOST-driver-4G-rndis-device: STM32F429 USB HOST driver 4G rndis device, Realization of high speed Ethernet data communication。

1程序在STM32中運行USB連接到WIN10電腦后是可以直接枚舉到的,但是具體進行數據通信時要做軟件上的修改。
2其中對于winUSB部分代碼做了改進:

對于winUSB的read部分函數:修改成讀取剩余部分的數據,這樣在USB主機發送一包數據后就會立即觸發接收回調函數來處理數據,原來的寫法是接收到輸入緩沖區長度的數據后才什么觸發接收回調函數。

d6566716-7ba4-11ed-8abf-dac502259ad0.png

對winusb設備端點IN處理流程中增加對發送整最大包數長度數據的處理,即這種情況下發送一個ZLP,0長度包,讓主機知道這次傳輸完成。

d6754776-7ba4-11ed-8abf-dac502259ad0.png

到這里,winUSB的驅動部分已經改好了。但是要做USB進行通信還有很多代碼要寫。

3、winUSB應用程序的編寫

winUSB設備在RT THREAD操作系統中注冊成winUSB設備,所以對winUSB的讀寫要使用設備操作的幾個函數rt_device_find, rt_device_open, rt_device_read, rt_device_write。感覺跟其他設備一樣,但是在實際調試過程中由于底層是USB設備,用法還是有不少區別的,應用時要做很多特殊的處理。

3.1 winUSB設備的初始化

1初始化時跟基他設備類型,find,open,注意除了注冊接收回調函數外還要注冊發送回調函數。最后必須先調用一下rt_device_read()給winUSB設備接收數據時傳入接收數據使用的緩沖區,同時啟動USB設備接收。
 1/*findandopencommanddevice*/
 2dev_name=“winUSB”
 3client->device=rt_device_find(dev_name);
 4if(client->device)
 5{
 6/*usingthetxinterruptwhenuartisRS485*/
 7open_result=rt_device_open(client->device,RT_DEVICE_OFLAG_RDWR);
 8RT_ASSERT(open_result==RT_EOK);
 9rt_device_set_tx_complete(client->device,utc_d_tx_ind);
10rt_device_set_rx_indicate(client->device,utc_d_rx_ind);
11client->putc_package=client->utcA_package;
12/*waitreadthewinusbdevicesuccess*/
13while(rt_device_read(client->device,0,client->putc_package,sizeof(client->utcA_package))==0)
14{
15rt_thread_mdelay(10);
16}
17}
18else
19{
20LOG_E("Notfindthedevice(%s).",dev_name);
21result=-RT_ERROR;
22}

		
1接收回調函數,USB設備接收到數據后,發送一個信號量給接收數據的線程通知數據處理。這個接收回調函數中使用雙緩沖區,讓接收數據與處理數據互不干擾。

		
 1staticrt_err_tutc_d_rx_ind(rt_device_tdev,rt_size_tsize)
 2{
 3utc_d_client_tclient=&utc_d_client;
 4if(client->package_len)
 5{
 6LOG_W("utcpackageoverwrite!");
 7}
 8client->package_len=size;
 9if(client->putc_package==client->utcA_package)
10{
11client->putc_package=client->utcB_package;
12}
13else
14{
15client->putc_package=client->utcA_package;
16}
17/*readtheusbdatanext*/
18rt_device_read(dev,0,client->putc_package,sizeof(client->utcA_package));
19if(size)
20{
21/*releasethesem*/
22rt_sem_release(client->rx_notice);
23}
24returnRT_EOK;
25}

		

		
1發送回調函數,usb設備發送成功后會調用發送回調函數,發送一個信號量,通知發送函數已經成功完成發送,這個功能非常重要,否則,USB設備無法正常工作。

		
1staticrt_err_tutc_d_tx_ind(rt_device_tdev,void*buffer)
2{
3utc_d_client_tclient=&utc_d_client;
4rt_sem_release(client->tx_notice);
5returnRT_EOK;
6}

		
1usb設備發送函數通過rt_device_write函數把數據發送給usb設備驅動后,一定要等待發送完成才行。

			
 1staticintutc_d_send(utc_d_client_tclient,rt_uint8_t*send_data,rt_uint32_tsend_len)
 2{
 3/*sendthepacketcounter*/
 4client->send_packet_counter++;
 5if(rt_device_write(client->device,0,send_data,send_len)==send_len)
 6{
 7/*Mustwaittheusbsenddatafinish*/
 8returnrt_sem_take(client->tx_notice,RT_WAITING_FOREVER);
 9}
10else
11{
12return-RT_ERROR;
13}
14}

			
1至此,winUSB設備的應用程序基本功能就全部實現,你可以基于此來進行與上位機的數據通信了。
2下期預告,winUSB的調試環境搭建與調試方法。

			

winUSB設備上位機驅動開發環境的搭建:

https://club.rt-thread.org/ask/article/691e79f4e05eb0fc.html(請復制至外部瀏覽器打開)

版權聲明:本文為RT-Thread論壇用戶「fhqmcu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:

https://club.rt-thread.org/ask/article/691e79f4e05eb0fc.html


RT-Thread開發者大會

我們將聯合重量級合作伙伴,圍繞AIoT的發展、產業技術趨勢,聚焦控制、連接、行業應用開發,通過主題演講、技術分享、應用演示等環節,助力開發者探索萬物智能的世界,期待與大家一起相聚線上直播間!

現在掃碼報名 我們將在報名者中抽取“幸運參會者100名” 贈送RT-Thread新款開發板(即將揭秘)

d6952e38-7ba4-11ed-8abf-dac502259ad0.png

本次將在大會當天在直播間宣布中獎名單

更多獎品即將來襲...

原文標題:winUSB設備的開發方法

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    32

    文章

    1613

    瀏覽量

    44868

原文標題:winUSB設備的開發方法

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    報名開啟!2026年開源鴻蒙“北向應用”與“南向設備開發研修班等你加入!

    為深化校企合作,推動開源鴻蒙(OpenHarmony)技術發展,促進高校教師掌握開源鴻蒙北向應用開發和南向設備開發的前沿技術與教學實踐方法,提升“雙師型”教師隊伍建設水平,由高校畢業生
    的頭像 發表于 01-08 17:24 ?1171次閱讀
    報名開啟!2026年開源鴻蒙“北向應用”與“南向<b class='flag-5'>設備</b>”<b class='flag-5'>開發</b>研修班等你加入!

    速通攻略 | RK3588開發板U-Boot階段的存儲設備文件讀取方法

    控制器、多規格USB接口等,為存儲設備調試筑牢硬件根基。有了這樣強大的硬件支撐,在實際的開發調試與系統驗證過程中,對各類存儲設備文件內容的讀取操作就顯得尤為重要。
    的頭像 發表于 12-12 08:03 ?966次閱讀
    速通攻略 | RK3588<b class='flag-5'>開發</b>板U-Boot階段的存儲<b class='flag-5'>設備</b>文件讀取<b class='flag-5'>方法</b>

    【免費送書】成為硬核Linux開發者:《Linux 設備驅動開發(第 2 版)》

    Linux系統的設備驅動開發,一直給人門檻較高的印象,主要因內核機制抽象、需深度理解硬件原理、開發調試難度大所致。2021年,一本講解驅動開發的專著問世即獲市場青睞,暢銷近萬冊——這便
    的頭像 發表于 11-18 08:06 ?1394次閱讀
    【免費送書】成為硬核Linux<b class='flag-5'>開發</b>者:《Linux <b class='flag-5'>設備</b>驅動<b class='flag-5'>開發</b>(第 2 版)》

    pcm設備故障及處理方法

    。接下來,我將結合具體案例,詳細剖析PCM設備常見故障的表現、原因及處理方法,幫助大家在面對設備故障時能夠迅速“破案”,恢復通信。 廣州郵科PCM復接設備 一、信號全無:線路與接口的“
    的頭像 發表于 11-10 10:35 ?980次閱讀
    pcm<b class='flag-5'>設備</b>故障及處理<b class='flag-5'>方法</b>

    Windows下解決OpenOCD找不到設備及串口無法識別的方法

    。 但有些時候,Windows系統并不能自動安裝正確的串口驅動,進而影響到IDE的程序燒寫和串口連接功能。另外,有些用戶使用PlatformIO IDE進行開發也遇到相似問題,經實驗,可嘗試用下述方法予以
    發表于 10-20 11:25

    條碼掃碼設備的使用方法

    使用方法,能讓其充分發揮價值,為各行業的規范化管理提供有力支撐。一、條碼掃碼設備的主要類型不同場景對條碼掃碼設備的需求存在差異,目前主流類型可分為四類,適配不同工作
    的頭像 發表于 09-17 16:15 ?935次閱讀
    條碼掃碼<b class='flag-5'>設備</b>的使用<b class='flag-5'>方法</b>

    分享---簡單快速實現烘烤設備UI界面的方法

    本文分享下,如何簡單快速的設計出工業烘烤設備的UI界面方法, 借助 \"墨刀\" 界面原型設計工具,設計烘烤機主界面圖片。 使用拓普微 SGTools開發工具,建立工程和頁面
    發表于 08-26 11:58

    知識分享 | 敏捷方法在基于模型的軟件開發項目中的應用

    傳統的瀑布式軟件開發流程存在諸多局限,這使得應用敏捷原則變得尤為重要,尤其是面對復雜且不斷變化的開發環境時。作為最高效的軟件開發方法之一,基于模型的
    的頭像 發表于 07-16 16:52 ?1273次閱讀
    知識分享 | 敏捷<b class='flag-5'>方法</b>在基于模型的軟件<b class='flag-5'>開發</b>項目中的應用

    Linux系統查看及修改設備型號信息,觸覺智能RK3562開發板演示

    本文介紹Linux系統如何查看及修改設備型號信息的方法,適用于想查看設備型號信息或者想將設備型號信息修改為自己項目的名稱的情況。觸覺智能RK3562
    的頭像 發表于 06-19 15:58 ?1033次閱讀
    Linux系統查看及修改<b class='flag-5'>設備</b>型號信息,觸覺智能RK3562<b class='flag-5'>開發</b>板演示

    波峰焊設備的維護和保養方法

    能延長設備使用壽命,還能降低故障發生率,確保生產順利進行。以下從設備各主要組成部分出發,結合晉力達波峰焊的優勢,詳細介紹波峰焊設備的維護和保養方法。
    的頭像 發表于 06-17 17:03 ?1536次閱讀

    如何將EZ CX3 MIPI庫從Linux移植到Windows?

    ``` [ 0.030676] [000048c8] libusb:調試 [winusb_get_device_list] 發現會話 [57] 的現有設備。 [ 0.030752] [000048c8] libusb
    發表于 05-16 06:59

    使用CYUSB3014進行編程,使用USB 3.0超高速會有什么影響嗎?

    大家好 我正在使用 CYUSB3014 進行編程,我使用了 USB 3.0 超高速。 在我的項目中,我想使用 winusb 驅動程序而不是 fx3 cyusb 驅動程序。 它現在可以工作了,但我
    發表于 05-13 06:13

    基于RV1126開發板的按鍵測試方法與例程

    RV1126開發板的按鍵測試方法與例程詳細描述
    的頭像 發表于 04-15 17:03 ?1043次閱讀
    基于RV1126<b class='flag-5'>開發</b>板的按鍵測試<b class='flag-5'>方法</b>與例程

    HPM6E80 cherryusb_winusb10例程速度測試

    Hi,大家好,我最近用hpm6e80評估板做winusb的速度測試,發現usb的讀寫速度只有大約的 3.2MB/s,比普通USB速度低了很多,后面我用USB Packet Viewer抓取USB
    發表于 03-30 15:03

    封裝失效分析的流程、方法設備

    本文首先介紹了器件失效的定義、分類和失效機理的統計,然后詳細介紹了封裝失效分析的流程、方法設備
    的頭像 發表于 03-13 14:45 ?2161次閱讀
    封裝失效分析的流程、<b class='flag-5'>方法</b>及<b class='flag-5'>設備</b>