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

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

[复制链接]
wuxxb930f9 发布时间:2019-9-23 00:35
支持JTAG/SWD协议
5 ~& L$ V% Y6 d, X3 n% K, B4 r支持虚拟串口: ?4 l0 U- U8 c  D- z' v, Q
支持5V/3.3V* D7 G* }% b7 M9 g: I; u
! C" H/ \1 I7 |' J" K  [
这个小产品前前后后大概做了三个月左右,有些细节还是经过仔细反复推敲过的,整体方案自我还是比较满意的。原理其实比较简单,实际上就是透传USB HID报文:DAP协议通信是应答式的,HOST发送请求过来,DAP这边返回请求就可以了,对于USB全速设备来说,每次来回传输64字节。7 Q3 k/ H# {. ^- P0 K9 ?
6 v% S3 T+ X, w) u! K+ D
$ f# |, ^7 O# C/ r
关键要点在于以下几点:) [  g4 G! W+ i, H: p* y4 `3 ?, z  a
" U" L' ^; x* }
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级别的。
( Y$ z  X4 C! X( i# n+ E
( E3 ]2 f, A0 S& ?* i( B* ^# Y3 a" K+ b: {
2. 虚拟串口实现,CMSIS-DAP是自带CDC的虚拟串口的,这个功能配合调试一起还是比较方便的,考虑到性能的缘故,串口和DAP协议数据都复用在了同一个socket里传输(用两个socket会增加系统负担,性能会慢),串口数据封装成了一条自定义的DAP命令,host端仍然使用DAP数据包,将host发出的串口数据作为请求,target则将收到的串口数据作为应答,使用tlv格式来指示有效的数据,以此来实现实现双向的串口传输。还是那句话,这一切都需要系统有足够的性能,如果无线传输性能只有4KB/s的话,连115200的串口波特率都无法实现有效传输。# Z. c( ?( s, M% @$ w, v1 ~3 C* U: d  m
3. 由于使用ESP8266 SDK开发,底层无线传输使用LWIP协议栈,使用TCP协议传输DAP数据包和串口数据,一般来说,传输层可以选择可靠的TCP协议和非可靠的UDP协议,UDP协议开销相对要小一些,性能也会更好一些,然而在简单测试了一下UDP协议之后,我立马放弃了UDP协议,丢包有点频繁,尤其在wifi信号比较多的场景,丢包概率会更高,串口数据或许还可以允许部分的丢包,而DAP通信是不允许任何一个包丢失的。所以使用TCP实现比较靠谱,双工通信,带数据确认,丢包重传,可有效提高传输的稳定性和可靠性。
+ u7 z" F% \3 i, g4. 无需安装驱动,也无需做任何额外的配置,只需要把发射机和接收机上电,等待双方的蓝灯从闪烁变为常亮之后,即可开始正常调试。而且支持重新配对,单个发射机可以和任意一个接收机重新建立配对,只需要将接收机短接nRST和GND并上电,便可实现重新配对。原理也很简单:发射机作为AP模式,SSID以固定的前缀nanoDAP-wl-[chipid]开头(由于带上了chipid,所以不同的发射机SSID都是不一样的),接收机上电会搜索以这个前缀开头的SSID,重新建立连接即可。而且理论上支持N对发射机/接收机同时工作,互不干扰。6 f1 {3 }, O: {. n
4 a& _+ J2 w1 i7 Y" [5 l
后续可以继续优化的地方% Q* |' B( Y  o% a
1. 支持固件升级,当前固件升级需要使用其他仿真器进行升级,后续可以移植DAPLink 的MSD bootloader,将固件拖拽到U盘中即可实现升级,这个应该是最简单最方便的固件升级方式,通常的固件升级还需要再PC端安装厂商提供的升级软件,稍微麻烦一些,而且不同的windows系统上还可能存在兼容性问题。) d+ b$ m6 L* ~
2. 性能仍然可以继续提升,后续考虑修改LWIP底层协议栈实现性能提升,因为我们只需要TCP协议,其他协议都可以砍掉,这应该可以省掉很多判断和循环。* K9 A4 R" _/ h/ i- i
" s5 ~: I' p" K% s: q3 g* t
微信图片_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
有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
# F  r. x  x% S
1 y- e1 x$ n( ]6 S2 D2 e. y0 n不知道这种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:38
. Q  w+ t/ I! O! a- N有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
$ V3 k  ]. p0 K
/ [6 s7 w. I5 S, j不知道这种WiFI模组,可靠的直线传输 ...
2 O% ]+ Y3 B7 m3 x! M/ q( e
目前测试十米内调试都是没问题的,空旷场地的话可以更远距离,根据这里的测试 http://www.areresearch.net/2016/ ... 6-range-tester.html,空旷场地300m还能保持连接并正常传输数据。
wuxxb930f9 回答时间:2019-9-23 18:57:17
radio2radio 发表于 2019-9-23 11:41
+ l  ^# M. A6 J9 Z% X与ESP8266WiFI模组相比,蓝牙BLE也可以考虑吗?

- O6 f) w$ _4 ~BLE速度不行,一般ble的phy只能达到1Mbps,刨去协议本身的各种开销,速度就更低了。而且据我一个做蓝牙的朋友讲信号稳定性比较一般,和WiFi肯定比不了。
wuxxb930f9 回答时间:2019-9-23 19:53:09
radio2radio 发表于 2019-9-23 11:38
6 g5 Y! T8 N% [7 D2 L( A有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。
; o  P0 I$ M8 W7 |& a, k& o* A  y0 Q  o/ Z, W( H6 A4 |9 e
不知道这种WiFI模组,可靠的直线传输 ...
. b% N" ?7 b9 f
测试室内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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版