USB

通用串行总线(USB)接口在嵌入式设计中的优势包括与各种设备的兼容性、简化的通信协议、现场更新能力和供电能力。为了帮助将这一功能轻松集成到嵌入式系统中,Microchip Technology Inc.(微芯科技公司)推出了 AVR® DU 系列单片机。作为集成USB连接的下一代Microchip 8位MCU,AVR DU系列的设计旨在提供比以往版本更强的安全功能和更高的功率输出。

1.jpg

Microchip负责8 位MCU事业部的副总裁Greg Robinson表示:“USB是电子设备的标准通信协议和电源输出方案。Microchip的AVR DU系列将我们最先进的8位MCU的灵活性与增强型电源输出的多功能性相结合,为更广泛的嵌入式系统带来了USB的优势。” 

AVR DU MCU支持从USB接口提供高达15W的功率,这在同类其他USB单片机中并不多见。该功能可在5V电压下以高达3A的电流为USB-C®充电,使这些MCU成为充电宝和可充电玩具等设备的绝佳选择。

为了加强对恶意攻击的防御,AVR DU系列采用了Microchip的编程和调试接口禁用 (PDID) 功能。启用该功能后,增强的代码保护可锁定对编程/调试接口的访问,阻止未经授权的读取、修改或擦除固件的尝试。为了实现安全固件更新,AVR DU系列采用了“边写边读”(RWW)闪存,结合安全引导加载程序,设计人员可以使用 USB接口修补漏洞、解决安全问题和添加新功能,而不会中断产品运行。AVR DU MCU的这一新增功能可实现不间断的现场更新,有助于延长产品的使用寿命。 

此外,AVR DU系列还具有USB时钟恢复功能,无需昂贵的外部晶振,有助于降低总体设计和物料清单 (BOM) 成本。独立于内核的外设 (CIP)  使设计人员能够将主要器件功能和系统管理任务集成到紧凑的单芯片解决方案中,从而节省电路板空间并减少设计工作量。 

从健身可穿戴设备和家用电器到农业和工业应用,各种嵌入式设计的开发人员都可以从在设计中纳入高效的AVR DU MCU中获益。有关AVR DU系列的线上演示,请访问try.microchip.com。

开发工具

MPLAB®代码配置器(MCC)包含一个软件协议栈,支持AVR DU MCU USB模块的硬件功能。完全集成到MPLAB开发工具系统中可直接用于生产的USB软件协议栈可通过MCC Melody轻松配置,从而简化开发流程,缩短产品上市时间。为了进一步实现快速原型设计和开发,还提供 Curiosity Nano 开发板 (EV59F82A)、MPLAB X集成开发环境 (IDE)和MPLAB XC8编译器,以支持AVR DU系列。

2.jpg

供货与定价

如需了解更多信息或购买,请联系Microchip销售代表、全球授权分销商或访问 Microchip采购和客户服务网站 www.microchipdirect.com

来源:Microchip微芯

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 14

4月9日~10日,沁恒携“自主核 中国芯”主题亮相杭州第四十八届中国电工仪器仪表产业发展技术研讨会及展会,依托多层次USB/蓝牙/以太网接口芯片、青稞RISC-V全栈MCU等关键技术自主可控的中国芯,向行业客户展示专业、可靠、丰富的解决方案,助力电力行业智能化,推动国产替代2.0。

热门展品回顾

蓝牙芯片

集成LCD驱动的低功耗蓝牙MCU—CH592

支持2Mbps的BLE5.4,支持20*4段式LCD驱动,支持USB主机及设备功能,提供PWM、SPI、I2C、4组串口、RTC、12位ADC、触摸按键等外设,采用低功耗射频工艺设计,定位于更低功耗、更低成本LCD显示的蓝牙应用。

1.jpg

以太网芯片

TCP/IP网络协议栈芯片—CH395

自带10M/100M以太网MAC+PHY,兼容IEEE802.3规范,内置UDP、TCP、DHCP、ARP等以太网协议栈固件,支持串口、并口和SPI连接,可为MCU、DSP等主控快速拓展以太网通讯功能。

2.jpg

百兆以太网PHY芯片—CH182

工业级10M/100M以太网PHY收发器,支持MII和RMII接口,支持Auto-MDIX。支持独立的I/O接口电源以适应不同电压的处理器或MCU。

USB2.0百兆网卡芯片—CH397

集成USB控制器及收发器PHY,集成符合IEEE802.3规范的10M/100M以太网收发器及控制器。具有高集成度、低功耗、低成本、易于使用等特点,支持各主流操作系统。

USB芯片

7端口工业级HUB控制器芯片—CH338/9

符合USB2.0协议规范,支持高性能MTT模式,部分应用场合可免晶振。部分型号支持上行口交换,集成USB PD功能,支持Type-C功率传输。工业级设计,外围精简。

另有7端口多功能HUB芯片CH339提供以太网、读卡器、PD、转JTAG/UART/SPI/I2C等功能。 

3.jpg

高速USB信号隔离延长芯片—CH318

通过电容耦合或网络变压器耦合实现对USB信号的隔离、实时中转和距离延长。芯片自带USB HUB功能,可用于USB接口高压隔离延长、隔离HUB、延长HUB等。

搭配7端口多功能HUB芯片CH339,可实现USB高速读卡器、USB转SPI、JTAG、I2C等多种接口的隔离。

4.jpg

MCU

工业级RISC-V内核低功耗MCU—CH32L103

采用青稞RISC-V内核,集成PDUSB接口,支持USB数据传输和Type-C功率传输。芯片内置低功耗定时器LPTIM,提供OPA/PGA运放、3组电压比较器、12位ADC、触摸按键、USART串口等丰富外设资源。

5.jpg

蓝牙+以太网 无线型MCU—CH32V208

采用青稞RISC-V内核,最高支持144MHz系统主频,片上集成BLE5.3、10Mbps以太网收发器及控制器、双路USB接口,支持USB主机及设备功能,集成CAN接口、双路OPA运放、4组USART、双路I2C、12位ADC、10路Touchkey等丰富外设资源。

6.jpg

千兆以太网+高速USB 互联型MCU—CH32V307

采用青稞RISC-V内核,支持硬件浮点运算,最高主频144MHz。集成千兆以太网MAC控制器并内置10M PHY;提供USB2.0高速接口,内置480Mbps收发器;集成八串口、四高级定时器、双CAN、DVP、FSMC等丰富外设资源。 

7.jpg

来源:沁恒微电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 50

3月28-29日,由AspenCore主办的2024国际集成电路展览会暨研讨会(IIC Shanghai)在上海张江科学会堂圆满举行。除了众多领域专家的精彩演讲外,2024年中国IC设计Fabless100排行榜也在同期举行的中国IC领袖峰会发布,雅特力AT32F405荣获“中国IC设计成就奖之年度最佳MCU”。

1.jpg

年度最佳MCU

作为中国IC设计行业的风向标,2024中国IC领袖峰会以“芯•未来”为主题,揭晓过去一年在10多个技术领域表现突出的国产IC设计公司。AT32F405凭借卓越的产品性能和市场表现在评选中脱颖而出,荣获年度最佳MCU奖。此次获奖也是行业专家及业界媒体对雅特力实力的充分肯定。

2.png

AT32F405集成独立的HS USB OTG(内建PHY)与FS USB OTG(设备模式均支持无晶振Xtal-less)接口,有效提升产品传输速率,在市场应用中有着突出表现,满足高阶电竞键鼠市场、工业自动化、USB周边、物联网(IoT)及消费性电子等各种需高运算、高速USB应用需求,综合性能超越业界同级HS USB OTG芯片。并提供最小封装体积4 x 4mm,满足各类小体积无线USB Dongle需求。基于雅特力AT32F405的电竞键鼠应用方案可达到8k Report Rate的响应速率,通过拓展外部RF可实现三模连接,即USB+BLE+2.4G模式,为游戏玩家提供了更加流畅、快捷的输入体验。

MCU与嵌入式系统应用论坛

IIC研讨会作为中国具影响力的系统设计盛会,汇集了来自世界各地的行业领袖、专家学者和企业代表,打造了一场覆盖电子产业的年度嘉年华。在同期MCU与嵌入式系统应用论坛上,雅特力产品市场总监林金海发表了“高效驱动,创芯突破,雅特力持续构建高效的开发生态平台”的主题演讲,与行业专家共同探讨产业发展,并分享雅特力在技术创新、产品研发以及战略布局等方面的最新规划与成果。

3.jpg

林金海介绍到,受益于AIoT、工业控制、汽车电子等产业的蓬勃发展,MCU的需求将持续增长,应用场景的多样化对于高性能、低功耗、高可靠性的MCU需求更为迫切。雅特力根据市场需求不断拓展MCU产品线,目前已拥有低功耗、超值型、主流型、高效能、无线型及车载型六大产品线,以更高效、更创新的产品满足客户日益增长的需求。并预计在下半年发布电机专用MCU产品,为电机应用市场带来高效能、高集成和高性价比的产品。

在物联网领域,MCU需要满足大量设备的低功耗、长寿命等要求。雅特力近期推出的AT32L021入门级低功耗MCU,最小封装面积仅3x3mm,深睡眠(Deepsleep)下电流约9uA,唤醒时间低于17us,待机模式(Standby)下电流仅为1.2uA,有效延长电池寿命。特别适用于便携式设备、无线传感器、OBD、BMS、RF工业控制、无线通信模块及物联网设备等各种靠电池供电和小空间开发设计需求的设备。

在汽车电子领域,新能源汽车的渗透率提高和智能驾驶级别的升级将进一步推动MCU市场的发展,MCU需要具备高度的可靠性和稳定性,以确保行车安全。雅特力推出了AT32A403A车载系列MCU,并即将发布AT32A423,皆通过AEC-Q100认证,符合车用电子高可靠性和稳定性要求,同时可广泛适用于车身控制、ADAS辅助驾驶、车载影音、BMS等新能源车用场景。

除了相对完善的产品线,高效的开发工具,RTOS、GUI、IDE等软件平台,及时的在地支持,极大地提升了产品的综合竞争力。雅特力持续投入研发,不断优化我们的产品与生态,努力构建一个高效、开放的MCU开发生态平台,共同推动行业发展,为用户创造更大的价值。从系统开发阶段至量产烧录,以及后续固件更新作业,为用户提供一系列丰富的软件工具。升级AT-Link Family编程调试工具,提高产品操作便利性和兼容性;与SEGGER达成了合作,J-Link仿真调试器与Flasher在线烧录器已全面支持AT32 MCU产品;还提供自有AT32 Workbench图形化代码生成工具,协助开发人员简单轻松配置MCU引脚和周边,且快速产生初始化代码,满足设计需求和降低整体开发时间,使应用开发流程更为高效、可靠,有效缩短产品上市周期。

IIC展览会现场,雅特力带来了高效能MCU产品及丰富的行业应用,包括电机控制、智能数显电脑机箱、电竞键盘、光伏逆变器、高速风筒、电动两轮车、毫米波雷达、汽车电子等应用方案。

1711956545457089.png

1711956551355105.png

1711956554333570.png

1711956560213861.png

1711956565936338.png

1711956568802212.png

来源:AT32 MCU 雅特力科技

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 34

意法半导体STM32 微控制器 (MCU)软件生态系统 STM32Cube新增一个USB Type-C® 连接器系统接口(UCSI)软件库,加快USB-C供电(PD)应用的开发。

1.jpg

X-CUBE-UCSI是一款UCSI 认证的总包整体方案,组件包含即用型硬件和使用STM32 MCU充当UCSI PD控制器实现标准化通信的固件示例。客户可以直接复制粘贴这些参考设计,并从优化的物料清单(BoM)成本中受益。

该软件允许 MCU 连接系统主处理器,使用 UCSI 协议与操作系统交换信息,同时控制 USB-C 连接和 PD 协议。主处理器可以是系统芯片(SoC)、应用处理器或 STM32MP微处理器,主处理器的职责就是UCSI 操作系统策略管理器(OPM)。STM32 MCU上的 PD 控制器充当 UCSI平台策略管理器 (PPM)。STM32 MCU中有很多产品都提供USB Type-C供电(UCPD)所需外设。STM32G0系列是售价较低的USB Type-C供电微控制器,是MPU理想的低引脚数量的配套芯片,专门负责处理PD供电功能。

该软件还允许在生产线以及应用生命周期中用主处理器在STM32 MCU上烧写固件。主处理器使用微软或 Linux社区提供的UCSI驱动程序以及相关命令与 PD 控制器交换数据。除了节省开发时间外,该软件还扩展了 USB-C 设备之间的互操作性,支持该技术提供的最新用例。

X-CUBE-UCSI STM32Cube 扩展软件可帮助开发人员开发USB PD 双角色电源 (DRP) 应用,支持交替模式命令。

在USB认证(TID 8088) Discovery 板 STM32MP135F-DK上,应用主处理器STM32MP135连接UCSI PD 控制器 STM32G071 MCU,让开发者能够先人一步,快速启动开发流程。这块板子还使用了意法半导体的 TCPP03-M20 USB Type-C 高压端口保护 IC。

现在有500多款标准 STM32 MCU在片上实现了 ST UCPD 供电控制外设。此外,STM32 MCU 丰富的模拟数字外设作为端口扩展器,为实现主处理器不支持的附加功能提供了更高的灵活性。

想了解基于意法半导体MCU的USB Type-C 供电解决方案,请访问www.st.com/en/embedded-software/x-cube-ucsi.html

欢迎访问 STM32 开发者专区,一站式购齐全部工具和资源:

关于意法半导体(ST

意法半导体拥有5万名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、数千名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,电源和能源管理更高效,物联网和互联技术应用更广泛。意法半导体承诺将于2027年实现碳中和。详情请浏览意法半导体公司网站:www.st.com

围观 66

一般来说,传统台式电脑的开机按键通常设置在主机箱上。但是,主机箱的摆放会因环境限制而放置在不同位置。在办公室的场景下,通常台式机箱会放在办公桌下。相信大多数办公的人们都有过这样的经历,我们常常会因视觉不便,不得不低头俯身摸索开机按键,进行电脑开机。

那么,是否有一种便捷、优雅的台式电脑开机方式呢?

1.jpg

显而易见,放在办公桌 C 位的就是键盘。如果键盘上设计一个按键就能完成台式电脑的快速开机,岂不美哉。

事实上,从技术角度分析这完全是一个可行方案。

众所周知,如今的台式电脑配备的键盘都是标准的USB 键盘。键盘之所以能实现输入功能,因为键盘通过 USB 接口和 CPU 连接,配合操作系统下的键盘驱动,就可以完成字符输入需求。如果电脑关机后,CPU 无法处理 USB 通讯,键盘必然就不能使用。因此在电脑关机后,必须有一个24小时待命的“管家”接管 USB 键盘,才能响应键盘操作,触发电脑开机动作。

提起电脑“管家”,首先就能想到笔记本电脑中管理电池充放电、键盘输入、散热等功能的 EC芯片。作为一颗MCU,EC芯片就可以做到在电脑关机后,依旧随时待命,完成一些看不到的工作。当时刻待命的EC 走进台式电脑,便激发了无限的可能。使用 USB 键盘完成台式电脑开机,也就变得顺理成章了。

初级版USB 键盘开机

2.png

如上图,当电脑关机后,EC仍旧工作。控制 MUX把键盘的USB信号切换到EC芯片的USB Host 接口上接管。当键盘按下特定的按键后,EC就可以触发CPU开机。同时控制MUX把键盘的USB信号切回给CPU,保证了电脑开机后,USB 键盘可以继续使用。

高级版 USB键盘一键开机

随着信息时代的发展,人们越来越重视信息安全,通常为了安全起见,会设置一个进入操作系统的开机密码。而且,一些保密性能需求更高的企业级用户,对于防止信息数据泄漏的安全防护,早已经从软件防护进入到硬件加密保护阶段。

这也带来了更高阶的加密开机需求。

3.png

如上所述,初阶的USB键盘的特定按键按下后,仅仅是触发了开机动作。

但是,如果将USB键盘的特定按键替换成指纹采集传感器,当人们的手指按下USB键盘上的“开机按键” 时,即可完成指纹信息的采集,从而很好的实现硬件加密保护的开机应用。

对此,芯海科技EC芯片CSC2E101可通过USB Host接口,读取 USB 键盘中指纹传感器的数据,同时利用内置的硬件加密模块对指纹数据加密保护。CSC2E101内置涵盖AES、RSA等众多功能的安全硬件加密引擎,符合多种行业加密协议,同时集成指纹传感器的控制和信息加密功能。

当人们通过摁压USB键盘的“开机按键”时,电脑操作系统下的指纹驱动即可通过CSC2E101的USB Slave接口,读取加密的指纹数据做对比。系统便可对指纹输入信息进行充分的安全防护,只有指纹信息对比成功,才会自动完成登录。在整个开机的过程中,用户全程无感,从而实现了让安全启动流程更完整、防护效果更完善的一键安全快速开机。

芯海科技CSC2E101成功进入Intel PCL(平台组件列表)序列,成为中国大陆首颗达到国际行业标准、获得国际认可的EC芯片。荣获“硬核中国芯·2022年度最佳MCU芯片”及“太平洋电脑网·2022年度智臻先锋技术奖”,同时助力公司荣膺中国计算机学会“2022中国工业计算机领域年度先锋企业”等系列荣誉。目前,CSC2E101已经在多个知名品牌的国产计算机和通用消费类笔记本终端产品中实现商用。预计今年,芯海科技仍将会持续推出更具创新优势的EC新品,更好的满足国内外计算机品牌客户的应用需求。

来源:芯海科技

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 185

AT32 USB主机协议库

这部分主要介绍AT32 USB主机库的结构和库的使用方法,AT32 USB支持全速和低速,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。

USB主机库包含以下几个模块 如图1:

  • 用户应用程序

此部分为开发者根据应用具体需求开发应用程序。

  • USB Core Driver和USB主机类

USB Core Driver:此部分实现USB设备标准协议栈,标准请求等接口。

USB主机类:此部分实现具体USB主机请求。

  • USB主机硬件底层接口

此部分实现硬件寄存器抽象接口

  • USB/OTG外设

1.png

图1. USB主机库结构

AT32 USB库文件

如下是AT32 USB应用工程结构图:

2.png

图2. AT32工程结构

Core Driver库路径:OTGFS-->middlewares\usb_drivers

Host Class库路径:middlewares\usbh_class

如下是USB主机库文件列表:

3.png

表1. USB主机库文件列表

4.png

表2. USB主机类文件列表

USB主机库文件说明

USB库实现USB主机枚举标准请求,同时实现USB规格里面的4种传输类型(control,interrupt,bulk,isochronous)的函数接口。

5.png

图3 USB主机库文件结构

USB主机文件函数接口

usbh_int.c函数接口

usbh_int.c主要处理底层中断,包括设备连接,设备断开等。

6.png

表3 usbh_int函数接口

usbh_core.c函数接口

usbh_core.c此文件封装不同的usb主机函数接口用于不同的地方调用,包括一些接收,发送函数等。

7.png

表4 usbh_core函数接口

usbh_ctrl.c函数接口

usbh_ctrl.c此文件处理USB主机枚举过程中的一些标准请求。

8.png

表5 usbh_ctrl函数接口

支持的标准设备请求如下表:

9.png

表6 标准设备请求

usbh_xx_class.c函数接口

usbh_xx_class.c此文件为具体主机类型的数据处理,通过结构体函数来实现不同主机类型数据的处理。开发者根据不同的主机类型,来实现下面函数结构体中的函数,达到不同应用结果。

函数结构体如下:

10.png

表7 主机class函数结构体

11.png

表8 主机class函数接口

usbh_user.c函数接口

usbh_user.c此文件主要为一些给用户处理事件的函数如复位,断开连接等。

12.png

表9 用户事件函数结构体

13.png

表10 用户函数接口函数

其它参数函数

的参数结构体如下,USB主机库中参数传递使用结构体usbh_core_type,如下图:

14.png

图4 全局结构体

USB主机的状态机如下图:

15.png

图5 USB主机状态机

USB返回值,USB函数接口使用如下函数返回值。

16.png

图6 函数返回值

通道FIFO分配

USB主机要正常收发数据,在初始化时需要为通道分配FIFO,分配给所有通道FIFO大小的和不能超过系统分配给USB缓冲区的最大长度,具体USB的缓冲区大小参考RM上的描述。

开发者可以参考例程usb_conf.h为通道自定义分配FIFO。
OTGFS主机通道FIFO分配

主机模式下,所有通道共享一个接收FIFO,通道发送FIFO分为非周期性发送FIFO和周期性发送FIFO。注意usb_conf.h中对端点分配的FIFO大小单位为word(Byte)。

以hid_demo例程为例:

17.png

USB主机初始化

在使用USB主机功能时,需要对USB的寄存器做一些基本的初始化,通过调用USB主机的初始化函数完成这部分的操作。
OTGFS外设初始化

OTGFS初始化函数usbd_init包含5个参数:

18.png

例程主机hid_demo的初始化如下:

19.png

USB主机中断处理

USB主机中断入口函数usbh_irq_handler处理所有USB主机中断,包括连接状态,通道收发数据,SOF,唤醒等中断,下面介绍一些典型的中断处理。

20.png

图7 USB主机中断处理函数

通道中断处理

当USB主机与设备进行通信时,通道的收发状态都在通道中断中处理,通道的方向分为IN和OUT通过通道寄存器中的方向为进行判断。

中断处理函数:usbh_hch_handler

代码如下:

21.png

Wakeup 中断处理

当USB主机在挂起状态时,检测到设备触发的远程唤醒信号,将产生此中断。此中断会将当前主机状态改为WAKEUP状态:

中断处理函数:usbh_wakeup_handler

代码如下:

22.png

接收FIFO非空中断

此中断表示当前接收FIFO有数据,应用程序通过此中断读出接收到的数据,并存放到对应通道的FIFO当中,当数据读取完成之后,会产生对应的通道的中断。

中断处理函数:usbh_rx_qlvl_handler

代码如下:

23.png

主机端口中断处理

当USB主机断开发生状态改变时,会产生端口中断,应用程序通过此中断判断连接设备的速度等。

中断处理函数:usbh_port_handler

24.png

设备断开连接中断处理

当连接的设备断开是,会产生断开连接中断。

中断处理函数:usbh_disconnect_handler

代码:

25.png

USB主机枚举处理

USB主机状态机在usbh_loop_handler函数中处理,对应的主机状态机uhost->global_state,如下图是设备连接到主机的状态处理流程:

26.png

图8 设备连接状态机流程

  • USBH_IDLE:当USB启动或者设备断开连接之后在此状态

  • USBH_PORT_EN:USB主机端口使能之后在此状态

  • USBH_ATTACHED:USB设备连接稳定之后

  • USBH_ENUMERATION:USB设备标准的枚举流程

  • USBH_USER_HANDLER:枚举完成之后,调用主机类的初始化函数

  • USBH_CLASS_REQUEST:主机类初始化完成之后,进行主机类请求

  • USBH_CLASS:所有枚举完成,进行正常的数据处理。

USB主机枚举流程

当设备接到主机之后,通过控制端点(端点0)进行枚举动作,USB主机的枚举状态如下:

27.png

如下是主机枚举的状态机流程:

28.png

图9 USB主机枚举流程

  • ENUM_GET_MIN_DESC:获取8字节设备描述

  • ENUM_GET_FULL_DESC:获取18字节设备描述

  • ENUM_SET_ADDR:设置设备地址

  • ENUM_GET_CFG:获取9字节配置描述

  • ENUM_GET_FULL_CFG:获取完整的配置描述

  • ENUM_GET_MFC_STRING:获取设备厂商信息

  • ENUM_GET_PRODUCT_STRING:获取设备产品信息

  • ENUM_GET_SERIALNUM_STRING:获取设备序列号信息

  • ENUM_SET_CONFIG:SET CONFIGUREENUM_COMPLETE:枚举完成

USB控制传输过程包含SETUP-DATA-STATUS三个阶段,如下是一个主机获取设备信息的传输过程GET_DESCRIPTOR:

29.png

图10 Get Descriptor

如下是USB主机库一个SETUP-DATA-STATUS函数调用流程:

30.png

图11 USB主机SETUP函数调用

usbh_ctrl_transfer_loop函数中断对控制请求的各个状态阶段进行处理:

控制请求状态机:

31.png


32.png

图12 控制请求处理流程

USB主机类初始化

在USB标准枚举完成之后,会调用USB主机类的初始化,在初始化函数中解析当前枚举的设备是否支持,调用函数uhost->class_handler->init_handler(uhost)。

初始化代码例:

33.png

USB主机类请求

USB主机类初始化之后,可以发送主机类控制请求,根据不同的设备类,需要实现不同的设备类请求。调用函数uhost->class_handler->request_handler((void*)uhost);

主机类请求例:

34.png

USB主机数据处理

所有枚举完成之后,将进行主机数据处理

主机数据处理例:

35.png

USB主机类型例程

本章将说明使用AT32 USB主机库实现不同的主机类型的例程。目前实现的主机类例程如下:

  • hid(mouse,keyboard)

  • mass storage(msc_only_fat32)

  • two_otg_host_demo(仅AT32F435/437支持)

HID例程

HID类支持鼠标和键盘设备,开发者可修改此例程用以实现支持其它HID类设备。

HID类:

36.png

HID类例程初始化

当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler, 调用此函数将解析接到主机上的设备类型,是鼠标还是键盘或者其它设备。通

过设备的配置描述信息进行如下流程解析:

  • 查找HID接口

  • 判断接口是鼠标还是键盘

  • 查找对应接口的端点号

  • 初始化对应通道

代码如下:

37.png

HID类请求

HID类请求实现一些HID设备的标准请求,调用函数uhost_request_handler

  • SET_IDLE

  • SET_PROTOCOL

  • GET_REPORT

代码如下:

38.png

HID类数据处理

HID枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

  • 通过usbh_interrupt_recv函数给设备发送IN请求

  • 通过usbh_get_urb_status(puhost, phid->chin); 获取IN请求的状态

  • 通过phid->in_poll判断多长时间发送一次IN请求

  • 通过phid->protocol判断是鼠标还是键盘

代码如下:

39.png

MSC例程

msc_only_fat32实现一个简单的mass storage主机类,仅支持FAT32格式。

MSC类:

40.png

MSC 类初始化当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler,调用此函数将解析接到主机上的设备类型,判断是否是MSC类型。

通过设备的配置描述信息进行如下流程解析:

  • 查找MSC接口

  • 查找对应接口的端点号

  • 初始化对应通道

  • 初始化bulk-only和SCSI状态机

代码如下:

41.png

MSC类请求

MSC类请求实现一些MSC设备的标准请求,调用函数uhost_request_handler

  • GET_MAX_LUN

代码如下:

42.png

MSC类数据处理

HID枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

实现如下命令:

  • INQUIRY

  • TEST_UNIT_READY

  • READ_CAPACITY10

  • REQUEST_SENSE

代码如下:

43.png

MSC读写数据

MSC读写数据在通过FATFS接口进行实现,在usbh_msc_diskio.c中实现读写函数。

读函数:

44.png

写函数:

45.png

CDC例程

cdc实现一个简单的虚拟串口类。

CDC类:

46.png

CDC类例程初始化

当USB设备标准枚举完成之后,会进行初始化,调用uhost_init_handler, 调用此函数将解析接到主机上的设备类型。

通过设备的配置描述信息进行如下流程解析:

  • 查找CDC接口

  • 判断接口是否为虚拟串口

  • 查找对应接口的端点号

  • 初始化对应通道

代码如下:

47.png

CDC类请求

CDC类请求实现一些CDC设备的标准请求,调用函数uhost_request_handler

  • GET_LINECODING

代码如下:

48.png

CDC类数据处理

CDC枚举设置完成之后,USB主机可以请求设备数据,通过调用uhost_process_handler来处理。

  • 通过set_linecoding和get_linecoding配置linecoding

  • 通过cdc_process_reception(puhost)函数给设备发送IN请求

  • 通过cdc_process_transmission(puhost)函数发送数据给设备

代码如下:

49.png

two_otg_host_demo例程

AT32F435/437存在两个OTGFS,此例程说明同时使用两个OTGFS实现两个host功能。

  • 实现功能:

  • OTGFS1实现MSC主机(参考MSC例程)

  • OTGFS2实现HID主机(参考HID例程)

配置与实现

在usb_conf.h中配置OTGFS1和OTGFS2:

50.png

在main中初始化:

51.png

来源:AT32 MCU 雅特力科技

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 205

传统设备数据传送依靠有线USB将信息传输至主机,经常面临多条线材摆放凌乱、布线空间及操控范围受限等问题。基于科技革新速度不断加快、技术推陈出新,IoT概念普及化,多数设备已由有线逐渐转变为无线。

雅特力超值型AT32F415与无线型AT32WB415系列采用强大的32-bit ARM® Cortex®-M4内核,在SoC单芯片系统上,整合多种通讯接口,如USB OTG、UART、SPI、I2C、SDIO等,搭配RF射频进行信息传输,实现USB HID无线传输功能,无须额外安装驱动程序,即可帮助用户快速完成信息传送和保持文件完整性。本文将以客户实际应用案例「血压计导入AT32F415/AT32WB415系列MCU连接USB HID应用」为例,介绍AT32 MCU在USB HID上的应用。

AT32 MCU提供一个高精度、高性价比的血压计应用解决方案,当血压计测量脉搏率、收缩压和舒张压时,压力传感器精确检测到血压信号强度,如下图所示。

血压计量测信息传送情境对照图:

“导入AT32
导入AT32 MCU搭配RF射频实现无线传输

AT32F415 / AT32WB415系列连接USB HID应用方案特点

  • 采用ARM® Cortex®-M4内核,主频高达150MHz,内建大容量256KB Flash和32KB SRAM,并提供软件开发工具,以便进行产品系统校正、更新和储存用户信息。

  • 支持UART、SPI、 I2C 、SDIO、USB OTG、CAN多种通讯界面,同时搭配RF无线射频组件,支持蓝牙无线传输功能(适用AT32WB415系列方案二),实现智能应用与产品功能价值。

AT32F415 / AT32WB415系列导入血压计产品附加优势

  • 支持12位高精度ADC及CMP,从压力传感器采集信号中分辨袖带和脉搏波信号,精准提取脉搏波信号,经滤波电路后,透过A/D转换电路,输出至CPU,无须添加额外组件,大幅降低开发成本和缩短量产时程。

  • 支持高速GPIO/SPI驱阿动LCD显示屏,流畅显示血压量测读值状态。

  • 支持蓝牙2.4GHz频段,Rx灵敏度可达到-97dBm,Tx值介于-20dBm~+4dBm之间,有效传输范围超过30m,数据传输最快可达到2Mbps,实现无线传输低延迟(适用AT32WB415系列方案二)。

“AT32

更多参考文件信息,详见雅特力官网:
https://www.arterychip.com/en/product/AT32WB415.jsp

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 35

问题描述

客户反馈,使用STM32F446的高速USB外设,即USB_OTG_HS外设,且使用内置全速PHY。客户的产品USB用做device,自定义HID类,当连接带UOS操作系统的HOST时,会发现当前数据并没有成功发送,但是会发送上一次的数据,即发送数据出现”迟滞”现象。但在Windows下却没有出现此类问题。另外,客户同时还使用了STM32F446上的USB_OTG_FS外设,且此外设做同样的事一切正常,目前此问题只出现在USB_OTG_HS外设上。

问题查找

刚开始猜测是长度问题,即发送最大包长需要再发送一次空包。但客户反馈他们的发送长度为62个字节。于是去客户现场使用USB协议分析仪采数分析,发现一切通信正常。

通过查看客户演示重现问题的过程,发现在正常时是一切OK的,只在进行USB拔插时才发送问题。应用程序不断发送数据的过程中拔掉USB线,然后再次插上,在此过程中应用程序一直尝试发送数据。当USB线重新连接上且重新枚举成功后,“迟滞”现象则重现了,即每次应用程序调用发送接口实现发送的是上一次尝试发送的内容。

调试客户的程序,发现当USB线拔掉后,应用程序还会往USB IP对应的发送FIFO内写入数据,这其实是不对的。按理USB线拔掉后USB的状态应该恢复到默认状态,

即pdev->dev_state=USBD_STATE_DEFAULT. 但实际上,通过调试发现此状态在USB线拔掉后是suspend状态。

那么为什么会是这样的呢?

于是立即想到Vbus sensing功能。马上与客户硬件工程师核对,原来客户产品的USB_OTG_HS的Vbus_sensing脚是悬空的,并没有连接Vbus,但是客户的USB_OTG_FS外设却又是连接了。于是客户的产品两个USB口,同样的工作,一个USB口 正常,另一个USB口却会出现问题。

问题分析

差异找到了,接下来就是分析由此如何造成问题的。

由于USB_OTG_HS并没有真正实现Vbus sensing功能(因为没有硬件连接),于是当USB线断开时,应用程序并不能准确地检测到断开事件(Disconnected),只会出现suspend,应用程序是无法直接的区分真正的suspend和USB线断开连接的。当应用程序有数据需要通过USB口发送时,如果当前是suspend状态,那么它会首先唤醒USB总线然后再发送数据:

“USB发送数据时出现迟滞现象"
Figure1

而这样发送远程唤醒信号时,device本身会产生一个resume中断,于是在resume中断回调函数内:

“USB发送数据时出现迟滞现象"
Figure 2

如上所示,程序会将dev_state错误地恢复到上一次状态,即正常状态USBD_STATE_CONFIGURED, 如此一来,程序就错误地往USB IP的内的发送FIFO写入数据了,即使此时由于USB线已经断开而导致无法真正发送成功,但USB IP的内置发送FIFO此时是有了数据的。

通过调试,查看OTG_DTXFSTS1寄存器相应端点1对应的发送FIFO的剩余空间可知,这个时候的发送FIFO的确实有数据的。接下来是USB线插上重新枚举,那么为什么USB重新枚举后还会再现问题呢?通过设置断点发现,在USB成功重新枚举过后,通过OTG_DTXFSTS1寄存器指示,发送FIFO内容并没有清空,于是在接下来发送数据时,永远都是实际上发送的是上一次写入到FIFO中的数据。

问题解决

▼于是解决方法就很容易找到了▼

在USB重新枚举过后在合适的地方将端点1对应的发送FIFO清空一下即可。

“USB发送数据时出现迟滞现象"
Figure 3

问题总结

在客户的这个案子中,由于USB_OTG_FS连接了VBUS SENSING脚,当USB线拔掉后,会产生正确的disconnect中断,USB device的状态也会正确地切换到default状态,从而过滤掉应用程序想要发送的数据,因此并不会出现类似问题,因此,在客户的产品设计中,建议硬件千万不要忘了连接vbus引脚,即使在想省IO引脚的情况下,这样容易造成对软件的开发诸多不便.

在USB的状态处于非configured状态时,最好不要往发送FIFO写入数据,应用程序应该想办法将这些数据过滤掉。

来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 46

引言

本文介绍了如何使用MCUXpresso Config Tools来快速生成一个可用的USB composite device的demo,以便节省时间直接进行USB应用层的开发,而不必关注USB协议栈及底层的配置。

文详细介绍了如何利用Config Tools生成USB Composite Device工程的全部步骤,并且还会介绍,如何将这些代码porting到IAR等不同IDE中进行开发。

组合设备介绍

USB的composite类是指在一个USB设备中,实现多个不同功能的特殊USB类,如一个设备实现鼠标加键盘或者U盘加键盘的功能。

实际上,USB composite类几乎可以将任意的USB功能进行组合,并且组合的数量也不局限于两个,只要端点资源够多,可以组合三个或多个功能于一个设备上。

在USB中,还存在有一种compound device的概念,它与composite device都可以译作复合设备或组合设备,但是它们是两个完全不同的概念。

USB compound device(USB复合设备)中内嵌Hub和多个功能,每个功能都是独立的USB设备,有独立的VID与PID,从实现层面上讲就是一个物理设备实现了一个Hub和多个物理设备。

USB composite device(USB组合设备)中只有一套VID与PID,通过不同的接口将这同一个设备定义为不同的功能的组合。而不同功能的实现依赖于不同的类接口的合并。

环境搭建

本文使用i.MX RT1060-EVK板作为演示对象,所使用的MCUXpresso IDE(以下简称MCUX)版本为v11.4.0,其中内置了v10.0.0版本的Config Tools,使用内置的Config Tools所生成的工程,可以直接在MCUXpresso IDE内编译下载,下一章将会介绍如何将生成的代码集成到IAR中进行编译下载运行。

在使用MCUXpresso生成工程时需要加载SDK到MCUXpresso环境中,本文使用的SDK版本为2.10.0。

以下例子是生成了一个包含CDC VCOM、MSC、HID Mouse三个类功能的组合设备。

配置工程

首先需要创建工程。

进入MCUXpresso IDE界面后,点击New project进入创建工程界面,选择evkmimxrt1060板,点击next,进入config界面,点击middleware选项卡,选中USB Device和USB PHY选项, USB Common Header会被自动勾选,最后点击Finish完成工程创建。

具体步骤如下图:

“手把手带您使用MCUXpresso

完成工程的创建后,选择ConfigTools选项卡下的Peripherals,进入工程配置界面,在左侧Components窗口下,点击Middleware右侧的加号,弹出选择界面,在选择界面中选中USB,点击OK。操作步骤如下图所示。

“手把手带您使用MCUXpresso

此时,我们已经将USB中间件添加进入配置,刚添加进入后会发现右下角的Problems界面内会报两条错误,为了解决其中的时钟错误,首先还是在ConfigTools选项卡内,选择Clocks,进入Clock配置界面,选择Clock Outputs界面中的USBPHY1 PLLclock,然后在右侧的Details界面内Enable USBPHY1 clock output,具体步骤如下图所示。

“手把手带您使用MCUXpresso

返回Peripherals界面,时钟的错误已经消除,下面开始添加USB的功能接口,在刚才添加的USB1的主界面内根据自己的需求修改device的VID及PID。

点击Supported interfaces选项旁边的加号,添加一个interface,会生成一个interface0,默认新添加的interface的类都是DFU,在右侧Class下拉菜单中选择想要实现的组合设备中的第一个类。此处需要注意的是,CDC VCOM的实现需要用到两个子类interface,分别是用于管理和控制的通信类接口CIC与用于传输数据的数据接口类DIC,在Config Tools中需要分别添加两个interface组成来一个CDC VCOM的功能。

添加两个interfaces,分别设置类为CIC VCOM及DIC VCOM。Config Tools添加interfaces时,是按照顺序使用端点号及interface号,这里我们不修改任何参数,直接使用默认的数据,如果应用层有特殊需要的,也可以修改端点的相关参数来满足需求。

第一个CDC VCOM类的功能添加完成后,开始添加第二个MSC类的interface,仍然是点击加号,修改Class为MSC,其余的配置都保持默认。

最后进行HID类的配置,仍然是点击加号,添加新的interface,修改Class为HID,在右侧的Present下拉框内选择Mouse,需要使用自定义HID报告的应用可以选择None,并且自己进行Endpoints和report的配置。

所有配置过程如下图所示:

“手把手带您使用MCUXpresso

在所有类的interfaces添加完成后,点击上方菜单中的UpdateCode,在弹出的对话框中,可以看到本次配置对哪些文件产生了影响,此处需要注意的是,需要前两个board文件夹下的4个文件的默认勾选去除掉,然后点击OK,完成代码的生成。

具体步骤如下图所示。

“手把手带您使用MCUXpresso

在生成完成代码后,MCUX会自动跳转回工程开发界面,打开source目录下的与工程同名的.c文件,在头文件处添加’ #include "usb_device_composite.h"’,并且将主循环里的内容替换为USB_DeviceTasks();。

修改的步骤如下图所示。

“手把手带您使用MCUXpresso

完成上述修改后即可编译下载到RT1060-EVK板上进行测试。下载完成后按下EVK板的reset键,连接USB1口到PC的USB口,打开设备管理器可以看到生成了一个新的composite device,并且同时,还可以在各个设备类下面查找到实现的相应的设备,并且这些设备的PID\VID相同,都是在配置界面内所配置的PID\VID,如下图所示。

“手把手带您使用MCUXpresso

移植到IAR环境

先要准备一个IAR的工程。

在SDK生成器中下载一个带有完整的USB stack的SDK包,然后在同样的页面内下载一个Standalone的示例工程,如下图所示。

“手把手带您使用MCUXpresso

根据所要生成的Composite Device所含的类的种类,选择SDK中的某单一类的工程,例如,本应用笔记中的Composite Device包含了三个类,在生成单独的工程时,选择dev_hid_mouse_bm的工程。

接下来需要添加和删除一些文件

上一节中生成的工程中,只包含了HID类的相关文件,所以我们需要朝工程内添加两部分的文件,以实现composite device的功能。

第一部分的文件是USB stack相关的文件,这也是为什么我们需要一个完整的SDK包的原因,从SDK包的middleware\usb\output\source\device\class\目录中将MSC类及CDC类相关的文件添加到工程中。如下图所示。

“手把手带您使用MCUXpresso

第二部分文件是由Config Tools生成的文件,这部分文件在MCUX的工程目录下能够找到,将Config Tools生成的文件复制到IAR工程目录下,并且如下图所示将它们添加进工程。

“手把手带您使用MCUXpresso

在完成文件的添加后还需要把原本source目录下的文件从工程中去除,以免除本来工程里的文件与工具所生成的文件产生的冲突。由于使用的基工程是HID Mouse的demo工程,还需要将usb目录下的dcd目录下的文件从工程中去除,否则工程会报错。

需要注意的是,在把所有的文件添加进工程以后,需要在配置里将保存相应头文件的目录添加到include directories中。

完成上述工作后,即可编译下载,运行效果与前一章的效果一致。

来源:恩智浦MCU加油站
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 667

页面

订阅 RSS - USB