完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在前面几个章节我们介绍了MM32 MCU的各种常用的USB功能,而随着物联网的发展,有时候希望我们直接可以通过网页访问USB设备,于是出现了一种新的u***使用类型即WebUSB,通过让MCU USB实现WebUSB功能,就可以直接与网页通信,因此我们本节我们讲解MM32 MCU的WebUSB功能。 对于WebUSB来说,其是由Reilly Grant和Ken Rockot开发的,它已经被推入W3C WICG,以求建立一个能够被浏览器制造商引用的平台。WebUSB是一个Javascript API,可以允许网页访问已连接的USB设备,这里的USB设备是指系统和工业的USB设备。通过WebUSB API,我们可以让USB设备,比如键盘、鼠标、3D打印机和硬件驱动连接到物联网,甚至在Web页面上进行定位。这一产品的目的,是为了帮助硬件制造商将他们的USB设备实现跨平台通用(包括Web),此后不需要为特定的平台写本地驱动或者SDK。除了控制硬件,WebUSB也可以通过Web页面安装固件升级或者执行其他重要任务。然而,这个草拟版本的API并不能传输文件。 当然,目前WebUSB现在只是个草拟版本,还没有正式采用W3C标准。其开发工作仍然在进展之中,但是我们现在还是可以在Github上看到完整的WebUSB代码库(https://github.com/wicg/webu***)。 WebUSB原理 当USB设备插入主机时,浏览器会读取设备发送的描述符,然后将其储存在内部USB设备储存器中。此过程由Chrome的浏览器内核Blink处理。日志可以在chrome://device-log(GET参数“refresh = 1”非常有用)中查看。 根据规范要求,设备可以在其二进制对象存储中的平台描述符中明确地声明对WebUSB的支持。 浏览器将每个USB设备存储在自己的设备存储器中。WebUSB的可访问性由本机驱动程序支持所决定。在Windows上,我们可以通过浏览器访问由WinUSB驱动程序处理的每个USB设备。其他的诸如大容量存储设备,网络摄像头或HID等就无法通过网络访问了,因为它们具有处理这些设备的专用驱动程序。 本节我们来讲解如何在MM32 MCU实现WebUSB设备功能,对于MM32 MCU来说,实现WebUSB只需要在之前程序基础上修改添加部分代码即可。 本次我们采用MM32L373 miniboard作为测试开发板。为了方便大家使用MM32 MCU的WebUSB设备功能,我们已经封装好全部代码,用户不需要自己配置那些麻烦的描述符等参数,只需要知道用之前的单一设备函数即可。 软件资源如下: 对于MM32 MCU的WebUSB,我们可以配置WebUSB的参数来让网页识别设备。 #define USBD_WEBUSB_STRDESC L"WebUSB: MM32" // WebUSB support #define USBD_WEBUSB_ENABLE WEBUSB_INTERFACE #define USBD_WEBUSB_VENDOR_CODE 0x21 #define USBD_WEBUSB_LANDING_URL "os.mbed.com/webu***/landing-page/?bid=" #define USBD_WEBUSB_ORIGIN_URL "os.mbed.com/" 参数设置如上可以看到电脑上显示的设备名称WebUSB:MM32,如下: 图2 WebUSB枚举列表 在使用MM32 WebUSB功能之前先调用USB初始化函数来初始化USB协议栈。 int main(void) { // USB Device Initialization and connect u***d_init(); u***d_connect(__TRUE); while (!u***d_configured()) // Wait for USB Device to configure { } while (1) { …… } } 然后依然和之前一样只是在WINUSB基础上添加WebUSB相关参数函数接口即可,代码如下: #if (USBD_WEBUSB_ENABLE) u***d_webu***_if_num = if_num++; desc_ptr += webu***_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], u***d_webu***_if_num); #endif #if (USBD_WEBUSB_ENABLE) static U16 webu***_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { U8 * pD = 0; const U8 webu***_desc[] = { WEBUSB_DESC }; pD = config_desc; memcpy(pD, webu***_desc, sizeof(webu***_desc)); ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; #if (USBD_HS_ENABLE == 1) pD = config_desc_hs; memcpy(pD, webu***_desc, sizeof(webu***_desc)); ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; #endif #if (USBD_WINUSB_ENABLE) pD = USBD_WinUSBDescriptorSetDescriptor + WINUSB_DESCRIPTOR_SET_HEADER_SIZE; ((WINUSB_FUNCTION_SUBSET_HEADER*)pD)->bFirstInterface = if_num; #else #error "WEBUSB requires WINUSB!" #endif return sizeof(webu***_desc); } #endif 这样我们就完成MM32 MCU的WebUSB功能,将程序下载到板子中,USB插上电脑,电脑上会枚举出WebUSB。在WebUSB枚举成功后,我们需要检查是否真的可以被网页识别。找了一个静态网页,通过该网页检测WebUSB工作状态。 图3 测试网页 要测试设备是否支持,请单击“选择设备”按钮打开权限提示。此提示将列出所有可用的USB设备。通过选择所需的设备并单击“连接”,工具将打开设备,并遍历每个可用的界面,并尝试声明。结果记录在页面底部的表格中。被声明的interfaces列显示可以声明的接口编号,我们点击choose A Device。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2253个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11843 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5980 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
11127 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4598 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4333 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1350浏览 1评论
859浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 02:55 , Processed in 0.628391 second(s), Total 58, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号