各位大佬,请教一下一个USB口,同时实现firmware update和vcm的功能,不通过外部跳线,能实现吗? 如果用跳线比较好弄,通过boot0引脚的高低,进入DFU和VCM模式。这需要一个拨码开关来做跳线功能,不太方便。 DFU好像是默认就有的,VCM需要通过代码来实现。 如果平时默认VCM模式,要firmware update时通过VCM发送命令直接进入DFU模式,完了直接重启又进入VCM模式,这样不需要拨码开关,有办法做吗? 还有个疑问就是单片机没有初始代码,跳线就有DFU功能了,DFU代码在哪呢? 如果单片机是空的没代码,VCM还是需要一段代码来实现的。 |
评分
查看全部评分
啊,还有这种搞法?具体有文档资料可以参考吗?
刚翻帖子找到了这个办法:
https://www.stmcu.org.cn/module/forum/thread-606839-1-1.html?lat
关键在于后备数据寄存器的使用。
评分
查看全部评分
多谢楼上提醒。通过D+的上拉电阻重新枚举。
还想到一个办法就是:(适用于外接DC供电和USB供电两路供电的硬件)
USB的5V上电时,进入DFU模式。
DC的5V上电时,进入VCM模式。
两个5V别连在一起。
硬件上只需要USB的5V上拉boot0就行了。这样USB上电就是boot0上拉状态的上电,进入DFU。
DC的5V上电就是boot0悬空状态的上电,从flash启动。
我个人倾向于工装数据线:USB micro-B 插座有五根线,1/2/3/5 脚用作 USB 通讯,第 4 脚普通数据线是直接短接到地的,工装数据线管脚可以自行定义,譬如第 4 脚对电源短路。USB Type-C 更是直接定义了工装数据线在 CC 两根线上面的处理方式。这样的话通过检测数据线,可以做到插普通数据线或不插数据线开机是正常工作模式,插工装数据线开机则是 DFU 模式。
上面这个电路可以实现工装数据线,图中的比较器 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,因此可以打出希腊字母 µ。
真会玩啊。。。
LMV331不会用,还看不懂这个图。。。
感谢给出这么好的思路。
LMV331 是单开漏比较器,和 LM393 一类是相似的。一般比较器如果正输入端(图中 A 点)电压高于负输入端(图中 B 点)比较器输出高电平;反之输出低电平。LMV331 则是开漏输出,因此在一般比较器输出高电平的时候 LMV331 输出高阻态,这一特点被我用来实现 5V 转 3.3V 的电压转换。
这个就是正常的原理图啊?F1 是我习惯性的在 USB 电源线上加的自恢复保险丝,LM1117 就是 AMS1117。
哦明白了。
接普通USB线或者不接线,电压:A<B,boot=0
接ID=5V的工装USB线,电压:A>B,boot=1
那R1和R2去掉也可以的吧。
不可以。R1、R2 去掉的话不接线 boot 就不确定了。
明白了。
毕业后就没用过运放相关的东西,