CH545芯片 4主機-4USBX設備示例

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

image.png

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

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

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


好的,十分感謝!


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

icon_rar.gifCH545_4Hosts_4USBXDevices.zip



非常感謝,功能實(shí)現的比較完整了,最重要的是代碼風(fēng)格變了好多,觀(guān)看體驗max!


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

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

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

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

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



1、因為4個(gè)USBX結構完全一樣,也就是說(shuō)代碼完全通用(至少是通用的枚舉階段吧)。按照常規理解,每個(gè)USBX都會(huì )有獨立的寄存器,這個(gè)會(huì )增加代碼復雜程度。自動(dòng)偏移帶來(lái)的好處就是可以直接使用一套代碼(不是絕對),只會(huì )在CPU對端點(diǎn)緩沖區取、寫(xiě)數據時(shí)需要區分一下當前處于哪一個(gè)USBX。


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


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


看實(shí)際的“USBX_Endpx_UpData()”函數感覺(jué)會(huì )比較好理解這個(gè)功能,比較典型。


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


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


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

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


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

image.png


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

我希望通過(guò)USBX_SEL選取對應設備進(jìn)行地址偏移,來(lái)進(jìn)行函數的復用。

但目前似乎沒(méi)能正常實(shí)現。在中斷處理中,分析令牌和端點(diǎn)的操作:

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

得到的是0x3D,沒(méi)有進(jìn)入任何setup包或者IN/OUT包的處理流程

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

image.png


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

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



只有登錄才能回復,可以選擇微信賬號登錄
97精品依人久久久大香线蕉97-亚洲欧美日韩一区二区三区-国产亚洲欧美精品久久久-久久99精品久久久大学生-亚洲成a人片在线不卡一二三区 97精品依人久久久大香线蕉97-亚洲欧美日韩一区二区三区-国产亚洲欧美精品久久久-久久99精品久久久大学生-亚洲成a人片在线不卡一二三区