stm32 usb數據緩沖區(qū)疑問
所以STM32為USB模塊提供了共512個字節(jié)的存儲區(qū),至于如何為每個端點分配使用這512B的空間,就是用戶自己的事情了,這樣存儲區(qū)的分配就非常經濟靈活。這512B空間的首地址是0x40006000。
你看到的#define
至于如何定義端點2的發(fā)送緩沖區(qū),就看你的應用了。你把端點2的接受緩沖區(qū)定義在0xd8,如果端點2的接收數據長度是64個字節(jié),那就要為端點2的接收保留64個字節(jié),端點2的發(fā)送緩沖區(qū)就要定義到0xd8+64之后的空間。
即:#define
當然也可以#define
總之如何分配這段存儲區(qū),完全可以按照你應用的需求來做。
最近研究了下103VBT6的USB,看了很多次都看不明白,我開始懷疑我的閱讀能力了?,F有以下幾點疑問請教大家
1.緩沖區(qū)描述表在緩沖區(qū)內即0x4000 6000--0x400063FF。如果我只用端點0,那么端點0的緩沖區(qū)描述表為
ADDR0_TX、COUNT0_TX、ADDR0_RX、COUNT0_RX所對應的地址為0x4000 6000--0x4000 6008 (USB_BTABLE = 0)
現在有兩人疑問:
A.0x4000 6008以后的地址可不可以作緩沖區(qū)?
B.如果給ADDR0_TX、COUNT0_TX賦個合適的值,會不會端點0的緩沖區(qū)在0x4000 6000--0x4000 6008內,從而覆蓋了它的緩沖區(qū)描術表?
2.為什么分組緩沖區(qū)地址(按字節(jié)編址)要乘以2才是緩沖區(qū)在MCU的地址,能不能舉個例子說明?
3.0x4000 6000--0x400063FF等于1024字節(jié),為什么是512字節(jié),是不是后一半沒有使用,芯片為103VBT6?如果我有一個端
點用了512字節(jié)緩沖區(qū),那么緩沖區(qū)就用完了,是不是表示其他端點就沒有緩沖區(qū)可用了,連緩沖區(qū)描述表都沒有空間可分配了
1.緩沖區(qū)描述表在緩沖區(qū)內即0x4000
ADDR0_TX、COUNT0_TX、ADDR0_RX、COUNT0_RX所對應的地址為0x4000
現在有兩人疑問:
A.0x4000
B.如果給ADDR0_TX、COUNT0_TX賦個合適的值,會不會端點0的緩沖區(qū)在0x4000
2.為什么分組緩沖區(qū)地址(按字節(jié)編址)要乘以2才是緩沖區(qū)在MCU的地址,能不能舉個例子說明?
3.0x4000
點用了512字節(jié)緩沖區(qū),那么緩沖區(qū)就用完了,是不是表示其他端點就沒有緩沖區(qū)可用了,連緩沖區(qū)描述表都沒有空間可分配了
1.A) 如果只使用端點0,0x4000 6010以后的地址可以作緩沖區(qū)。注意不是0x4000 6008以后的地址,原因請看下面的2)。
1.B) 如果給ADDR0_TX、COUNT0_TX賦的值不合適,端點0的緩沖區(qū)有可能覆蓋緩沖區(qū)描述表,所以請選擇合適的值,以避免沖突。
2)這是因為分組緩沖區(qū)是一個雙端口的RAM,CPU一端需要使用32位方式訪問,但USB模塊一端使用16位方式訪問。
例如需要從0x4000 6010開始分配8個字節(jié)的緩沖區(qū),則從CPU一端看,需要占用0x4000 6010、0x4000 6014、0x4000 6018和0x4000 601C開始的4個字的空間,即CPU端每4個字節(jié)的地址空間中,只有2個字節(jié)的地址空間對應實際的存儲器,而另2個字節(jié)的地址空間沒有對應到任何物理的存儲器。
3)1024字節(jié)與512字節(jié)的問題,請看上面的說明。
如果有一個端點用了512字節(jié)緩沖區(qū),那么緩沖區(qū)就用完了,表示其他端點就沒有緩沖區(qū)可用了,連緩沖區(qū)描述表都沒有空間可分配了。
1.B)
2)這是因為分組緩沖區(qū)是一個雙端口的RAM,CPU一端需要使用32位方式訪問,但USB模塊一端使用16位方式訪問。
例如需要從0x4000
3)1024字節(jié)與512字節(jié)的問題,請看上面的說明。
如果有一個端點用了512字節(jié)緩沖區(qū),那么緩沖區(qū)就用完了,表示其他端點就沒有緩沖區(qū)可用了,連緩沖區(qū)描述表都沒有空間可分配了。
評論