你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于CMSIS-DAP的无线仿真器方案完工

[复制链接]
wuxxb930f9 发布时间:2019-9-23 00:35
支持JTAG/SWD协议
! W) P8 ]. ]9 P' N支持虚拟串口
9 {: }# D5 c0 f; a支持5V/3.3V. j. c; F' l  \8 h! h
% Z* q9 H1 }; L1 x- H# f
这个小产品前前后后大概做了三个月左右,有些细节还是经过仔细反复推敲过的,整体方案自我还是比较满意的。原理其实比较简单,实际上就是透传USB HID报文:DAP协议通信是应答式的,HOST发送请求过来,DAP这边返回请求就可以了,对于USB全速设备来说,每次来回传输64字节。
- @, o2 R% d6 W& W/ G4 L# K: ?) G& L  n& X

" k1 C; m+ ]' q+ _) B0 q+ @( U7 O# D2 E关键要点在于以下几点:2 F0 k1 k+ p( ~% i7 ~
( X* j$ ]2 a4 j1 {2 G# o7 o5 i) i
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级别的。% I% T8 s3 s5 U7 |' X# y9 }
1 C8 C+ Y9 c8 Z+ D/ r2 F" b' b2 n
$ G2 x4 ]$ Z  {5 W
2. 虚拟串口实现,CMSIS-DAP是自带CDC的虚拟串口的,这个功能配合调试一起还是比较方便的,考虑到性能的缘故,串口和DAP协议数据都复用在了同一个socket里传输(用两个socket会增加系统负担,性能会慢),串口数据封装成了一条自定义的DAP命令,host端仍然使用DAP数据包,将host发出的串口数据作为请求,target则将收到的串口数据作为应答,使用tlv格式来指示有效的数据,以此来实现实现双向的串口传输。还是那句话,这一切都需要系统有足够的性能,如果无线传输性能只有4KB/s的话,连115200的串口波特率都无法实现有效传输。
. r; c# P( A3 k5 q) J% C' _  o3. 由于使用ESP8266 SDK开发,底层无线传输使用LWIP协议栈,使用TCP协议传输DAP数据包和串口数据,一般来说,传输层可以选择可靠的TCP协议和非可靠的UDP协议,UDP协议开销相对要小一些,性能也会更好一些,然而在简单测试了一下UDP协议之后,我立马放弃了UDP协议,丢包有点频繁,尤其在wifi信号比较多的场景,丢包概率会更高,串口数据或许还可以允许部分的丢包,而DAP通信是不允许任何一个包丢失的。所以使用TCP实现比较靠谱,双工通信,带数据确认,丢包重传,可有效提高传输的稳定性和可靠性。* B* D2 x0 O2 x6 ^
4. 无需安装驱动,也无需做任何额外的配置,只需要把发射机和接收机上电,等待双方的蓝灯从闪烁变为常亮之后,即可开始正常调试。而且支持重新配对,单个发射机可以和任意一个接收机重新建立配对,只需要将接收机短接nRST和GND并上电,便可实现重新配对。原理也很简单:发射机作为AP模式,SSID以固定的前缀nanoDAP-wl-[chipid]开头(由于带上了chipid,所以不同的发射机SSID都是不一样的),接收机上电会搜索以这个前缀开头的SSID,重新建立连接即可。而且理论上支持N对发射机/接收机同时工作,互不干扰。# h  G+ ~1 U3 |+ ^4 S
+ |# R6 n" P+ ?' L/ S5 T
后续可以继续优化的地方
9 I' ?8 l% }* C8 v7 S5 T% _1. 支持固件升级,当前固件升级需要使用其他仿真器进行升级,后续可以移植DAPLink 的MSD bootloader,将固件拖拽到U盘中即可实现升级,这个应该是最简单最方便的固件升级方式,通常的固件升级还需要再PC端安装厂商提供的升级软件,稍微麻烦一些,而且不同的windows系统上还可能存在兼容性问题。
4 J; [$ H1 m$ O5 E) B( F6 n2. 性能仍然可以继续提升,后续考虑修改LWIP底层协议栈实现性能提升,因为我们只需要TCP协议,其他协议都可以砍掉,这应该可以省掉很多判断和循环。$ p4 ~1 \, O% Y: _  A- m5 R

) H! b& ^$ P9 }1 A
微信图片_20190922232832.jpg
微信图片_20190923002133.jpg
微信图片_20190922232849.jpg
收藏 3 评论12 发布时间:2019-9-23 00:35

举报

12个回答
maxtch 回答时间:2019-9-23 11:18:22
如果是基于 Wi-Fi 的无线仿真器,某些别的协议可能会更合适一些。
radio2radio 回答时间:2019-9-23 11:38:36
有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
8 d% ]/ X6 J2 b6 g. A2 N/ F4 E- _, c+ o; }6 h
不知道这种WiFI模组,可靠的直线传输距离是多少, 楼主测试结果怎么样。
radio2radio 回答时间:2019-9-23 11:41:40
与ESP8266WiFI模组相比,蓝牙BLE也可以考虑吗?
香醋 回答时间:2019-9-23 13:51:38
顶一下下~~~~!
wuxxb930f9 回答时间:2019-9-23 18:53:03
radio2radio 发表于 2019-9-23 11:388 Z; {3 N+ k7 @0 @! K
有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
, R* {& z- Y# K+ q9 S2 \
0 u) O9 b# l, |' I不知道这种WiFI模组,可靠的直线传输 ...

" U0 i% F$ |5 p: n/ ^, L目前测试十米内调试都是没问题的,空旷场地的话可以更远距离,根据这里的测试 http://www.areresearch.net/2016/ ... 6-range-tester.html,空旷场地300m还能保持连接并正常传输数据。
wuxxb930f9 回答时间:2019-9-23 18:57:17
radio2radio 发表于 2019-9-23 11:41
7 C' u$ H& l: w. L与ESP8266WiFI模组相比,蓝牙BLE也可以考虑吗?

3 T$ e7 o- D# EBLE速度不行,一般ble的phy只能达到1Mbps,刨去协议本身的各种开销,速度就更低了。而且据我一个做蓝牙的朋友讲信号稳定性比较一般,和WiFi肯定比不了。
wuxxb930f9 回答时间:2019-9-23 19:53:09
radio2radio 发表于 2019-9-23 11:38
: J' c* F+ \5 ?$ _  O( q  n2 G; l* r有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
3 I' M2 e7 [4 y. T2 u
' W2 v9 L1 Q2 Y) {不知道这种WiFI模组,可靠的直线传输 ...

+ f) w) @/ o  B' z测试室内10m内都没什么问题,室外的空旷场地可以更远距离.根据这里的测试http://www.areresearch.net/2016/ ... 6-range-tester.html 空旷的野外400m还可以保持连接并且正常传输数据
Kevin_G 回答时间:2019-9-24 15:27:02
顶一下
pkoko 回答时间:2019-10-21 23:31:35
牛,顶一个
909958846 回答时间:2019-11-4 17:11:51
想问一下,哪里可以买到?
xiaonihao444-20 回答时间:2020-8-10 16:19:11
牛啊,好想要一个
pkoko 回答时间:2020-8-11 15:27:27
有意思的产品

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版