以下转自一位电子大牛的博客: 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中没有任何电气连接。
结果,不得不手动焊接了一根飞线。看来EAGLE的替换功能存在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可以下载。到时候再试一试吧。
使用源码也是主要想看看那四组未知描述符是如何出现的。
以上是最近更新报告。有情况再更新。