本帖最后由 vsfopen 于 2019-12-27 14:33 编辑
基于2楼代码,再增加一个MSC试试:
#include "vsf.h"
implement_usbd(user_usbd, 0x2348, 0xA7A8, 0x0409, USB_DC_SPEED_HIGH)
implement_usbd_common_desc(user_usbd, u"VSF-USBD-Simplest", u"SimonQian", u"1.0.0", 64, 2 * USB_DESC_CDC_ACM_IAD_LEN + USB_DESC_MSCBOT_IAD_LEN, 2 * USB_CDC_ACM_IFS_NUM + USB_MSCBOT_IFS_NUM, USB_CONFIG_ATT_WAKEUP, 100)
implement_cdc_acm_desc(user_usbd, 0, 0, 1, 2, 2, 512, 16)
implement_cdc_acm_desc(user_usbd, 1 * USB_CDC_ACM_IFS_NUM, 1, 3, 4, 4, 512, 16)
implement_msc_desc( user_usbd, 2 * USB_CDC_ACM_IFS_NUM, 2, 5, 5, 512)
implement_usbd_func_desc(user_usbd)
implement_usbd_func_str_desc(user_usbd, 0, u"VSF-CDC0")
implement_usbd_func_str_desc(user_usbd, 1, u"VSF-CDC1")
implement_usbd_func_str_desc(user_usbd, 2, u"VSF-MSC0")
implement_usbd_std_desc_table(user_usbd)
implement_usbd_func_str_desc_table(user_usbd, 0)
implement_usbd_func_str_desc_table(user_usbd, 1)
implement_usbd_func_str_desc_table(user_usbd, 2)
implement_usbd_device_func(user_usbd)
implement_cdc_acm_func(user_usbd, 0, 1, 2, 2, NULL, NULL, USB_CDC_ACM_LINECODE(115200, 8, USB_CDC_ACM_PARITY_NONE, USB_CDC_ACM_STOPBIT_1))
implement_cdc_acm_func(user_usbd, 1, 3, 4, 4, NULL, NULL, USB_CDC_ACM_LINECODE(115200, 8, USB_CDC_ACM_PARITY_NONE, USB_CDC_ACM_STOPBIT_1))
implement_msc_func( user_usbd, 2, 5, 5, 0, NULL, NULL)
implement_usbd_device_ifs(user_usbd)
implement_cdc_acm_ifs(user_usbd, 0)
implement_cdc_acm_ifs(user_usbd, 1)
implement_msc_ifs(user_usbd, 2)
end_implement_usbd(user_usbd, VSF_USB_DC0)
void main(void)
{
vk_usbd_init(&user_usbd);
vk_usbd_connect(&user_usbd);
}
这里也都是增量式的开发方式,增加新功能,那就增加新的宏,并且填参数。
这里MSC是跑不起来的,因为MSC不仅仅需要USB,还需要一个SCSI设备(可以用一块内存模拟),目前仅仅有USB部分的代码是没用的
其实,之前的CDC也只是USB部分,并没有实现数据流的代码,这里演示的也只是USB的极简化开发方式
|