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

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

[复制链接]
wuxxb930f9 发布时间:2019-9-23 00:35
支持JTAG/SWD协议  \" r  U- D+ u* t
支持虚拟串口5 g3 G) r/ f0 l
支持5V/3.3V
& |+ e2 a7 X7 a; j4 Q+ g* ^/ X7 a7 ^8 L
这个小产品前前后后大概做了三个月左右,有些细节还是经过仔细反复推敲过的,整体方案自我还是比较满意的。原理其实比较简单,实际上就是透传USB HID报文:DAP协议通信是应答式的,HOST发送请求过来,DAP这边返回请求就可以了,对于USB全速设备来说,每次来回传输64字节。
* q8 [1 b" k- p; E, p/ s6 D
5 \- A  u9 W2 G+ f
& E' F  d! t  n, V$ d; e. z& ?关键要点在于以下几点:
6 V$ b& Q. q6 \& B( M! F% ]# [6 U, w( V
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级别的。
* G  e' m: ?+ G; m, z
6 v9 D& |3 [: L4 C, L7 n+ R
, P9 W% r0 f8 G1 F2 c, r2. 虚拟串口实现,CMSIS-DAP是自带CDC的虚拟串口的,这个功能配合调试一起还是比较方便的,考虑到性能的缘故,串口和DAP协议数据都复用在了同一个socket里传输(用两个socket会增加系统负担,性能会慢),串口数据封装成了一条自定义的DAP命令,host端仍然使用DAP数据包,将host发出的串口数据作为请求,target则将收到的串口数据作为应答,使用tlv格式来指示有效的数据,以此来实现实现双向的串口传输。还是那句话,这一切都需要系统有足够的性能,如果无线传输性能只有4KB/s的话,连115200的串口波特率都无法实现有效传输。  p* S0 Y' r0 h
3. 由于使用ESP8266 SDK开发,底层无线传输使用LWIP协议栈,使用TCP协议传输DAP数据包和串口数据,一般来说,传输层可以选择可靠的TCP协议和非可靠的UDP协议,UDP协议开销相对要小一些,性能也会更好一些,然而在简单测试了一下UDP协议之后,我立马放弃了UDP协议,丢包有点频繁,尤其在wifi信号比较多的场景,丢包概率会更高,串口数据或许还可以允许部分的丢包,而DAP通信是不允许任何一个包丢失的。所以使用TCP实现比较靠谱,双工通信,带数据确认,丢包重传,可有效提高传输的稳定性和可靠性。! E7 b9 \+ K2 i  O: K& |
4. 无需安装驱动,也无需做任何额外的配置,只需要把发射机和接收机上电,等待双方的蓝灯从闪烁变为常亮之后,即可开始正常调试。而且支持重新配对,单个发射机可以和任意一个接收机重新建立配对,只需要将接收机短接nRST和GND并上电,便可实现重新配对。原理也很简单:发射机作为AP模式,SSID以固定的前缀nanoDAP-wl-[chipid]开头(由于带上了chipid,所以不同的发射机SSID都是不一样的),接收机上电会搜索以这个前缀开头的SSID,重新建立连接即可。而且理论上支持N对发射机/接收机同时工作,互不干扰。/ M% K- p) V8 q2 _, j" q4 p/ o# E
$ s; O, W3 \0 B# s& {7 q. p& e) k
后续可以继续优化的地方
: g. Z) e' {5 h% j0 C# g, V, d1. 支持固件升级,当前固件升级需要使用其他仿真器进行升级,后续可以移植DAPLink 的MSD bootloader,将固件拖拽到U盘中即可实现升级,这个应该是最简单最方便的固件升级方式,通常的固件升级还需要再PC端安装厂商提供的升级软件,稍微麻烦一些,而且不同的windows系统上还可能存在兼容性问题。
- I% m; X6 i5 y" x( p# |9 E2. 性能仍然可以继续提升,后续考虑修改LWIP底层协议栈实现性能提升,因为我们只需要TCP协议,其他协议都可以砍掉,这应该可以省掉很多判断和循环。/ F. L* B/ H- y. c
" g) n+ R/ }$ Q
微信图片_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
有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。+ s0 i4 h$ v- G6 S' {
( Z! T+ E( L: M  `6 u
不知道这种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
0 f! y3 a* W- o' `; i7 f/ S有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。  y: F# W- P5 B

; C# r3 S2 Q9 ~5 [+ `: e, w* J) W不知道这种WiFI模组,可靠的直线传输 ...
1 u5 m. O  Q. h& r" O
目前测试十米内调试都是没问题的,空旷场地的话可以更远距离,根据这里的测试 http://www.areresearch.net/2016/ ... 6-range-tester.html,空旷场地300m还能保持连接并正常传输数据。
wuxxb930f9 回答时间:2019-9-23 18:57:17
radio2radio 发表于 2019-9-23 11:41, P; l3 y. j& K( ]2 X6 t  _
与ESP8266WiFI模组相比,蓝牙BLE也可以考虑吗?
4 Y- j+ t( @8 _# _
BLE速度不行,一般ble的phy只能达到1Mbps,刨去协议本身的各种开销,速度就更低了。而且据我一个做蓝牙的朋友讲信号稳定性比较一般,和WiFi肯定比不了。
wuxxb930f9 回答时间:2019-9-23 19:53:09
radio2radio 发表于 2019-9-23 11:38: B$ a6 `2 ]! b' U) L
有意思,实时调试无人机时可用。 也还可以用在需要供电隔离的场合。* E9 \" j% x: K5 l

9 d0 J0 }7 Z6 Y! u8 E9 a不知道这种WiFI模组,可靠的直线传输 ...

, A# D0 B& g; O测试室内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 手机版