10.26.2007

USB plug-in Interrupt Sequence

以下資料都是參考(Copy)自"USB Made Simple" http://www.usbmadesimple.co.uk 網站內容:


USB又有問題,所以再來複習一下 ISP1582 的 plug-in interrupt sequence...
  1. Get VBUS Interrupt
    1. Reset Controller
    2. Unlock Controller
    3. Set bit "bmSoftCt" == 之後若是pause的話,pc 會出現 "USB 裝置無法辨識"。
    4. Enable Interrupt
  2. 因為reset controller,所以會再出現一次 VBUS Interrupt
    1. Set bit "bmSoftCt"
  3. Get BUSReset "bmIBrst" Interrupt
    1. 設定好 endpoint register (low speed, double buffer, enable)
    2. Enable null address
    3. 啟動 power "bmPwrOn", Clock "bmClkaon"
  4. Get High-Speed Interrupt
    1. 進入high speed,重新設定 endpoint (high speed, double buffer, enable)
  5. Get BUSReset "bmIBrst" Interrupt Again..
  6. Get High-Speed Interrupt Again..
  7. Get EP0Setup Interrupt

在 interrupt handler 中加上 log... interrupt 依次是 (第一次的VBUS不算)
  1. VBUS
  2. Brst (BUSRESET)
  3. HighSpeed
  4. EP0 Setup
  5. Brst (BUSRESET)
  6. HighSpeed
  7. EP0 Setup
  8. ... EP0 Setup...

這一篇 ( USB Made Simple ) 有說明 Device Plug-in 時的電器信號。

Host 看到的D+, D- 狀態:

Detached:
Host 沒有接任何device時。
  • D+ : 0
  • D- : 0
Attached (High, Full Speed device)

  • D+ : 1 -- 這個是Device 拉的,因為device的D+有接1.5k ohms 到 3.3V
  • D- : 0
由於這個狀態就是 device, host 相連後,雙方都沒動作的狀態,所以又叫 idle state

所以拿示波器量測 D+ (device端):
  1. D+, D- 都是GND
  2. D+ 3.3V , D- 0.0 : 這是 controller 送出 SoftCt - 將D+ 拉到High (之後就維持到High)
  3. D+ 3.3 V 維持約100ms 之後 D+ 到 0.0V : 這是 PC送出的 bus reset。
  4. D+ 0.0V 維持約10 ms後(ref)恢復到3.3V : controller 收到 Bus Reset interrupt。
  5. 之後 應該是連續的High/Low (高速交握)...(ref Negotiation High Speed)
USB Made Simple Part 6: High Speed Negotiation 有 一張波形圖:



這裡(討論區) 還有一個中文的有關 USB 啟動信號的說明。
-- 為防止討論區倒閉,我的google notes有一個備份 --

沒有留言: