跳到主要內容

USB vendor command

 在 USB 通訊中,Vendor Commands (Vendor-Specific Requests) 是為特定裝置設計的指令,並不屬於 USB 標準規範,而是由廠商自定義的操作方式。這些命令通常用於設備的特殊功能,例如設定裝置參數、更新韌體、或執行自訂功能。

以下是 Vendor Command 的範例與解析:


Vendor Command 格式

Vendor Command 通常透過 Control Transfer 傳送,結構如下:

Field Name Size (Bytes) Description
bmRequestType 1 指定方向、類型(Vendor-Specific),以及接收者(Device/Interface/Endpoint)。
bRequest 1 請求代碼,由廠商自定義,例如 0x010xA0
wValue 2 附加數據,通常用於傳遞參數。
wIndex 2 附加數據,可能代表特定端點或功能。
wLength 2 數據傳輸長度(IN 或 OUT)。
Data Variable 傳輸的實際數據(可選)。

Vendor Command 例子 1: 設置設備參數

假設某裝置支持設定亮度的 Vendor Command:

Field Name Example Value Description
bmRequestType 0x40 Host-to-Device, Vendor-Specific, Device
bRequest 0x01 Vendor Command: Set Brightness
wValue 0x0064 Brightness level (e.g., 100)
wIndex 0x0000 Unused
wLength 0x0000 No data phase

Control Transfer (Setup Stage):

40 01 64 00 00 00 00 00

設備會執行亮度設定為 100。


Vendor Command 例子 2: 韌體版本查詢

假設某設備提供查詢韌體版本的 Vendor Command:

Field Name Example Value Description
bmRequestType 0xC0 Device-to-Host, Vendor-Specific, Device
bRequest 0xA0 Vendor Command: Get Firmware Version
wValue 0x0000 Unused
wIndex 0x0000 Unused
wLength 0x0004 Expect 4 bytes of data

Control Transfer (Setup Stage):

C0 A0 00 00 00 00 04 00

Expected Response (Data Stage):

01 00 02 00

解析:

  • 韌體版本:0x0002.0001

Vendor Command 例子 3: 設備重啟

假設某設備支持重啟的 Vendor Command:

Field Name Example Value Description
bmRequestType 0x40 Host-to-Device, Vendor-Specific, Device
bRequest 0x02 Vendor Command: Reboot Device
wValue 0x0000 Unused
wIndex 0x0000 Unused
wLength 0x0000 No data phase

Control Transfer (Setup Stage):

40 02 00 00 00 00 00 00

設備收到指令後立即重啟。


實作工具

  1. 使用 libusb:

    // Example: Sending a vendor-specific command to set brightness
    uint8_t bmRequestType = 0x40;  // Host-to-Device, Vendor-Specific, Device
    uint8_t bRequest = 0x01;       // Set Brightness Command
    uint16_t wValue = 100;         // Brightness level
    uint16_t wIndex = 0x0000;      // Unused
    uint16_t wLength = 0x0000;     // No data phase
    unsigned char *data = NULL;
    int timeout = 1000;
    
    libusb_control_transfer(handle, bmRequestType, bRequest, wValue, wIndex, data, wLength, timeout);
    
  2. 工具如 USBLyzer 或 Wireshark:

    • 可監控 USB 通訊以反向工程 Vendor Commands。

注意事項

  1. 文檔參考:Vendor Command 的定義通常在裝置的技術文檔中提供。
  2. 安全性:避免對未知裝置執行 Vendor Commands,以免導致不可逆的損壞。
  3. 錯誤處理:對不支援的命令,設備通常會回應 STALL

如果你有特定設備或命令需要協助分析,請提供更多細節!

留言

這個網誌中的熱門文章

GSR600 TPS ( Throttle Position Sensor) adjustment

FI MODE DEALER MODE (FI MODE code ) BLACK W/ GREEN BAND Wire with a WHITE STRIPE and a WHITE W/ GREEN BAND Wire with a RED STRIPE 黑底白細條 白底紅細條 短路後 就可以看 FI code了 C11 - Camshaft position sensor (CMPS) C12 - Crankshaft position sensor (CKPS) Pick-up coil signal, signal generator C13 - Intake air pressure sensor (IAPS) C14 - THROTTLE POSITION SENSOR C15 - ENGINE COOLANT TEMPERATURE SENSOR C21 - INTAKE AIR TEMPERATURE SENSOR C22 - ATMOSPHERIC PRESSURE SENSOR C23 - TIPOVER SENSOR C24 - IGNITION SIGNAL #1 C25 - IGNITION SIGNAL #2 C26 - IGNITION SIGNAL #3 C27 - IGNITION SIGNAL #4 C28 - SECONDARY THROTTLE VALVE ACTUATOR C29 - SECONDARY THROTTLE POSITION SENSOR C30 - SECONDARY THROTTLE CONTROL UNIT C31 - GEAR POSITION SENSOR C32 - INJECTOR SIGNAL #1 C33 - INJECTOR SIGNAL #2 C34 - INJECTOR SIGNAL #3 C35 - INJECTOR SIGNAL #4 C41 - FUEL PUMP CONTROL SYSTEM C42 - IGNITION SWITCH SIGNAL C44 - HO2 sensor C49 - PAIR control solenoid valve C60 - Cooling fan control system ( Cooling fan relay) TP SENSOR A...

MTF 50 & MTF 30 與 Edge profile (Linear) 之間的關係

解答來自於 Grok 2 Q: MTF 50 & MTF 30 的計算方式. 如果知道 一張 1080p 的照片 黑白 由 10% ~90% 需要1.5 個pixel. 這樣 MTF50 & MTF30 推算是多少? A: MTF (Modulation Transfer Function)是一種用來衡量光學系統對於不同空間頻率的解析度或對比度保持能力的指標。MTF50 和 MTF30 分別表示在50%和30%的對比度時所對應的空間頻率。 你給的資訊說明了一張1080p黑白照片在對比度從10%到90%時需要1.5個像素來表達一個周期。我們可以利用這個資訊來估算MTF50和MTF30的數值: 1. **MTF的定義**:MTF描述了從一個完美信號到通過光學系統後的信號的衰減程度。對比度衰減到50%時,我們說這個頻率是MTF50;對比度衰減到30%時,我們說這個頻率是MTF30。 2. **像素與空間頻率的關係**:    - 一個周期(一個黑白交替的單位)需要1.5個像素,則一個周期的空間頻率可以表示為:       - 1080p分辨率,垂直方向有1080像素,所以最高空間頻率約為:    - 這裡假設我們談論的是垂直方向的頻率。 3. **估算MTF50和MTF30**:    - 由於你的資訊是從10%到90%的對比度需要1.5像素,我們需要假設對比度是線性下降的:      - **MTF50**:對比度降至50%,假設這是線性關係,我們需要找出一半的對比度(50%)所對應的像素數。既然1.5像素是從10%到90%,50%的地方應該是在:        所以,MTF50大約對應於:        (這個值應該 還要除以2 ) 才是cycle      - **MTF30**:對比度降至30%:              所以,MTF30大約對應於: 請注意, 這是一個簡化和估算的過程 ,實際的MTF測量可能需要更複雜的計算和實驗數據來確定,...

重機 隱藏式大燈開關

重機 隱藏式大燈開關 剛剛裝到我的 GSR600 達到預期效果!! 還不錯 GSR600 電門開啟. 大燈沒點亮. 發動後 按一下 PASS 燈(遠光閃光) 就啟動近燈. 近燈就恒亮. 如果要關掉近燈 就按一下 發動紐. (GSR600 電發紐 是有玄機的GSR 要發動 必須抓離合器 並同時按發動紐 GSR 才會啟動發動馬達. 如果你只是按發動紐 他只會將燈的部分斷電,並不會啟動發動馬達 ) 大燈隱藏開關就是利用這個原理 用pass 燈啟動 近燈. 利用發動紐 關掉進燈. 電路中的二極體就是讓pass燈訊號啟動繼電器線圈. 開啟進燈. 當近燈開啟 另一顆接在近燈的二極體也跟著啟動.讓繼電器線圈保持啟動. 近燈就會恆亮. 如果想要關掉近燈. 就按發動紐一下. 就可以把近燈斷電. ...