STM32F103系列USB問(wèn)題
1. usb和can公用512B的RAM,但是RAm地址為0x40006000-0x40006400,分明為1KB啊,為什么還是說(shuō)512B.
2. 若PC機(jī)讀RAM中數(shù)據(jù)時(shí),我同時(shí)對(duì)RAM進(jìn)行寫(xiě)操作,怎么辦,我感覺(jué)庫(kù)中并沒(méi)有對(duì)這種操作進(jìn)行處理啊。
3. 對(duì)于緩沖區(qū),不理解為什么給了個(gè)地址,又同時(shí)給了個(gè)USB本地地址,并且我認(rèn)為,地址偏移應(yīng)該為[USB_BTABLE]*2+n*16+(0,4,8,12),也就是緩沖區(qū)描述表也應(yīng)該擴(kuò)大2倍,不知道是不是
4.不理解為什么USB_BTABLE設(shè)置成13+3位的,反正一共就512B(我理解為1K),8位就夠了
1)這個(gè)緩沖區(qū)是個(gè)雙端口RAM,CPU一端是以32位寬訪(fǎng)問(wèn),而USB一端是以16位寬訪(fǎng)問(wèn),因此從CPU端看浪費(fèi)了一半的地址空間,即從CPU端讀出32位數(shù)據(jù)時(shí)只有16位是有效的;所以1KB的地址空間,實(shí)際只有512字節(jié)的存儲(chǔ)空間。
2)因?yàn)檫@個(gè)緩沖區(qū)是個(gè)雙端口RAM,所以你不用擔(dān)心訪(fǎng)問(wèn)沖突的問(wèn)題,硬件會(huì)協(xié)調(diào)它們之間的操作。
3)因?yàn)檫@個(gè)緩沖區(qū)是個(gè)雙端口RAM,所以有2個(gè)地址空間,一個(gè)是從CPU端看,另一個(gè)是從USB收發(fā)器那一端看。
4)不明白你說(shuō)的"USB_BTABLE設(shè)置成13+3位"是什么意思。
----------------------------------------------------
1.您說(shuō)的usb收發(fā)器應(yīng)該指的的是stm芯片內(nèi)核中的獨(dú)立模塊,這個(gè)我沒(méi)有理解錯(cuò)吧,還有usb端寫(xiě)ram應(yīng)該是按字對(duì)其的是吧,比方說(shuō)寫(xiě)的地址為0x00,0x01,然后0x02,0x03不寫(xiě),再寫(xiě)0x04和0x05,我沒(méi)有理解錯(cuò)吧
2.即使是ram同一時(shí)刻也只能又一個(gè)控制器對(duì)指定地址進(jìn)行操作啊,而開(kāi)始時(shí),usb控制器以及經(jīng)addr和count讀取到內(nèi)部控制內(nèi)核中了,cpu再一次操作后不就會(huì)改變addr和count,而usb控制器的addr和count也沒(méi)有改變,怎么回事,我有點(diǎn)轉(zhuǎn)不過(guò)來(lái)
3.我的意思是沒(méi)必要把usb_btable設(shè)置成那么多位,因?yàn)榫蜎](méi)有那么大的地址空間,可以尋址,比如說(shuō)設(shè)置成0xfff8,這個(gè)已經(jīng)超出緩沖區(qū)范圍了
1)可以這么理解。但更準(zhǔn)確地說(shuō)是,USB收發(fā)器寫(xiě)RAM時(shí),如果從CPU端看,寫(xiě)的地址為0x00、0x01,然后0x02、0x03不寫(xiě),再寫(xiě)0x04、0x05;但是USB收發(fā)器寫(xiě)RAM時(shí),如果從USB端看,寫(xiě)的地址就是連續(xù)的,即0x00、0x01、0x02、0x03........。
2)你還沒(méi)有明白雙端口RAM的構(gòu)造,它有2個(gè)地址總線(xiàn)和2個(gè)操作計(jì)數(shù)器,CPU端和USB收發(fā)器端各有一個(gè)地址總線(xiàn)和一個(gè)操作計(jì)數(shù)器。
3)不錯(cuò),沒(méi)必要把usb_btable設(shè)置成那么多位,即使這樣與你的操作有什么關(guān)系嗎?不管怎樣你都不能設(shè)置超出緩沖區(qū)范圍的參數(shù)。
----------------------------
STM32F103沒(méi)有集成USB Host Controller,STM32F105或STM32F107集成了USB Host Controller。
評(píng)論