iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Software Development

Python GUI 專案設計模式及好用的開發技巧系列 第 7

捉鱉神技 - 讓USB傳輸見光死的方法

  • 分享至 

  • xImage
  •  

在程式中可以使用traceback 或try ... exception 的方式去做各種例外事件的攔截,但在通訊中該怎麼做呢? 筆者這次在USB轉串列埠的裝置應用中屢屢吃瘪,真的不知道原來通訊中的瘪還可以這樣吃到怕,那該如何逆襲這種情況呢?

總不能每次都吃瘪當吃補吧,這次就來介紹如何可以做到快樂捉鱉而不吃鱉的通訊界神器的應用。

PART 1 - 捉鱉前, 當然要先準備捉鱉用的各種道具

  • 通訊界中捉鱉用的照鱉鏡
    • USB Viewer
      • 可以顯示USB裝置定義中的各種規範
    • Wireshark
      • 讓傳輸過程見光死的好用神器

/images/emoticon/emoticon61.gif

  1. 下載USB Viewer 軟體以觀察每個USB的動向
  • 解壓縮後會看下面三個檔案, 直接執行第一個就行了
  • 執行後就可以看到電腦中每個USB Port的即時狀態

    PS: USBViewer 這個好用的工具, 以往都是被放在Windows SDK/ DDK 中
  1. 下載Wireshark 任意版本直接安裝
  2. 安裝的時候要選取USBPcap才能讓Wireshark 擷取到USB的訊號
  3. 安裝結束後, 一定要重開機
    • !!! 非常重要 !!!
  4. 重開機後打開Wireshark, 看到USB 出現了

PART II: 找看看鱉在哪裡?

這次要擷取的是SilCon CP210x USB to Serial 的訊號及分析

  1. 打開Wireshark後, 直接選擇USB Pcap2, 點選左上角的錄製

    • 可以在Device Description 中對照相關的訊息後確定要擷取的是這個Port 沒有錯
    • 在USB View 中看到的是這次要觀察的對象在Port 2
  2. 對這個Serial 裝置下01030C00, 16進位的數據, 觀察封包行為

    • 輸入指令後, 可以觀察到Host 對裝置發出BULK OUT的串流
      • 檢查內容, 發現是BLE Reset 的HEX 值
    • 觀察Device 回應的狀態, 查看BULK IN的資料流
      • 資料回傳後會再送一個0xff的空值, 代表結束

結論

由於筆者送出資料的時候都沒有加0xff, 所以資料並沒有被成功發送出去。而導致每次都要重新插拔裝置後才能使用. 導致問題發生的原因就是串列埠的timeout時間設定過長,所以才會導致裝置無法回應。但如果是使用猜測或只有在程式中除錯的方式,那就只能把吃瘪當吃補了。

參考資料
USB 數據包分析


上一篇
前人種樹,後人乘涼之自動產生程式碼片段 (下)
下一篇
捉鱉神技 - 如何逆推使用者意圖 (觀念篇)
系列文
Python GUI 專案設計模式及好用的開發技巧31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言