MF Porting之USB驅動開發

2021-09-19 13:26:16 字數 3433 閱讀 3900

花費了近三個禮拜的時間,終於完成了ti開發板的usb驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355實現了,軟體層面的資料互動由mf porting實現了,所做的也就是熟悉了解usb通訊協議和dm355 usb相關的暫存器。

在開發驅動的過程中,覺得有這麼幾個難點,一是dm355支援三種usb模式:device、host、otg,usb相關的暫存器比較多,並且由於該cpu推出才半年,不僅說明書語焉不詳,相關示例程式也沒有,所以開發起來挺費功夫的;二是usb協議比我以前接觸的網口、串列埠通訊要複雜多了,要通過狀態機等等機制才能一步步完成相關通訊過程。

mf預設的usb驅動支援v1.10協議,僅支援兩個端點(0是預設端點,所有的usb裝置都支援),預設的配置如下:

一、驅動描述表(18 byte)

1、型別=device(1)

2、usb支援的版本是v1.10

3、裝置類、子類、協議都為0

4、端點0的最大包位元組數為8

5、廠商id=0x15a2

6、產品id=0x0026

7、裝置發行版本v1.00

8、廠商資訊索引=1

9、產品名字索引=2

10、序列號產品索引=0

11、配置描述表的數目=1

二、標準配置描述表(9 byte)

配置標識=2  值=0  總長度=配置描述表長度+介面描述表長度+兩個埠描述表長度

1、型別=configuration(2)

2、配置資訊總長度=配置描述表長度+介面描述表長度+兩個埠描述表長度

3、支援的介面數=1

4、該配置的標識=1

5、配置描述符索引=0

6、屬性:自給電源

7、usb的匯流排電源耗費量=280ma

三、標準介面描述表(9 byte)

1、型別=inte***ce(4)

2、介面號=0   (如果存在多個介面,該序號是介面索引號)

3、可選設定的索引值=0

4、端點數=2   (0表示僅支援預設端點)

5、介面類=0xff,表示由廠商自己說明

6、介面子類=1

7、介面協議=1

8、介面字串描述索引=0

四、端點1描述表(7 byte)

1、型別=endpoint(5)

2、位址=1,輸入端點

3、傳送型別=批發送

4、最大包大小=64

5、時間間隔為0,該傳輸模式忽略該值

五、端點2描述表(7 byte)

1、型別=endpoint(5)

2、位址=2,輸出端點

3、傳送型別=批發送

4、最大包大小=64

5、時間間隔為0,該傳輸模式忽略該值

六、廠商名字

七、產品名字

八、顯示名字

九、friendly name:e7e70ea2

十、sideshow os版本: msft100

十一、sideshow相關配置資訊

字串語言是u.s. english    0x0409

----------------------------------

順便說一句,目前正在移植sideshow,sideshow借助串列埠驅動的介面實現usb通訊(也就是說當串列埠等於約定的32的時候(com33)操作的是usb裝置)。

花費了近三個禮拜的時間,終於完成了ti開發板的usb驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355實現了,軟體層面的資料互動由mf porting實現了,所做的也就是熟悉了解usb通訊協議和dm355 usb相關的暫存器。

在開發驅動的過程中,覺得有這麼幾個難點,一是dm355支援三種usb模式:device、host、otg,usb相關的暫存器比較多,並且由於該cpu推出才半年,不僅說明書語焉不詳,相關示例程式也沒有,所以開發起來挺費功夫的;二是usb協議比我以前接觸的網口、串列埠通訊要複雜多了,要通過狀態機等等機制才能一步步完成相關通訊過程。

mf預設的usb驅動支援v1.10協議,僅支援兩個端點(0是預設端點,所有的usb裝置都支援),預設的配置如下:

一、驅動描述表(18 byte)

1、型別=device(1)

2、usb支援的版本是v1.10

3、裝置類、子類、協議都為0

4、端點0的最大包位元組數為8

5、廠商id=0x15a2

6、產品id=0x0026

7、裝置發行版本v1.00

8、廠商資訊索引=1

9、產品名字索引=2

10、序列號產品索引=0

11、配置描述表的數目=1

二、標準配置描述表(9 byte)

配置標識=2  值=0  總長度=配置描述表長度+介面描述表長度+兩個埠描述表長度

1、型別=configuration(2)

2、配置資訊總長度=配置描述表長度+介面描述表長度+兩個埠描述表長度

3、支援的介面數=1

4、該配置的標識=1

5、配置描述符索引=0

6、屬性:自給電源

7、usb的匯流排電源耗費量=280ma

三、標準介面描述表(9 byte)

1、型別=inte***ce(4)

2、介面號=0   (如果存在多個介面,該序號是介面索引號)

3、可選設定的索引值=0

4、端點數=2   (0表示僅支援預設端點)

5、介面類=0xff,表示由廠商自己說明

6、介面子類=1

7、介面協議=1

8、介面字串描述索引=0

四、端點1描述表(7 byte)

1、型別=endpoint(5)

2、位址=1,輸入端點

3、傳送型別=批發送

4、最大包大小=64

5、時間間隔為0,該傳輸模式忽略該值

五、端點2描述表(7 byte)

1、型別=endpoint(5)

2、位址=2,輸出端點

3、傳送型別=批發送

4、最大包大小=64

5、時間間隔為0,該傳輸模式忽略該值

六、廠商名字

七、產品名字

八、顯示名字

九、friendly name:e7e70ea2

十、sideshow os版本: msft100

十一、sideshow相關配置資訊

字串語言是u.s. english    0x0409

----------------------------------

順便說一句,目前正在移植sideshow,sideshow借助串列埠驅動的介面實現usb通訊(也就是說當串列埠等於約定的32的時候(com33)操作的是usb裝置)。

MF Porting之USB驅動開發

花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...

MF Porting之USB驅動開發

花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...

MF Porting之USB驅動開發

花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...