在比較高階的STM的USB控制上,他有Vbus sensing的功能,他的功能主要是為了做安規上的控制: 假設device 自帶電源(self power),這樣如果一直讓D+ pull high的話,這樣USB connector的D+的地方就會有電,這樣安規會驗不過,所以比較好的做法就是偵測USB Vbus 是否有進來,假設Vbus 有進來的話,再把D+ pull high即可。
在沒有Vbus sensing的做法,就要靠電阻分壓,再利用GPIO 外部中斷來偵測,firmware偵測到Vbus進來後,自行控制D+ pull high的時機:
在有Vbus sensing的MCU上,只要將Vbus 接上PA9 Vbus sensing 的腳位上,並在程式initial 的時後啟動這個功能, 那麼MCU內部的hardware就會自動偵測Vbus 並且決定D+ pull high or not。
在SEPC裡面有說,如果需要開啟Vbus sensing的功能,就需要200uA的基本耗電,在有battery life 上,200uA其實不小。
Vbus 判斷的準位為4.25V
最後hardware上,請記得加裝ESD保護。
或是選用USBUF,這顆是在Vbus多加一顆zener diode 防止Vbus 突波,功能就是over voltage protection。
假設USB device 是由USB 提供電源(BUS power),那就不需要考慮這個問題了XDDDD
沒有留言:
張貼留言