基於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:定義當前項目的當前版本