社区导航

 

搜索
查看: 691|回复: 7

[分享] XMC4800 评测(三)--USB复用设备CDC+HID

[复制链接]

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-12-31 23:05 | 显示全部楼层 |阅读模式
本帖最后由 RCSN 于 2019-1-6 14:29 编辑

楼主看到板载的仿真器有虚拟串口,以为是有连接到XMC4800的串口上,但是看了原理图以及手册,是没有的。是接到USIC的一个外设上,看起来是个串口,但是得配置一些相关模式,比如配置启动模式(ASC BSL mode),这里楼主并没有找到官方的相关代码参考,只是用户手册里面有做相关说明,由此不太明白这个模式,在这里为了保险也不做这个。转变思路到USB设备中来,利用官方参考代码,整合描述为复合设备,也就是HID+CDC设备,来作为最初的上下位机交互 TIM截图20181231230150.png

   TIM截图20181231230353.png



此帖出自工控电子论坛


回复

使用道具 举报

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-12-31 23:37 | 显示全部楼层
官方的固件库可以在英飞凌官方的相关链接下载,链接:https://www.infineon.com/cms/cn/ ... ed-on-arm-cortex-m/ 提供了DAVE\IAR\MDK等平台的例子,例子比较丰富,各个外设可以边对着用户手册和代码进行学习,英飞凌的外设实在很丰富,短时间熟悉也不太可能。最好的方式就是利用demo,理解外设整合跑通。
   TIM截图20181231231245.png
  官方使用的第三方USB库是LUFA库,这个库之前用在ATMEL比较多,英飞凌也做了相关的适配文件以便方便平台移植。相比winusb,rl-usb,lufa库方便快速移植上手、可维护性、代码编译占用空间小等。为此官方也做了相关的解释如下:
   20181231232950.png
   那么接下来就是移植工作了,这里比较方便,官方也为此做了一些适配以及移植文件,我们直接添加到工程即可。比如HID类设备驱动、CDC类,还有MSC类设备,这里楼主尚未整合。添加的文件如下截图。对于外设库,楼主比较懒,直接用MDK的魔术棒点击生生成。
   TIM截图20181231233646.png



回复

使用道具 举报

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-1-1 00:15 | 显示全部楼层
由于USB启动需要48M时钟支持,但是启动文件的弱定义时钟初始化函数并没有对USB时钟进行初始化,所以第一步我们得自己定义一个时钟初始化,进行相关分频提供一个USB时钟。
我们首先来看下官方提供的时钟树,看起来是比较简约
TIM截图20181231235622.png
   可以看出来时钟控制单元(CCU)由两个主要子块组成:时钟发生单元(CGU)、时钟选择单元(CSU)。CGU并行向CSU提供三个时钟:USB PLL时钟fPLLUSB,系统PLL输出时钟fPLL、来自备份时钟源的内部生成时钟fOFI。还有RTC外部晶体模块等。
  具体的一些系统时钟设置可以参考官方手册,这里具体说明外部晶振12M(板载晶振)下的PLL时钟以及USB时钟的配置。在正常模式下,PLL时钟计算公式如下:
   TIM截图20190101001202.png
  在这里官方也提供了一些PLL相关配置例子。
   TIM截图20190101001306.png
  在这里我们配置为120M.如下:
TIM截图20190101001348.png
  USB时钟使用PLLUSB下的石基
TIM截图20181231235253.png
   TIM截图20190101001539.png


回复

使用道具 举报

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-1-1 00:34 | 显示全部楼层
楼主也是第一次玩USB设备类,对于相关的USB协议实在复杂也没仔细了解,短时间也无法加深了解,我也是在仿真的过程中,逐渐大概了解建立过程。一开始楼主老是只有一个设备出现,另外一个设备并没有出现,后来找找github的相关代码,发现还是设备标识符等配置得不对。
总的流程大概就是,初始化USB、USB中断、建立端点事件处理程序、设备事件处理程序、然后进行USB连接。
TIM截图20190101002439.png
    然后连接过程中,主机会不断下发处理设备请求,比如当设备在控制端点上收到Get Descriptor请求时,就传回描述符细节并将相应的描述符发送回USB主机。若主机识别到相对应的设备类,则一次建立成功。如果设备描述符等不正确,会使主机认为是非法USB设备。
   这里还定义了配置描述符结构,定义了HID类和CDC类, 该描述符位于FLASH存储器中,描述了该用法包括有关任何设备接口的信息和端点。 在选择时,枚举过程中USB主机读取描述符配置,以便主机可以与USB设备通信。
   具体可在desriptors文件查看。
   根据根据端点事件处理我们可以回调连接和断开等事件,在这里的接口我们可以直接写入我们的应用逻辑。
TIM截图20190101003228.png
  端点事件处理一般是收发信息事件,这里也有相对应的读写回调。比如HID的读写回调如下
TIM截图20190101003346.png
  CDC的读写回调。
TIM截图20190101003355.png




回复

使用道具 举报

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-1-1 00:38 | 显示全部楼层
在循环里面还需要添加CDC设备任务,HID设备任务,USB任务,以便一直在轮询工作中。这个在RTOS设定比较方便。楼主目前只是放在while里面轮询。后续会移植freertos进行分配任务。

TIM截图20190101003657.png

    完成了相关配置之后,下载代码运行。会出现两个设备类,分别是CDC和HID。
    TIM图片20190101003806.png


回复

使用道具 举报

900

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-1-1 00:48 | 显示全部楼层
好困。不小心就过了明年了。工程在附件,欢迎坛友多交流。新年快乐


USBToHID&CDC.zip

7.12 MB, 阅读权限: 10, 下载次数: 1



回复

使用道具 举报

1645

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2019-1-1 09:28 来自手机 | 显示全部楼层
我嘞去,RC好勤奋。

点评

对,感动哭  详情 回复 发表于 2019-1-1 09:59


回复

使用道具 举报

8936

TA的帖子

129

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2019-1-1 09:59 来自手机 | 显示全部楼层
freebsder 发表于 2019-1-1 09:28
我嘞去,RC好勤奋。

对,感动哭


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-4-21 14:08 , Processed in 0.230984 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表