找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35061|回复: 1
收起左侧

ST官方USB CDC例程详解(例程不占篇幅)

[复制链接]
ID:75926 发表于 2015-4-4 01:44 | 显示全部楼层 |阅读模式
6.ST官方USB CDC例程详解(例程不占篇幅)

  A.RS-485的相关问题
  ST官方的USB CDC演示例程,没有涉及到RS485的方向控制。ST官方给出了一个文档,能够正确地发出RS485方向控制的
  时序。但实际要解决的问题远远比想象中复杂。

  (1)虚拟串口的发送延迟时间设置

  在数据发送时,首先ST的USB设备得按照上位机设置的发送延迟时间去工作,遗憾的是,驱动没有这样的设置接口。

  ST下位机是这样实现虚拟串口的数据发送:USB的OUT端点从PC机获得需要out的数据包(小于或等于64),然后USB的OUT
  端点调用串口发送函数,将数据发送出去。

  串口不存在RS-485电路时,由于串口通常工作在异步状态,上位机超过64字节的包,会被分成两个以上的包发出去,
  这不会有什么问题。串口工作在RS485状态时,需要切换数据方向,这样会产生很多不必要的换向控制。这些对工作在
  异步状态的电路没什么大的影响,就是对方驱动接收的数据包零碎了点。

  如果ST下位机实现延迟发送时间设置,假设可设置延迟1-10毫秒。如果延迟10毫秒,按照每个毫秒64字节的数量统计,
  发送640字节的大数据包时,由于ST下位机由于延迟发送,640字节的数据包被打包发送出去,这样就不存在RS-485的
  反复换向存在,这是理想状态。在发送控制命令时,FT232RL是专用芯片可以实现1毫秒的延迟,而CH340G采用DSP核
  实现,延迟在10毫秒以上,PL2303更不靠谱,和Keil都通讯不上,其它芯片没试过。

  (2)虚拟串口的接收缓冲设置

  异步串口通讯最大的难题是接收问题,接收的数据必须及时地转移到安全的位置,以防止缓冲区溢出。
  对于DSP来说,内部有16字节的FIFO,不需要对每个字节的数据进行实时响应,因为它可能有重要的计算任务,
  不喜欢总是被通讯打断。对ARM来说,实时响应是是它的特长,因为它的中断延迟时间非常短,再加上ARM支持的
  内部SRAM通常比DSP丰富,安排个大缓冲不是什么难事。一般DSP设置为4096字节接收缓冲。根据实际应用的不同,
  如果需要传输超大数据包,可以安排超大的数据缓冲,一般来说小于10240字节都可以,USB1.1按照每毫秒64字节
  的通讯速度,10240字节的数据通讯需要10240/64 = 160毫秒,Windows的任务切换大约为30-40毫秒,计算机的驱动
  正常,接收都不会出问题。

  (3) 阻塞式串口发送占用CPU的问题解决方法

  首先是考虑采用中断式向外发送数据,发送前切换RS485的方向,增加全局发送标志和发送数量,则可以支持发送时的
  延迟时间设置。其次是采用DMA的方式,和中断式类似。这些发送方式都是假设总线处于空闲的状态,并不判断RS-485
  总线是否被占用。

  如果对中断式或DMA方式的通讯感到烦琐的话,也可以采用操作系统的方法实现数据发送,换向时序问题
  也不用考虑了,对于发送任务,按顺序使能发送控制,发送数据,关闭发送使能即可。

  (4) RS485的同时发送的碰撞问题解决方法

  实际上RS485就是存在这种多个设备同时发送的碰撞现象,所以才催生出来了CAN总线。

  如果ST下位机考虑检测总线状态,发现总线上有数据,则设置Flag_RXD_Receiving标志为1,同时某个毫秒计时器清0,
  并启动计时,当发现计时超过设置值(1-10)时,设置Flag_RXD_Receiving标志为0,并判断总线空闲。

  如果将Flag_RXD_Receiving标志的判断添加到发送函数中,则可以避免RS-485总线的数据碰撞问题。

西门子数控系统采用RS485总线通讯,
由于采用的PPI协议,延迟判断的时间间隔是50ms,加上该协议非常严谨,
所以在工业控制领域应用比较广泛,可靠性得到了充分的验证。Windows是强线程弱进程,线程调度时间以10-15
毫秒为单位,任务调度大约是30-40毫秒。PPI协议采用公用通信组件,可协调两个运行实例,对同一目标进行控制。

而DMX512通讯协议简单而严格,以30毫秒为周期,和RS485总线相比,除了单向之外,88us的数据帧头也可以通过
STM32F1额外提供,因此该USB Dual RS485设备可作为一个DMX512转换器使用。由于目前是以USB1.1的通讯速度实现的,
USB1.1的CDC设备,每毫秒最多传输64字节,在30毫秒的时间内,最多传输 64 * 30 = 1920 字节,所以最多支持3个
DMX512接口。若采用STM32F205以上芯片,可以外挂USB2.0高速PHY芯片,实现更快的数据传输,有人实测STM32F407的
USB2.0 High Speed通讯速度可达20MB/S,达到了大多数场合视频信号传输的要求。

专业型的USB转串口芯片, 如CH340G、FT232RL、PL2303HX等,则无法实现DMX512通讯的严格要求。
  
USB4种不同类型的传输方式:控制传输(Control Transfer),批量传输(Bulk Transfer),中断传输(Interrupt Transfer)和实时传输(IsochTransfer)
对于全速USB2.0全速设备,我们关心数据包的大小,同步实时传输数据包大小可以到1023字节,其它传输方式数据包的大小都是64字节。

回复

使用道具 举报

ID:219749 发表于 2017-7-14 20:16 | 显示全部楼层
哥们,你在哪看到的用407的板子外挂PHY进行高速通信的,我找了半天也没找到相关资料。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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