USB又有問題,所以再來複習一下 ISP1582 的 plug-in interrupt sequence...
- Get VBUS Interrupt
- Reset Controller
- Unlock Controller
- Set bit "bmSoftCt" == 之後若是pause的話,pc 會出現 "USB 裝置無法辨識"。
- Enable Interrupt
- 因為reset controller,所以會再出現一次 VBUS Interrupt
- Set bit "bmSoftCt"
- Get BUSReset "bmIBrst" Interrupt
- 設定好 endpoint register (low speed, double buffer, enable)
- Enable null address
- 啟動 power "bmPwrOn", Clock "bmClkaon"
- Get High-Speed Interrupt
- 進入high speed,重新設定 endpoint (high speed, double buffer, enable)
- Get BUSReset "bmIBrst" Interrupt Again..
- Get High-Speed Interrupt Again..
- Get EP0Setup Interrupt
在 interrupt handler 中加上 log... interrupt 依次是 (第一次的VBUS不算)
- VBUS
- Brst (BUSRESET)
- HighSpeed
- EP0 Setup
- Brst (BUSRESET)
- HighSpeed
- EP0 Setup
- ... EP0 Setup...
這一篇 ( USB Made Simple ) 有說明 Device Plug-in 時的電器信號。
Host 看到的D+, D- 狀態:
Detached:
Host 沒有接任何device時。
- D+ : 0
- D- : 0
- D+ : 1 -- 這個是Device 拉的,因為device的D+有接1.5k ohms 到 3.3V
- D- : 0
所以拿示波器量測 D+ (device端):
- D+, D- 都是GND
- D+ 3.3V , D- 0.0 : 這是 controller 送出 SoftCt - 將D+ 拉到High (之後就維持到High)
- D+ 3.3 V 維持約100ms 之後 D+ 到 0.0V : 這是 PC送出的 bus reset。
- D+ 0.0V 維持約10 ms後(ref)恢復到3.3V : controller 收到 Bus Reset interrupt。
- 之後 應該是連續的High/Low (高速交握)...(ref Negotiation High Speed)
這裡(討論區) 還有一個中文的有關 USB 啟動信號的說明。
-- 為防止討論區倒閉,我的google notes有一個備份 --
沒有留言:
張貼留言