CKS32F4xx系列MCU的OTG_FS功能详解

描述

USB是英文Universal Serial BUS(通用串行总线)的缩写,而其中文简称为“通用串行总线“,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB发展到现在已经有USB1.0/1.1/2.0/3.0等多个版本。目前用的最多的就是USB1.1和USB2.0,USB3.0目前已经开始普及。

CKS32F4xx系列自带的USB符合USB2.0规范。标准USB共四根线组成,除VCC/GND外,另外为D+和D-,这两根数据线采用的是差分电压的方式进行数据传输的。在USB主机上,D-和D+都是接了15K的电阻到地的,所以在没有设备接入的时候,D+、D-均是低电平。而在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,而如果是低速设备,则会在D-上接一个1.5K的电阻到VCC。这样当设备接入主机的时候,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。 CKS32F4xx系列芯片自带有USB OTG FS(全速)和USB OTG HS(高速),其中HS需要外扩高速PHY芯片实现,我们本章节对USB OTG FS进行介绍。

USB OTG FS主要特性

 

CKS32F4xx系列的USB OTG FS是一款双角色设备(DRD)控制器,同时支持从机功能和主机功能,完全符合USB2.0规范的On-The-Go补充标准。此外,该控制器也可配置为“仅主机”模式或“仅从机”模式,完全符合USB2.0规范。在主机模式下,OTGFS支持全速(FS,12Mb/s)和低速(LS,1.5Mb/s)收发器,而从机模式下则仅支持全速(FS,12Mb/s)收发器。OTG FS同时支持HNP和SRP。CKS32F4xx系列的USB OTG FS主要特性可分为三类:通用特性、主机模式特性和从机模式特性。

- 通用特性 -

1、经USB-IF认证,符合通用串行总线规范第2.0版

2、集成全速PHY,且完全支持定义在标准规范OTG补充第1.3版中的OTG协议:

支持A-B器件识别(ID线)

支持主机协商协议(HNP)和会话请求协议(SRP)

允许主机关闭VBUS以在OTG应用中节省电池电量

支持通过内部比较器对VBUS电平采取监控

支持主机到从机的角色动态切换

3、可通过软件配置为以下角色:

具有SRP功能的USB FS从机(B器件)

具有SRP功能的USB FS/LS主机(A器件)

USB On-The-Go全速双角色设备

4、支持FS SOF和LS Keep-alive令牌

SOF脉冲可通过PAD输出

SOF脉冲从内部连接到定时器2(TIM2)

可配置的帧周期

可配置的帧结束中断

5、具有省电功能,例如在USB挂起期间停止系统、关闭数字模块时钟、对PHY和DFIFO电源加以管理

6、具有采用高级FIFO控制的1.25KB专用RAM

可将RAM空间划分为不同FIFO,以便灵活有效地使用RAM

每个FIFO可存储多个数据包

动态分配存储区

FIFO大小可配置为非2的幂次方值,以便连续使用存储单元

7、一帧之内可以无需要应用程序干预,以达到最大USB带宽

- 主机(Host)模式特性 -

1、通过外部电荷泵生成VBUS电压

2、多达8个主机通道(管道):每个通道都可以动态实现重新配置,可支持任何类型的USB传输

3、内置硬件调度器:

在周期性硬件队列中存储多达8个中断加同步传输请求

在非周期性硬件队列中存储多达8个控制加批量传输请求

4、管理一个共享RX FIFO、一个周期性TX FIFO和一个非周期性TX FIFO,以有效使用USB数据RAM

- 从机(Slave/Device)模式特性 -

1、1个双向控制端点0

2、3个IN端点(EP),可配置为支持批量传输、中断传输或同步传输

3、3个OUT端点(EP),可配置为支持批量传输、中断传输或同步传输

4、管理一个共享Rx FIFO和一个Tx-OUT FIFO,以高效使用USB数据RAM

5、管理多达4个专用Tx-IN FIFO(分别用于每个使能的IN EP),降低应用程序负荷支持软断开功能

mcu

图1 USB OTG FS框图

对于USB OTG FS功能模块,CKS32F4xx系列通过AHB总线访问(AHB频率必须大于14.2Mhz),其中48Mhz的USB时钟,是来自时钟树图里面的PLL48CK(和SDIO共用)。不过,我们提供了一套完整的 USB OTG驱动库(包括主机和设备),通过这个库可以很方便的实现所要的功能。

 

软件设计

mcu

图2 USB配置代码

配置时,我们重点要配置的就是USB_APP文件夹下面的代码。 usb_bsp.c提供了几个USB库需要用到的底层初始化函数,包括:IO设置、中断设置、VBUS配置以及延时函数等。USB Device(Slave)和USB Host共用这个.c文件。 usbd_usr.c提供用户应用层接口函数,即USB设备类的一些回调函数,当USB状态机处理完不同事务的时候,会调用这些回调函数,我们通过这些回调函数,就可以知道USB当前状态,比如:是否枚举成功、是否连接、是否断开等,根据这些状态,用户应用程序可以执行不同操作,完成特定功能。 要使用USB OTG FS,必须在编译器的全局宏定义里面,定义:USE_USB_OTG_FS 具体的USB库调用函数篇幅较大,不再详细描述,以下为main函数代码:

int main(void)
{
u32t;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_GPIO_Init();
USBH_Init(&USB_OTG_Core_dev,USB_OTG_FS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks);
while(1)
{
USBH_Process(&USB_OTG_Core_dev, &USB_Host);
if(bDeviceState==1)//Á¬½Ó½¨Á¢ÁË
{
if(USBH_Check_HIDCommDead(&USB_OTG_Core_dev,&HID_Machine))
{     
USBH_HID_Reconnect();
}
}else
{
if(USBH_Check_EnumeDead(&USB_Host))
{     
USBH_HID_Reconnect();
}
}
t++;
if(t==200000)
{
LED1=!LED1;
t=0;
}
}
}

 

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分