CH32V307使用USBDHS如何開啟雙緩沖

CH32V307使用480Mbps高速USB作為設(shè)備,開啟EP1OUT端點的ISO同步接收模式,現(xiàn)在每個微幀傳輸數(shù)據(jù)量大于1024字節(jié),需要每個微幀發(fā)包2次,是不是需要用到雙緩沖保證有足夠的的時間取回數(shù)據(jù)?手冊里面ISO傳輸雙緩沖區(qū)沒有看明白。

`{M@VU4N0ZRIHM_}}Y5H(]8.png

您好,關(guān)于雙緩沖區(qū),可以具體看一下注解那部分,當(dāng)開啟同步后,對于同步IN端點,發(fā)送緩沖區(qū)和接收緩沖區(qū)都被用作發(fā)送緩沖區(qū)發(fā)送數(shù)據(jù),對于同步OUT端點,發(fā)送緩沖區(qū)和接收緩沖區(qū)都被用作接收緩沖區(qū)接收數(shù)據(jù)。關(guān)于傳輸數(shù)據(jù)量大于1024字節(jié)時,程序中自己設(shè)置一個環(huán)形緩沖區(qū)之類應(yīng)該也是可以的。


那是不是相當(dāng)于,如果想用雙緩沖,那么每個端點就不能同時使用發(fā)送和接收功能?

比如0x01 和0x81就不能同時使用。就要使用0x01 和 0x82 這樣的組合實現(xiàn)輸入輸出?



您好,可以這么理解的


我可以軟件實現(xiàn)雙緩沖嗎? 在中斷里,接收到一個包后,把RX_DMA的地址更改可以嗎?還是說如果下一個包已經(jīng)在傳輸?shù)倪^程更改RX_DMA的用法會出錯?


這個USB外設(shè)是直接把接收數(shù)據(jù)寫入sram嗎?還是自身帶有一個緩沖區(qū),只有在上一個包的中斷處理完之后,才會把下一個包的數(shù)據(jù)通過DMA寫入sram?


謝謝。


Q1:我可以軟件實現(xiàn)雙緩沖嗎? 在中斷里,接收到一個包后,把RX_DMA的地址更改可以嗎?

A:可以。

在中斷里,代表著接收完成或者發(fā)送完成一個數(shù)據(jù)包,此時可以修改EP?_TX/RX_DMA寄存器的值,來修改下一次傳輸數(shù)據(jù)包存取的位置(注意起始地址4字節(jié)對齊),這樣下一次傳輸就會對新配置的RAM區(qū)域進行讀寫,能夠加快USB事務(wù)處理速度,避免緩沖區(qū)的重用(另一個外設(shè)的訪問)。用這個方式,可以實現(xiàn)“動態(tài)”緩沖區(qū),不僅僅是雙緩沖,1024字節(jié)一個包,可以盡可能的用盡RAM,做一個環(huán)形緩沖區(qū)。


Q2:還是說如果下一個包已經(jīng)在傳輸?shù)倪^程更改RX_DMA的用法會出錯?

A:上述通過在中斷中修改EP?_TX/RX_DMA寄存器的操作,需要確保在傳輸完成中斷產(chǎn)生之后,配置下一次事務(wù)的ACK應(yīng)答狀態(tài)之前,這個時間段內(nèi)切換是沒有錯的。此外任何時間都不應(yīng)該去修改。


這種切換方式應(yīng)當(dāng)被絕大部分的數(shù)據(jù)轉(zhuǎn)發(fā)應(yīng)用采用,極力避免或盡可能減少memcpy之類的操作。


Q3:這個USB外設(shè)是直接把接收數(shù)據(jù)寫入sram嗎?還是自身帶有一個緩沖區(qū),只有在上一個包的中斷處理完之后,才會把下一個包的數(shù)據(jù)通過DMA寫入sram?

A:無需糾結(jié)外設(shè)自身、DMA、RAM之間的交互關(guān)系,只需要記住芯片產(chǎn)生傳輸完成中斷之后,數(shù)據(jù)已經(jīng)存放于RAM中,或者已經(jīng)從RAM中全部讀取走了。即簡單說芯片處在某個端點的傳輸完成中斷中的時候,通常該端點的RAM(EP?_TX/RX_DMA寄存器中配置的)是被釋放的狀態(tài),因為事務(wù)已經(jīng)結(jié)束。


你好,硬件的雙緩沖怎么實現(xiàn)自動切換緩沖區(qū)?如果每次都要在USB中斷里面切換緩沖區(qū),那開不開雙緩沖就沒區(qū)別了。


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

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