在USBIF 裡有測到下列狀況的VBUS電流:
1. USB 有認到時的電流: 100mA/500mA
2. USB 沒(還沒)認到時的電流: 100mA/500mA
3. 電腦 suspend 時的電流: 2.5mA
4. 正常運作時的電流: 100mA/500mA
所以有兩個地方,USB 需通知charging driver
1. 電腦認到 USB 時
2. 電腦 suspend 時
*以下是 Quallcomm 認到通知的flow(quallcomm 是以有被設了new address 才開始充電)
UfnPdd_SetAddress() @Msm_usbhs.cpp (\wm\platform\qcmsm\src\drivers\usb\highspeed\fn)
-> UfnPDD_NotifyChargerCurrent(), 帶pdd->dChargerCurrent進去,init 在 s_deviceRegParams @Msm_subhs.cpp, 目前設定100, 意思是 100 mA
-> DeviceIOControl 帶IOCTL_OTG_SET_REMOTE_DEV_A_INFO 參數,和要充的電流大小
Cl13611OTG::IOControl() @Cl13611.cpp (\wm\platform\qcmsm\src\drivers\usb\highspeed\otg)
這裡會收到 IOCTL_OTG_SET_REMOTE_DEV_A_INFO , pBufIn 就是要充的電流大小
*以下是 電腦 suspend 通知的 flow
UfnPDD_NotifySuspend() @Msm_usbhs.cpp (\wm\platform\qcmsm\src\drivers\usb\highspeed\fn)
這個不是WINAPI ,找不到從哪裡call 來,可能是 Quallcomm 的lib
-> UfnPDD_NotifyChargerCurrent(), 帶current 變數進去,如果是suspend, current=0
如果不是,current=100
-> DeviceIOControl 帶IOCTL_OTG_SET_REMOTE_DEV_A_INFO 參數,和要充的電流大小
Cl13611OTG::IOControl() @Cl13611.cpp (\wm\platform\qcmsm\src\drivers\usb\highspeed\otg)
這裡會收到 IOCTL_OTG_SET_REMOTE_DEV_A_INFO , pBufIn 就是要充的電流大小
Showing posts with label USB driver. Show all posts
Showing posts with label USB driver. Show all posts
5.05.2009
2.03.2009
卡了好幾個月的 USB bug
現象: 用RNDIS mode 連Activesync 時,會斷。有時5min,有時10min,有時 8h
這個問題大概前後也解了五個月了吧(沒被fire 但也沒什麼bonous)。
從懷疑connector 鬆掉,然後防火牆防毒軟體,到用USB Analyzer 抓封包,才真正抓到Root cause. 就是Marvell 的 USB driver 寫的有風險,只要手機的速度跑的比電腦丟封包的速度快,就斷了。
經過這件事,學到兩點:
1. BSP不是都沒問題.
2. 沒有所謂的timing issue. 只有code的嚴僅度問題
有空把bug 貼上來
這個問題大概前後也解了五個月了吧(沒被fire 但也沒什麼bonous)。
從懷疑connector 鬆掉,然後防火牆防毒軟體,到用USB Analyzer 抓封包,才真正抓到Root cause. 就是Marvell 的 USB driver 寫的有風險,只要手機的速度跑的比電腦丟封包的速度快,就斷了。
經過這件事,學到兩點:
1. BSP不是都沒問題.
2. 沒有所謂的timing issue. 只有code的嚴僅度問題
有空把bug 貼上來
Subscribe to:
Posts (Atom)