CH545芯片 4主機-4USBX設(shè)備示例

請問在USBX復(fù)合設(shè)備使用時,USB_CTRL里對芯片設(shè)備模式的配置也需要設(shè)置成設(shè)備模式嘛?如果是,那如何使用芯片同時實現(xiàn)主機和設(shè)備端通信,從而實現(xiàn)KVM功能

image.png

另外還是再求一次USBX的示例代碼,芯片手冊中對USB配置和USBX的配置沒有很好的區(qū)分開來,根據(jù)芯片手冊從頭配置 USBX需要一步步配置整個流程相當麻煩。哪怕沒有具體的中斷處理或者按鍵模擬示例,給個初始化配置的示例代碼也好啊,在這邊調(diào)了三天了,話說你們發(fā)布產(chǎn)品前總也有套代碼進行過芯片USBX功能的測試的撒,為什么會出現(xiàn)沒有示例代碼的情況?

CH545 完整的USB示例代碼(4*USB HOST+ 4*USBX)正在優(yōu)化中,預(yù)計周三可以提供。

到時候直接更新在這里,還請耐心等候一下下。


好的,十分感謝!


附件中是CH545 ROOT-HUB 4口主機+ USBX示例程序

icon_rar.gifCH545_4Hosts_4USBXDevices.zip



非常感謝,功能實現(xiàn)的比較完整了,最重要的是代碼風格變了好多,觀看體驗max!


您好,感謝您之前發(fā)送的CH545參考例程,有幾個部分還是沒有很好的理解,能麻煩您幫忙再解答一下嗎?

①地址偏移到底應(yīng)該如何理解,在根據(jù)例程修改了我自己的程序的寄存器配置和地址配置,在變量前加上指針p,在USBX_SEL中添加了對XRAM的偏移配置后,成功實現(xiàn)了PC和設(shè)備的通信。但對地址偏移的含義還是很迷糊,目前我只是可以按照例程配置單個設(shè)備,但對于多個設(shè)備,尤其是通過地址偏移來實現(xiàn)對X0、X1、X2等復(fù)合設(shè)備復(fù)用一組函數(shù)來初始化和配置,還是沒能完全理解。ps.好像對USBX0的自動偏移的描述里,還有介紹對于USBX0,會自動偏移到USBX1-3,這是什么意思?是USBX0無法使用嘛?

②HUB的中斷操作是什么意思?

USBX_ThisHub_EP1IntUp、USBX_OneHub_EP1IntUp、USBX_AllHub_EP1IntUp三個函數(shù)分別都有什么作用?hub需要中斷上傳什么數(shù)據(jù)嘛?

如果在配置了X0、X1、X2三個復(fù)合設(shè)備的D0、D1、D2的總計3*3=9個設(shè)備,需要對其中X1D0號設(shè)備進行總線復(fù)位,應(yīng)該如何調(diào)用哪個函數(shù)來操作HUB1或者X1D0設(shè)備來實現(xiàn)單個設(shè)備的總線復(fù)位,而不是直接復(fù)位整個HUB1上的三個設(shè)備?上傳HUB中斷通知是對整個HUB上所有端點進行操作嘛?



1、因為4個USBX結(jié)構(gòu)完全一樣,也就是說代碼完全通用(至少是通用的枚舉階段吧)。按照常規(guī)理解,每個USBX都會有獨立的寄存器,這個會增加代碼復(fù)雜程度。自動偏移帶來的好處就是可以直接使用一套代碼(不是絕對),只會在CPU對端點緩沖區(qū)取、寫數(shù)據(jù)時需要區(qū)分一下當前處于哪一個USBX。


或者說CH545比較典型的應(yīng)用場景KVM,目的是將4個主機口接的USB設(shè)備(通常就是鍵盤+鼠標),實現(xiàn)分時控制4臺電腦主機,這種應(yīng)用場景下,其實4個USBX干的事情都是一樣的,所以代碼具有通用性,可以真的共用一套應(yīng)用代碼(目前示例程序就做了差不多的事情)。


另一種就是每個USBX下的每個設(shè)備都是不同類別,不同功能的設(shè)備,那真的就是一個設(shè)備一套代碼。


看實際的“USBX_Endpx_UpData()”函數(shù)感覺會比較好理解這個功能,比較典型。


2、3個函數(shù),最底層其實都是調(diào)用了“USBX_ThisHub_EP1IntUp”,作用是通知操作HUB的USB主機(此處通常就是電腦了),HUB下的某個端口的設(shè)備連接狀態(tài)發(fā)生了變化,這個是HUB協(xié)議方面的處理。


在示例代碼中(前面提到做了類似將CH545自身USB HOST接口的設(shè)備做了類似透傳的功能),是判斷到CH545自身USB主機接口下接入的設(shè)備連接狀態(tài)發(fā)生變化,會調(diào)用這三個函數(shù)。


總線復(fù)位狀態(tài)的實際發(fā)送者是電腦,發(fā)送的最終對象是HUB下的某個設(shè)備,這個狀態(tài)是直接發(fā)送到HUB下的設(shè)備的,不需要實際的去以HUB角度處理(芯片內(nèi)部自動處理了真實的HUB上下游的轉(zhuǎn)發(fā))。

實際所有的處理都是”USBX_DeviceInterrupt()“這個函數(shù)處理的,且4個USBX都是調(diào)用這個函數(shù),不難發(fā)現(xiàn)這個函數(shù)的架構(gòu)其實和CH552的USB中斷服務(wù)是類似的。這個函數(shù)內(nèi)部其實是通過switch判斷MASK_UX_DEV_ID域,分別處理每個設(shè)備的。


總結(jié),偽代碼體現(xiàn),兩個switch嵌套,實現(xiàn)4*4總共16個設(shè)備的管理:

image.png


好的,目前我希望通過地址偏移來實現(xiàn)設(shè)備的靈活初始化,在主機端檢測到新設(shè)備后,在設(shè)備端的USBX設(shè)備內(nèi)進行一個新USBX設(shè)備的初始化。

我希望通過USBX_SEL選取對應(yīng)設(shè)備進行地址偏移,來進行函數(shù)的復(fù)用。

但目前似乎沒能正常實現(xiàn)。在中斷處理中,分析令牌和端點的操作:

switch(pX0D0_STATUS & ( bUXS_SETUP_ACT | MASK_UXS_TOKEN | MASK_UXS_ENDP ))? ? ?// 分析操作令牌和端點號

得到的是0x3D,沒有進入任何setup包或者IN/OUT包的處理流程

(3D應(yīng)該是端點5,PID為FREE,接受到了SETUP請問包,但我只配置了0-3端點的使能啊,而且剛剛上電不應(yīng)該先RESET或者發(fā)來端口0設(shè)備描述符的setup請求嘛?請問有哪里需要修改配置的來實現(xiàn)自動的地址偏移?)

image.png


當寄存器返回0X3D時,bUXS_SETUP_ACT已經(jīng)置位。此時已經(jīng)有一個SETUP包傳輸完成,而不需要關(guān)心別的比特位。

手冊中還指出了一種特殊情況,可能同時會存在收到SETUP包和OUT/IN包的狀態(tài),除此之外,只需要關(guān)心bUXS_SETUP_ACT這單一比特位。



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频