本帖最后由 yunjie167 于 2014-8-9 09:44 编辑
讲的非常好啊!
我看了下我的USB Mass Store里的使用了端点0、1、2。
其中端点0使用了IN和OUT,1使用了IN,2使用了OUT。备注我的程序里所有缓冲区大小都是64B
usb_conf.h中有如下的宏定义:
#define EP_NUM (3)
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x18)
#define ENDP0_TXADDR (0x58)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0x98)
/* EP2 */
/* Rx buffer base address */
#define ENDP2_RXADDR (0xD8)
正如楼主所说的,使用了3个端点,即Buffer Description Table 位于Packet Buffer的前24字节。
那么为了以后方便程序增加或减少端点,我可不可以写成这样:
#define EP_NUM (3)
/* buffer table base address */
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (EP_NUM*8+64*0)//(0x18)
#define ENDP0_TXADDR (EP_NUM*8+64*1)//(0x58)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (EP_NUM*8+64*2)//(0x98)
/* EP2 */
/* Rx buffer base address */
#define ENDP2_RXADDR (EP_NUM*8+64*3)//(0xD8)
那假如现在我在Mass Store设备了,再增加一个HID设备,该设备有IN和OUT端点,分配为端点3为IN,4为OUT。
那么我是不是这样分配Packet Buffer:
#define EP_NUM (5)
/* buffer table base address */
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (EP_NUM*8+64*0)//(0x18)
#define ENDP0_TXADDR (EP_NUM*8+64*1)//(0x58)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (EP_NUM*8+64*2)//(0x98)
/* EP2 */
/* Rx buffer base address */
#define ENDP2_RXADDR (EP_NUM*8+64*3)//(0xD8)
/* EP3 */
/* tx buffer base address */
#define ENDP3_TXADDR (EP_NUM*8+64*4)
/* EP4 */
/* Rx buffer base address */
#define ENDP4_RXADDR (EP_NUM*8+64*5) |