搜索
bottom↓
回复: 16

通过SWD接口给STM8L远距离更新固件问题求助

[复制链接]

出0入0汤圆

发表于 2019-12-26 21:44:43 | 显示全部楼层 |阅读模式
我正在开发的某产品,需要在生产安装完成后通过一段5米长的电缆下载固件,但就是这根电缆出现了问题,表现为下载不了固件。电缆芯线是线规为24AWG的多股导线。
      
目前使用的PCB板CPU型号是STM8L,下载接口是ST-Link/V2 SWIM的标准接口(即有VCC、SWIM、GND、NRST四个接口),下载调试器是正点原子的STM8专用的脱机下载器。用5米长的硅胶线连接下载调试器和PCB板的下载口后,下载固件失败,需要将硅胶线缩短到2.7米,才能下载固件成功。
有偿请教,在不改变下载接口的前提下,用5米(至少5米)长的硅胶线连接了下载调试器(不要求一定要使用现在的下载器,有更合适的也欢迎推荐)和PCB板后依旧可以成功下载固件的方法。确定解决后,我愿意支付500元作为报酬,希望大家能多给些意见,集思广益,早些找出解决方法。
曾做过的尝试:
1、降低下载速度。结果:下载调试器的下载速度降到低速(脱机下载器的配置界面只有低速、中速、高速3种模式),依旧无法下载。
2、增强烧写器驱动能力。就是参照下图,在SWIM线上另外供了一个3V3的电源,并串联了一个680欧的电阻,在脱机下载器的SWIM端串联了一个47欧的电阻,在连接了5米硅胶线的SWIM端口串联了一个220欧的电阻,然后在RST线上串联了一个47欧和一个220欧的电阻,以此来增强烧写器的驱动能力,结果依旧下载失败

3、将硅胶线换成了纯铜线芯的网线。结果还是不能通过5米长的网线对STM8L的芯片烧写固件。
4、做了一个双向DataBuffer的放大器,用来放大传输信号。试验后发现杂波信号也被放大,干扰了返回的信号。
原因:用示波器抓下载失败的PCB板上的SWIM线的信号(信号通过了5米硅胶线)和下载成功的PCB板上的SWIM线的信号(信号只通过了10厘米的硅胶线到PCB板)。比较后发现下载失败的PCB板返回下载调试器的信号幅值不够,下载正常的返回的信号幅值是2.5V左右,如下图1;下载失败的返回的信号幅值是1.8V左右,如下图2;

图1
图2
双向DataBuffer的放大器硬件简图如下:
用了两个AMS1117芯片,一个将12V降到3.3V,给TXS90108e的VCCA供电,一个将12V降到5V,给TXS90108e的VCCB供电。A7连接土壤传感器的SWIM,B7连接5米电缆中的SWIM线,电缆另一端连接脱机下载器的SWIM口。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入131汤圆

发表于 2019-12-26 21:54:04 | 显示全部楼层
将TTL信号 转成差分信号 比如用485芯片 试试

出40入18汤圆

发表于 2019-12-26 21:56:16 | 显示全部楼层
已经是要求只能单端了

出0入213汤圆

发表于 2019-12-26 22:17:10 来自手机 | 显示全部楼层
swim是单线双向的

出615入1076汤圆

发表于 2019-12-26 22:33:21 | 显示全部楼层
本帖最后由 dukelec 于 2019-12-26 22:40 编辑

我覺得對於 SWIM 線,可以試試兩邊都加 TXS0108e:

stm8(3.3V) <--> TXS0108e <--> 5 米線 (5V) <--> TXS0108e <--> 燒錄器(3.3V)

其中 5 米線 (5V) 這裏的電壓儘量超額使用,譬如 6V、7V.
5 米線的信號線兩端都加一個小電容到 GND 可以防止干擾。
再就是自己搭電路實現 TXS0108e 的功能,但是電壓支持更高,譬如 12V, 因爲非差分信號,想傳的遠,除了加驅動能力就是加電壓了。


我覺得更好的方式:

最簡單做法:在目標板處弄一個 raspberry pi,然後接一個 ST-Link/V2 到目標板,pi 上面跑開源命令行燒錄工具 stm8flash,然後 pi 通過 5 米的網絡線連接到主機端,可以是 RS485 線做網絡,或者是 PoE 網線。
批量省錢做法:看一下燒錄協議,單獨弄一個 MCU 取代上述 raspberry pi. 燒錄代碼可以參考 ST 官方手冊,也可以參考上面的開源軟件 stm8flash.

出0入362汤圆

发表于 2019-12-26 23:04:54 | 显示全部楼层
本帖最后由 tomzbj 于 2019-12-26 23:07 编辑

双向接口, 线长了当然不行了, 我以前用80cm左右的软排线都不行.  后来解决办法也简单, 用USB延长线, 把STLINK放在靠近设备的位置.

USB延长线如果不给力的话, 办法也多, 比如有走以太网的usb延长线之类.

可以买现成的, 要方案的话, 看链接: http://www.wch.cn/products/category/1.html

出0入0汤圆

发表于 2019-12-26 21:44:44 | 显示全部楼层
本帖最后由 himemiyachikane 于 2019-12-26 23:32 编辑

我试了下 编程器SWIM加680欧姆电阻上拉到3V3即可解决。
不加上拉不能正常烧写的。
应该是编程器内部上拉电阻太大,给5米线缆分布电容充电时,时间常数满足不了SWIM的时序要求。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出590入992汤圆

发表于 2019-12-26 23:20:00 | 显示全部楼层
tomzbj 发表于 2019-12-26 23:04
双向接口, 线长了当然不行了, 我以前用80cm左右的软排线都不行.  后来解决办法也简单, 用USB延长线, 把STLI ...

这个方法不错。顶一下!

出0入0汤圆

发表于 2019-12-26 23:21:01 来自手机 | 显示全部楼层
为什么不是用iap的方式?是个通讯都可以升级固件,慢点快点而已。

出0入0汤圆

发表于 2019-12-27 08:34:26 | 显示全部楼层
可以把线分成两段吗  烧写器放中间  USB延长一段  ttl延长一段  都满足延长限制了

出10入46汤圆

发表于 2019-12-27 09:00:09 | 显示全部楼层
心的多大啊! 才会用swd 延长线, 实测没有啊。

为什么不延长usb线。 10几米都没问题

出100入113汤圆

发表于 2019-12-27 09:29:00 | 显示全部楼层

心的多大啊! 才会用swd 延长线, 实测没有啊。

为什么不加 Bootloader ,通过串口(RS485) 远程升级……

出20入0汤圆

发表于 2019-12-27 09:55:26 | 显示全部楼层
  线接长了线上的压降很大,而且还有寄生电容影响上升和下降时间导致波形变差;
  最好的 办法还是在usb线端加长,把烧写器放到离单片机近的地方

出0入0汤圆

发表于 2019-12-27 10:02:42 | 显示全部楼层
SWIM逻辑基本和I2C方案一样,我此前I2C接口约10米距离正常通信。输出用MOS管或三极管驱动,SCK远端、SDA双端上拉(阻值依据节点数调节)
另外20m、50m需要用到缓冲器,也是可以做到的。

出0入0汤圆

 楼主| 发表于 2019-12-27 13:46:44 | 显示全部楼层
问题已解决,500元已转给himemiyachikane

出0入0汤圆

发表于 2019-12-27 20:06:22 来自手机 | 显示全部楼层
学习了。。

出0入76汤圆

发表于 2019-12-27 20:44:09 | 显示全部楼层
方法如7楼, 有时候要学会变通一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-17 01:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表