ChipIdea高速雙角色控制器驅動¶
1. 如何測試OTG FSM(HNP和SRP)¶
演示如何透過sys輸入檔案,在兩塊飛思卡爾i.MX6Q sabre SD板上演示OTG HNP和SRP功能。
1.1 如何啟用OTG FSM¶
1.1.2 在dts檔案中為控制器節點新增以下條目¶
otg-rev = <0x0200>;
adp-disable;
1.2 測試操作¶
啟動兩塊已載入小工具類驅動(例如g_mass_storage)的飛思卡爾i.MX6Q sabre SD板。
用USB線連線兩塊板:一端是micro A插頭,另一端是micro B插頭。
A裝置(插入micro A插頭)應列舉B裝置。
角色切換
在B裝置上
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
B裝置應扮演主機角色並列舉A裝置。
A裝置切換回主機角色。
在B裝置上
echo 0 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
或者,透過引入HNP輪詢,B主機可以知道A外設何時希望扮演主機角色,因此此角色切換也可以透過A外設響應B主機的輪詢來在A外設側觸發。這可以在A裝置上完成
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req
A裝置應切換回主機角色並列舉B裝置。
移除B裝置(拔下micro B插頭)並在10秒內再次插入;A裝置應再次列舉B裝置。
移除B裝置(拔下micro B插頭)並在10秒後再次插入;A裝置不應列舉B裝置。
如果A裝置想使用匯流排
在A裝置上
echo 0 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_drop echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req
如果B裝置想使用匯流排
在B裝置上
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
A裝置關閉匯流排電源。
在A裝置上
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_drop
A裝置應與B裝置斷開連線並關閉匯流排電源。
B裝置為SRP發出資料脈衝。
在B裝置上
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
A裝置應恢復USB匯流排並列舉B裝置。
1.3 參考文件¶
“On-The-Go and Embedded Host Supplement to the USB Revision 2.0 Specification July 27, 2012 Revision 2.0 version 1.1a”
2. 如何啟用USB作為系統喚醒源¶
以下是在imx6平臺上啟用USB作為系統喚醒源的示例。
2.1 啟用核心喚醒
echo enabled > /sys/bus/platform/devices/ci_hdrc.0/power/wakeup
2.2 啟用膠合層喚醒
echo enabled > /sys/bus/platform/devices/2184000.usb/power/wakeup
2.3 啟用PHY喚醒(可選)
echo enabled > /sys/bus/platform/devices/20c9000.usbphy/power/wakeup
2.4 啟用根集線器喚醒
echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
2.5 啟用相關裝置喚醒
echo enabled > /sys/bus/usb/devices/1-1/power/wakeup
如果系統只有一個USB埠,並且您想在此埠啟用USB喚醒,可以使用以下指令碼啟用USB喚醒
for i in $(find /sys -name wakeup | grep usb);do echo enabled > $i;done;