1. 程式人生 > >基於STM32的USB列舉過程學習筆記(四)

基於STM32的USB列舉過程學習筆記(四)

    前幾篇介紹中,USB主機完成了獲取裝置的描述符,現在進入第二步,設定裝置的地址階段。

    該階段是一個無資料過程的控制傳輸。首先,在建立過程中USB主機往裝置的端點0發出一個設定地址的請求,新地址在建立過程的資料包中。該事務的結構包括:SETUP0令牌包+SET_ADDRESS資料包+握手包。在建立過程之後直接進入到的狀態過程,因為設定地址階段是一個無資料過程的控制傳輸。在狀態過程,裝置等待主機請求狀態返回(即等待主機發送一個IN令牌包),收到IN令牌包後,裝置就返回一個0長度的資料包,如果主機確認該資料包已經正確收到,就會發送應答包ACK給裝置,裝置收到ACK之後,就要啟動新的裝置地址,這樣裝置就分配到了一個唯一的裝置地址。

    接下來將這段設定地址的過程通過USB分析儀捕捉分析如下

    接著分析STM32 USB_HID例子中的列舉過程的設定地址階段。同樣在接收到主機的setup0令牌後,STM32 USB進入中斷處理函式Setup0_Process(),由於是沒有資料過程的控制傳輸,接著進入NoData_Setup0()函式,函式最後通過USB_StatusIn()等待主機的IN令牌,即狀態階段。主機發IN令牌進入到狀態階段,USB中斷函式中執行In0_Process()函式,該函式把在建立過程函式Setup0_Process()中儲存在pInformation的地址資訊,通過SetDeviceAddress()函式,配置新的裝置地址。串列埠的除錯資訊如下

至此,裝置新的地址設定成功,這裡設定成0x6,之後的過程將使用這個新地址。

相關推薦

基於STM32的USB列舉過程學習筆記()

    前幾篇介紹中,USB主機完成了獲取裝置的描述符,現在進入第二步,設定裝置的地址階段。     該階段是一個無資料過程的控制傳輸。首先,在建立過程中USB主機往裝置的端點0發出一個設定地址的請求,新地址在建立過程的資料包中。該事務的結構包括:SETUP0令牌包+SET

基於STM32的USB列舉過程學習筆記(一)

     之前使用ST官方的庫以及網路的資料,完成了使用USB HID類進行STM32和PC機的通訊。由於其他原因並沒有深入的分析,雖然實現了功能,但是關於USB裝置的列舉,以及具體的通訊方式都沒有清晰的概念,所以現在回頭重新學習USB相關知識。主要參考資料是《圈圈教你玩

基於STM32的USB列舉過程學習筆記(二)

    接下來介紹USB裝置的列舉,列舉就是從裝置讀取各種描述符資訊,這樣主機就可以根據這些資訊來載入合適的驅動,從而知道是什麼樣的裝置,如何進行通訊。 列舉過程使用的是控制傳輸。控制傳輸可以保證資料的正確性。控制傳輸分三個過程:建立過程,可選資料過程及狀態過程。    

opencv學習筆記十九:基於距離變換和區域性自適應閾值的物件計數

案例背景:統計下圖中玉米粒的個數 方案思路:先灰度化,再二值化(基於THRESH_TRIANGLE,圖中直方圖有明顯的雙峰值),腐蝕去掉一些小雜點,距離變換,再自適應區域性閾值,膨脹連成連通域,尋找輪廓進行計數。 距離變換於1966年被學者首次提出,目前已被廣泛應

Oracle資料庫學習筆記——儲存過程的值傳遞和引用傳遞

程式語言中的4種子例程: 由兩種行為定義,即形式值是否返回以及引數列表是值傳遞還是引用傳遞。 如果返回輸出,子例程就是函式,如果不返回,就是過程。 所以4中子例程為: 1.值傳遞函式 2.引用傳遞函式 3.值傳遞過程 4.引用傳遞過程pl/sql值傳遞過程由下列5條規則定義

深度學習模型調參-基於keras的python學習筆記

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_44474718/article/details/86250535 適用於少量資料的實驗是非常有效的方法。 from keras.models import Sequent

如何輸出格式化的字符串(學習筆記

linux python 格式化整數 浮點數 如何輸出格式化的字符串(學習筆記四)我們經常會輸出類似 ‘親愛的xxx你好!你xx月的話費是xx,余額是xx‘ 之類的字符串,而xxx的內容都是根據變量變化的,所以,需要一種簡便的格式化字符串的方式。在Python中,采用的格式化方式和C語言是一致的,

cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記)

source ron 文件 亂碼問題 resource -s type fileutil ani 今天寫程序的時候發現輸出文字亂碼,盡管在實際開發中把字符串寫在代碼裏是不好的做法。可是有時候也是為了方便,遇到此問題第一時間在腦子裏面聯想到android下的strings

【Unity 3D】學習筆記十二:粒子特效

空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s

Android APK安裝過程學習筆記

屏蔽 組成 學習 二進制 替換 壓縮包 基於 壓縮 方式 1.什麽是APK   APK,即Android Package,Android安裝包。不同平臺的安裝文件格式都不同,類似於Windows的安裝包是二進制的exe格式,Mac的安裝包是dmg格式。APK可以再Andro

Tomcat學習筆記()

客服 list illegal state oid () ons mov tom Servlet容器部分 servlet容器用來處理請求servlet資源,並為web客服端填充response對象模塊,在tomcat中,共有4種類型的容器,分別是:Engi

JavaWeb學習筆記 request&response

cer 代碼 gbk msi 抓包工具 rom service net war HttpServletResponse 我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響

java 核心學習筆記() 單例類

com null tools 初始化 equal inf div 特殊 對象 如果一個類始終只能創建一個實例,那麽這個類被稱作單例類。 一些特殊的應用場景可能會用到,為了保證只能創建一個實例,需要將構造方法用private修飾,不允許在類之外的其它地方創建類的實例。 又要保

Python學習筆記()

pop rem 通過 修改 排序 python語言 創建 eve () 一、list創建   list 是Python語言中一種內置的數據類型  list 中可以存放不同類型的數據   list = [] #創建一個空列表  list = [1,2,3] #創建一個非空列

spring學習筆記:spring常用註解總結

bean logs single 配置文件 屬性註入 ring 如果 let ons 使用spring的註解,需要在配置文件中配置組件掃描器,用於在指定的包中掃描註解 <context:component-scan base-package="xxx.xxx.xxx

StackExchange.Redis學習筆記() 事務控制和Batch批量操作

成了 pan arp 展示 關於 public 連續 因此 用戶 Redis事物 Redis命令實現事務 Redis的事物包含在multi和exec(執行)或者discard(回滾)命令中 和sql事務不同的是,Redis調用Exec只是將所有的命令變成一個單元一起執行,期

Linux學習筆記()---centos7系統安裝後的一些簡單操作

完成 oss ctrl http windows images 取ip地址 fig ifconfig centos7系統安裝後的一些簡單操作 上次我們通過虛擬機已經安裝完成CentOS7。重啟系統後,進入登陸界面。系統登陸成功後,如下所示:我們虛擬機默認網絡是使用NAT,這

AWS學習筆記()--CLI創建EC2時執行腳本

scl type cycle 實例 doc settings shell腳本 system input When you launch an instance in Amazon EC2, you have the option of passing user data t

Bootstrap學習筆記()表單input

控件 屬性 icon val 制作表單 pan 選擇 提示信息 AI 單行輸入框,常見的文本輸入框,也就是input的type屬性值為text。在Bootstrap中使用input時也必須添加type類型,如果沒有指定type類型,將無法得到正確的樣式,因為Bootstra

Maven學習筆記(坐標和依賴)

Maven學習筆記 坐標 什麽是坐標? 在平面幾何中坐標(x,y)可以標識平面中唯一的一點 Maven 坐標主要組成 groupId:定義當前 Maven 項目隸屬項目、組織 artifactId:定義實際項目中的一個模塊 version:定義當前項目的當前版本