
支持JTAG/SWD协议 支持虚拟串口7 |9 `! J* X, O: b 支持5V/3.3V 6 O3 O+ `1 K2 H6 p 这个小产品前前后后大概做了三个月左右,有些细节还是经过仔细反复推敲过的,整体方案自我还是比较满意的。原理其实比较简单,实际上就是透传USB HID报文:DAP协议通信是应答式的,HOST发送请求过来,DAP这边返回请求就可以了,对于USB全速设备来说,每次来回传输64字节。 3 @0 f o2 L0 x 关键要点在于以下几点:9 V+ e1 J# E# u) b( _2 W" N8 t; g 1. 无线模块很关键,直接关系到调试下载的速度,无线肯定是比有线慢一些的,但不能太慢,如果太慢则上位机认为已经失去连接会直接断开(keil发出的usb hid请求必须在1-2秒之内回复,否则便会断开),一开始设计的是使用不带PA的NRF24l01模块,这个模块的问题是只能半双工通信,通信通信距离和性能都很低,而且抗干扰性很差,我使用的是国产的si24r1,可以pin2pin替代nrf24l01,据说性能比nrf24l01还是有点差距,实际测试下来无线传输速度只有4KB/s,这个性能不管是下载或者调试,基本上是难以忍受的,而且实际测试中抗干扰性很差,加上PA或许会稍有改善,然而性能始终是个无法解决的问题。稍作考虑之后决定用ESP8266作为无线模块,WiFi的稳定性和通信速度基本上是可以保证的,实际测试下来通信速度可以达到40KB/s,这个速度还是不错的,而且以ESP8266的性能后面还有很大优化空间,根据http://iot-bits.com/esp8266-tcp-server-speed-test/这里的测试结论,8266纯发射数据速率可以达到Mbps级别的。 ; `8 U/ x7 t+ O2 Q h* F 2. 虚拟串口实现,CMSIS-DAP是自带CDC的虚拟串口的,这个功能配合调试一起还是比较方便的,考虑到性能的缘故,串口和DAP协议数据都复用在了同一个socket里传输(用两个socket会增加系统负担,性能会慢),串口数据封装成了一条自定义的DAP命令,host端仍然使用DAP数据包,将host发出的串口数据作为请求,target则将收到的串口数据作为应答,使用tlv格式来指示有效的数据,以此来实现实现双向的串口传输。还是那句话,这一切都需要系统有足够的性能,如果无线传输性能只有4KB/s的话,连115200的串口波特率都无法实现有效传输。: N8 G9 n! ^0 a3 l* ~ 3. 由于使用ESP8266 SDK开发,底层无线传输使用LWIP协议栈,使用TCP协议传输DAP数据包和串口数据,一般来说,传输层可以选择可靠的TCP协议和非可靠的UDP协议,UDP协议开销相对要小一些,性能也会更好一些,然而在简单测试了一下UDP协议之后,我立马放弃了UDP协议,丢包有点频繁,尤其在wifi信号比较多的场景,丢包概率会更高,串口数据或许还可以允许部分的丢包,而DAP通信是不允许任何一个包丢失的。所以使用TCP实现比较靠谱,双工通信,带数据确认,丢包重传,可有效提高传输的稳定性和可靠性。 4. 无需安装驱动,也无需做任何额外的配置,只需要把发射机和接收机上电,等待双方的蓝灯从闪烁变为常亮之后,即可开始正常调试。而且支持重新配对,单个发射机可以和任意一个接收机重新建立配对,只需要将接收机短接nRST和GND并上电,便可实现重新配对。原理也很简单:发射机作为AP模式,SSID以固定的前缀nanoDAP-wl-[chipid]开头(由于带上了chipid,所以不同的发射机SSID都是不一样的),接收机上电会搜索以这个前缀开头的SSID,重新建立连接即可。而且理论上支持N对发射机/接收机同时工作,互不干扰。& A n* T& T* S6 N6 d 4 o- g6 t2 r! ^5 h+ L3 M 后续可以继续优化的地方 1. 支持固件升级,当前固件升级需要使用其他仿真器进行升级,后续可以移植DAPLink 的MSD bootloader,将固件拖拽到U盘中即可实现升级,这个应该是最简单最方便的固件升级方式,通常的固件升级还需要再PC端安装厂商提供的升级软件,稍微麻烦一些,而且不同的windows系统上还可能存在兼容性问题。, g' U, c' n& C/ V4 u4 K 2. 性能仍然可以继续提升,后续考虑修改LWIP底层协议栈实现性能提升,因为我们只需要TCP协议,其他协议都可以砍掉,这应该可以省掉很多判断和循环。$ W8 X6 R S f# R- k% C* g * s# [9 f: P1 b4 h: _. Y7 z |
不知道这种WiFI模组,可靠的直线传输距离是多少, 楼主测试结果怎么样。
目前测试十米内调试都是没问题的,空旷场地的话可以更远距离,根据这里的测试 http://www.areresearch.net/2016/ ... 6-range-tester.html,空旷场地300m还能保持连接并正常传输数据。
BLE速度不行,一般ble的phy只能达到1Mbps,刨去协议本身的各种开销,速度就更低了。而且据我一个做蓝牙的朋友讲信号稳定性比较一般,和WiFi肯定比不了。
测试室内10m内都没什么问题,室外的空旷场地可以更远距离.根据这里的测试http://www.areresearch.net/2016/ ... 6-range-tester.html 空旷的野外400m还可以保持连接并且正常传输数据