尝试基于 CMSIS-DAP 的无线调试器(施工中)

由于 CMSIS-DAP 是开源的,我们可以知道程序运行的每个细节,这样具有很高的可玩性。
这里尝试做一个无线的下载调试器。

源文件逐步上传至
https://github.com/K-O-Carnivist/CMSIS-DAP-Wireless

制作思路

先实现了一个 STM32F103 的 1.01 版 CMSIS-DAP。

这个过程和之前做的 HS 版本(http://blog.csdn.net/k_o_carnivist/article/details/50190099)没有什么区别,只是把 F4 换成 F103。F103 也是有 CMSIS-Driver 支持的。

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第1张图片

1.01 版的程序大框架(例程的 USBD_User_HID_0.c)是这样的:
1. USB HID 发来的数据包存放在一组 FIFO 缓冲当中(USB_Request),
2. 对每个数据包执行 DAP_ExecuteCommand 函数,处理结果存放在另一组 FIFO 中(USB_Response),
3. USB HID 将处理结果发回 PC。

Created with Raphaël 2.1.0 PC PC Interface Interface Target Target USB HID Request DAP USB HID Response

于是可以把这个过程拆分成两部分,分别由一片 STM32F103 来执行,中间用两组 SPI 进行通信:
单片机 A:
1. USB HID 发来的数据包存放在 FIFO Ain,
2. 将每个数据包通过 SPI Master 发送给单片机 B,
单片机 B:
3. SPI Slave 接收到的数据包存放在 FIFO Bin,
4. 对每个数据包执行 DAP_ExecuteCommand 函数,处理结果存放在 FIFO Bout,
5. SPI Master 将处理结果发回单片机 A,
单片机 A:
6. SPI Slave 接收到的处理结果存放在 FIFO Aout,
7. USB HID 将处理结果发回 PC。

Created with Raphaël 2.1.0 PC PC Interface STM32 A Interface STM32 A Interface STM32 B Interface STM32 B Target Target USB HID Request SPI DAP SPI USB HID Response

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第2张图片

然后用 nRF51422 做两个 SPI 到 ESB 的双工透传。

Created with Raphaël 2.1.0 PC PC STM32 A STM32 A nRF51 A nRF51 A nRF51 B nRF51 B STM32 B STM32 B Target Target USB HID Request SPI ESB SPI DAP SPI ESB SPI USB HID Response

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第3张图片

nRF51 的 ESB 的包长度可以到 200 多字节,正好能包含 FS HID 的数据包(64 字节)。

实际制作时,连接 USB 的单片机换用 STM32F072C8,可以省下晶振和几个电阻的面积。程序用 ST 的 USB Middleware 重写了一下。

下一步是画成小板子,然后考虑去掉后面的 STM32 B,其功能由 nRF51 B 来完成。

简单测试

MDK 连接目标芯片

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第4张图片

下载

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第5张图片

调试界面

尝试基于 CMSIS-DAP 的无线调试器(施工中)_第6张图片

其实这也看不出什么来,因为和一般的下载器也没区别……如果能有视频的话比较说明问题……

问题

目前只是初步探索可行性,很多问题没有考虑。比如无线丢包的影响(不过普通环境下似乎很少丢包)。

你可能感兴趣的:(自己玩,arm,stm32)