CMSIS-DAP-5 - USB -0 前置準備

收錄於 : 關於Ameba的一百篇

前篇 :  CMSIS-DAP - 4 - SVC


推薦一個網站 : USB 基本觀念 - 成大 USB wiki

CMSIS-DAP 在這扮演的是一個 USB Device 的角色. 

業界的確是有用 STM32 mcu 來做. (更多可能是 8051  )

不過在這個 CMSIS-DAP 範例, 我們是用 LPC11Uxx 文件

( 發現其實 LPC11Uxx 有 ROM code, 之前寫似乎沒有好好用到 ROM code 部分... )


蠻推薦可以看看這份  USB in a NutShell 中文版



其中還有提到 歸零編碼 (Return-to-zero code), 非歸零編碼 (Non-Return-to-zero code)

以及 NRZI (Non-Return-to-zero inverted code); USB 即是用這種 NRZI 編碼方式. 


在撰寫前需分清楚 Host / Device 端, 而 Ameba 上的 CMSIS-DAP, 
這邊是做為 device 端的



怎麼跟 Host 端說 他有這功能 : 

     USB disk : MSC class
     VCP : CDC class - ACM sub class


這就得透過 descriptors 來和 USB host 說. 

    Device=>Configuration=>Interface=>Endpoint

例如 : UVC descriptors 










工欲善其事, 必先利其器, 

在寫 CMSIS-DAP firmware 前, 首先我們先安裝幾個 usb 的工具. 

筆者本想在 Mac 玩, 但 Mac 的 IOUSBFamily package 在新的 Mac OSX 找不到了.. 

想想裝一個 VM 灌 Linux, 用 Linux 上的開源工具來玩玩看. 

我們可以先切到 更換 CMSIS-DAP 的模式, (In USB Programming)

他本身也是一個 usb disk 來更換 CMSIS-DAP firmware



1. lsusb 

沒帶參數時, 會簡介有哪些 device

Bus 001 Device 003: ID 1fc9:000f NXP Semiconductors

我們可以用 lsusb -s 001:003 -v 來看詳細內容



2. wireshark 

    $ sudo apt-get install wireshark
    
    $ sudo modprobe usbmon

    $ wireshark

    一開始出現 :  couldn't run /usr/bin/dumpcap in child process: Permission Denied.

    ls -l /usr/bin/dumpcap 可以發現權限問題

    可以做 : 

sudo groupadd wireshark
sudo usermod -a -G wireshark $USER
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
sudo getcap /usr/bin/dumpcap
    記得要 logout 再 login

    接下來遇到 can't open USB bus file ... 

    我只好用 sudo wireshark... 

結果 : 一樣先用 lsusb , 可以知道 Bus 001 Device 004
         
           可以設定 usb device_address eq 4 在 filter. 




因為 USB 是 polling mode, host 會發 request 給 device 

可以對照文件  USB 2.0 

Chapter 9 USB device Framework 

   9.3 USB Device Request

就會更清楚些


下一篇: USB IRQ handler 



留言

熱門文章