请选择 进入手机版 | 继续访问电脑版

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

STM32的DFU和CDC模式切换

[复制链接]
bbslhb 提问时间:2018-10-29 17:10 /
各位大佬,请教一下一个USB口,同时实现firmware update和vcm的功能,不通过外部跳线,能实现吗?
如果用跳线比较好弄,通过boot0引脚的高低,进入DFU和VCM模式。这需要一个拨码开关来做跳线功能,不太方便。
DFU好像是默认就有的,VCM需要通过代码来实现。
如果平时默认VCM模式,要firmware update时通过VCM发送命令直接进入DFU模式,完了直接重启又进入VCM模式,这样不需要拨码开关,有办法做吗?

还有个疑问就是单片机没有初始代码,跳线就有DFU功能了,DFU代码在哪呢?
如果单片机是空的没代码,VCM还是需要一段代码来实现的。
收藏 1 评论11 发布时间:2018-10-29 17:10

举报

11个回答
原来的你 回答时间:2018-10-29 17:24:05
没必要这样做呀,直接CDC就可以更新固件,自己加个处理就好,判断是升级模式还是正常工作模式即可

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

bbslhb 回答时间:2018-10-29 19:15:52
原来的你 发表于 2018-10-29 17:24
没必要这样做呀,直接CDC就可以更新固件,自己加个处理就好,判断是升级模式还是正常工作模式即可 ...

啊,还有这种搞法?具体有文档资料可以参考吗?
刚翻帖子找到了这个办法:
https://www.stmcu.org.cn/module/forum/thread-606839-1-1.html?lat
关键在于后备数据寄存器的使用。
maxtch 回答时间:2018-10-30 10:49:40
取决于具体型号。有些型号的 bootloader 是可以从单片机代码里面进入的,这样的话设计一种判断复位目的的代码就可以切换了。如果必须用 boot0 的话可以用一个片外 I/O 扩展芯片来达成目的。不过还有一点要记得的是如果你要这么用 USB 你一定要用单片机控制 USB D+ 的上拉电阻,这样的话电脑端才能注意到你的设备重新枚举了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

bbslhb 回答时间:2018-10-30 11:42:59
本帖最后由 bbslhb 于 2018-10-30 14:02 编辑
maxtch 发表于 2018-10-30 10:49
取决于具体型号。有些型号的 bootloader 是可以从单片机代码里面进入的,这样的话设计一种判断复位目的的代 ...

多谢楼上提醒。通过D+的上拉电阻重新枚举。
还想到一个办法就是:(适用于外接DC供电和USB供电两路供电的硬件)
USB的5V上电时,进入DFU模式。
DC的5V上电时,进入VCM模式。
两个5V别连在一起。
硬件上只需要USB的5V上拉boot0就行了。这样USB上电就是boot0上拉状态的上电,进入DFU。
DC的5V上电就是boot0悬空状态的上电,从flash启动。
2018-10-30_140057.png
maxtch 回答时间:2018-10-30 19:32:03
bbslhb 发表于 2018-10-30 11:42
多谢楼上提醒。通过D+的上拉电阻重新枚举。
还想到一个办法就是:(适用于外接DC供电和USB供电两路供电的 ...

我个人倾向于工装数据线:USB micro-B 插座有五根线,1/2/3/5 脚用作 USB 通讯,第 4 脚普通数据线是直接短接到地的,工装数据线管脚可以自行定义,譬如第 4 脚对电源短路。USB Type-C 更是直接定义了工装数据线在 CC 两根线上面的处理方式。这样的话通过检测数据线,可以做到插普通数据线或不插数据线开机是正常工作模式,插工装数据线开机则是 DFU 模式。
maxtch 回答时间:2018-10-30 19:57:49
本帖最后由 maxtch 于 2018-10-30 20:02 编辑

Untitled-1.png
上面这个电路可以实现工装数据线,图中的比较器 LMV331 和电阻 R1-R4 构成数据线检测电路。B 点固定 2.66V;A 点不插数据线电压 1.33V,插普通数据线电压 0V,因此在这两个状态下 LMV331 输出接地,BOOT0 = 0。插工装数据线 A 点电压 5V,LMV331 输出高阻态,R5 上拉到 3.3V,BOOT0 = 1。

p.s. 画图软件是 KiCad,所以字体和颜色是这样的。系统是 macOS,因此可以打出希腊字母 µ。
bbslhb 回答时间:2018-10-30 20:22:57
maxtch 发表于 2018-10-30 19:57
上面这个电路可以实现工装数据线,图中的比较器 LMV331 和电阻 R1-R4 构成数据线检测电路。B 点固定 2.66V ...

真会玩啊。。。
LMV331不会用,还看不懂这个图。。。
感谢给出这么好的思路。
maxtch 回答时间:2018-10-31 00:16:34
bbslhb 发表于 2018-10-30 20:22
真会玩啊。。。
LMV331不会用,还看不懂这个图。。。
感谢给出这么好的思路。 ...

LMV331 是单开漏比较器,和 LM393 一类是相似的。一般比较器如果正输入端(图中 A 点)电压高于负输入端(图中 B 点)比较器输出高电平;反之输出低电平。LMV331 则是开漏输出,因此在一般比较器输出高电平的时候 LMV331 输出高阻态,这一特点被我用来实现 5V 转 3.3V 的电压转换。

这个就是正常的原理图啊?F1 是我习惯性的在 USB 电源线上加的自恢复保险丝,LM1117 就是 AMS1117。
bbslhb 回答时间:2018-10-31 15:39:36
maxtch 发表于 2018-10-31 00:16
LMV331 是单开漏比较器,和 LM393 一类是相似的。一般比较器如果正输入端(图中 A 点)电压高于负输入端 ...

哦明白了。
接普通USB线或者不接线,电压:A<B,boot=0
接ID=5V的工装USB线,电压:A>B,boot=1
那R1和R2去掉也可以的吧。
maxtch 回答时间:2018-10-31 17:43:37
bbslhb 发表于 2018-10-31 15:39
哦明白了。
接普通USB线或者不接线,电压:AB,boot=1
那R1和R2去掉也可以的吧。 ...

不可以。R1、R2 去掉的话不接线 boot 就不确定了。
bbslhb 回答时间:2018-10-31 17:55:04
maxtch 发表于 2018-10-31 17:43
不可以。R1、R2 去掉的话不接线 boot 就不确定了。

明白了。
毕业后就没用过运放相关的东西,

所属标签

相似问题

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