以下轉自一位電子大牛的博客: http://blog.sina.com.cn/s/blog_4680937f0101srxl.html
我在X893的設計基礎上重新設計了STM32F103 CMSIS-DAP調試器(名字好長,應該縮寫一下:F103-DAP)。下圖為X893原版設計。
與原始設計相比,我做了如下修改:
- 將兩個USB改為單組USB Mini接口;
- 提供單組2.54mm/100mil腳距SWD調試口,另購轉換配件支持50milSWD調試口;
- 采用四組Pin Header共30Pin支持擴展,并兼容mikroBUS接口,可以用于快速原型構建;
- 采用6Pin接口,通過SWD/UART1連接仿真MCU用于調試和ISP下載;
- 跳針連接BOOT1,下載更加穩定;
- 缺省低成本STM32F103C8T6(64KB),也可以焊接STM32F103CBT6(128KB);
總的特性
- CMSIS-DAP調試器,支持Keil/IAR/CoIDE和其他GCC IDE;
- USB-HID驅動,無需安裝驅動;
- USB-CDC,支持調試代碼;
- 支持Cortex-M0/M0+/M3/M4/A7調試,并支持其他廠牌產品;
- 支持mikroBUS,可以立刻獲得超過百種擴展板,構建客戶應用;
- 支持pySWD/pyOCD等開源調試工具和編程工具。
我昨天剛剛交給PCB廠家生產,期待首批10片樣品可以工作正常并透過Taobo/Tindie投放市場。不過這一批就是手焊的了。測試完了之后,需要優先寄給X893一片。
繼續前文《STM32F103 CMSIS-DAP 調試器》,設計了PCB,并手動焊接了兩片。現在還未能正常工作。很遺憾。需要原設計者的協助才能夠繼續。
硬件設計缺陷
本版設計中我用臺廠RickTek LDO替代了TI的LDO,雖然都是SOT23-5封裝。但是直接替換后忘了確認5個引腳的連接。結果導致在原理圖中看上去已經連接,但實際上VIN引腳在PCB中沒有任何電氣連接。
結果,不得不手動焊接了一根飛線?磥鞥AGLE的替換功能存在BUG,需要額外注意。
每次元件替換后需要仔細查看連接線。
手動焊接失敗率高
雖然現在我已經可以手動焊接0.5mm腳距的QFP80/TSSOP20等封裝。重點是:
- 助焊劑去除氧化層;
- 預先在焊盤上少量焊錫;
- 將元件對準焊盤(最重要);
- 加熱焊盤,焊錫會自動吸附到引腳上;
即便如此,兩次焊接QFP,其中有一次返工;另外一次不知何故斷了一個引腳,好在只是ADC,不用也可以。
手動焊接只有靠多次焊接來積累手感和經驗了。直到到達熟練工的程度。
硬件調試問題
我的硬件調試流程是:
- 先焊接LDO,查看電源是否工作正常;(檢查出LDO電源問題)
- 再焊接MCU,
查看MCU是否會發熱;(5V VBUS/3V3電源工作正常) - 再通過ISP下載代碼,查看復位情況;(失敗,待查RX/TX,復位,BOOT0/BOOT1)
- 或者通過SWD/JTAG下載代碼,通過調試器查看MCU的晶體和GPIO的外設工作情況;(JLINK)
- 最后連接PC,查看USB工作情況;(一個成功安裝,另外一個USB設備無法識別)
固件設計缺陷
X893的CMSIS-DAP設備是復合設備,分別為CMSIS-DAP CDC/DCI/HID。采用Keil的USB Device協議棧。但是好像有缺陷。
通過USBVIEW查出在CDC Interface里有設計四組Unknown Descriptor,結果導致HID設備根本沒有安裝。而CMSIS-DAP的主設備其實就是HID。所以Windows XP安裝后還是無法作為調試器使用。而CDC實際上也沒有測試過。
有人報告過Windows XP中HID可以安裝,CDC不可以。難道XP下還有不同情況?
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x01
bInterfaceClass: 0x02
bInterfaceSubClass: 0x02
bInterfaceProtocol: 0x01
iInterface: 0x03 0x0409: "CMSIS-DAP CDC"
Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x05
05 24 00 10 01
Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x05
05 24 01 03 02
Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x04
04 24 02 06
Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x05
05 24 06 00 01
我準備在Linux下查看對應情況。
源碼編譯問題
源碼是采用MDK4.54編譯的,但是在MDK4.71下編譯大量報錯。有人報告MDK5不行,但是MDK4.72可以,我在官網上只有4.74可以下載。到時候再試一試吧。
使用源碼也是主要想看看那四組未知描述符是如何出現的。
以上是最近更新報告。有情況再更新。