CMSIS-DAP-5 - USB -0 前置準備
收錄於 : 關於Ameba的一百篇
前篇 : CMSIS-DAP - 4 - SVC
推薦一個網站 : USB 基本觀念 - 成大 USB wiki
這就得透過 descriptors 來和 USB host 說.
下一篇: USB IRQ handler
前篇 : 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
留言
張貼留言