打印

VSF_USBD 预览版发布

[复制链接]
1911|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Simon21ic|  楼主 | 2011-5-13 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB, ST, RS, RSA, ic
本帖最后由 Simon21ic 于 2011-5-13 22:47 编辑

代码:
http://code.google.com/p/vsprog/source/browse/#svn%2Ftrunk%2Fdongle%2Ffirmware%2Fvsf%2Fstack%2Fusb_device%253Fstate%253Dclosed
使用到的ST的USB库的文件:usb_mem.c和usb_regs.c
应用示例:
http://code.google.com/p/vsprog/source/browse/#svn%2Ftrunk%2Fdongle%2Ffirmware%2FUSB_TO_XXX%2FUSB
这个示例是Versaloon编程器的USB应用代码,使用ST的VID + 0xA038的PID是经过ST授权的。

简单的说明:
根据设备的信息,定义好usb_device结构后,调用vsfusbd_device_init(&usb_device);即可正常实现设备的枚举。不需要修改底层的USB端口设置以及USB缓存设置,VSF_USBD会自动根据设备的描述符进行设置(除了双缓冲设置,因为无法根据描述符判断出那些端口是需要双缓冲的,双缓冲功能可以在protocol初始化函数中设置)。
RESULT usb_protocol_init()
{
    return vsfusbd_device_init(&usb_device);
}

底层SIE驱动:
目前只是实现了STM32的驱动,正在处理另一个芯片(目前一级保密)的SIE驱动,以后会增加更多的芯片的SIE驱动,并且保持驱动的接口一致,驱动层以上的所有代码不需要修改。

类协议以及用户协议:
vsfusbd_class_protocol_t结构用于实现类协议以及自定义协议,示例中只是使用了这个结构的初始化函数:
static RESULT versaloon_init(struct vsfusbd_device_t *device)
{
    if ((ERROR_OK != device->drv->ep.set_IN_dbuffer(2)) ||
        (ERROR_OK != device->drv->ep.set_OUT_dbuffer(3)) ||
        (ERROR_OK != device->drv->ep.set_IN_handler(2, Versaloon_IN_hanlder)) ||
        (ERROR_OK != device->drv->ep.set_OUT_handler(3, Versaloon_OUT_hanlder)))
    {
        return ERROR_FAIL;
    }
    return ERROR_OK;
}
还可以定义protocol相关的描述符以及request。
这个protocol初始化函数设置了数据口的双缓冲(实际底层还没有实现),并且,设置了数据端点的处理函数(以后系统会集成一些常规的处理函数,现在就先暂时这么用吧)。

USB描述符设置:
通过一个结构以及辅助宏简单搞定:
static const struct vsfusbd_desc_filter_t descriptors[] =
{
    VSFUSBD_DESC_DEVICE(0, Versaloon_DeviceDescriptor, sizeof(Versaloon_DeviceDescriptor), NULL),
    VSFUSBD_DESC_CONFIG(0, 0, Versaloon_ConfigDescriptor, sizeof(Versaloon_ConfigDescriptor), NULL),
    VSFUSBD_DESC_STRING(0, 0, Versaloon_StringLangID, sizeof(Versaloon_StringLangID), NULL),
    VSFUSBD_DESC_STRING(0x0409, 1, Versaloon_StringVendor, sizeof(Versaloon_StringVendor), NULL),
    VSFUSBD_DESC_STRING(0x0409, 2, Versaloon_StringProduct, sizeof(Versaloon_StringProduct), NULL),
    VSFUSBD_DESC_STRING(0x0409, 3, Versaloon_StringSerial, sizeof(Versaloon_StringSerial), NULL),
    VSFUSBD_DESC_NULL
};

PS:
看的懂的来玩吧,欢迎提建议
沙发
来与君| | 2011-5-14 09:10 | 只看该作者
很想玩UVC啊

支持一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:www.versaloon.com --- under construction

266

主题

2597

帖子

104

粉丝