SEP6200平台上Linux内核的USB OTG驱动设计
2013-09-21杨廉萍缪卫
杨廉萍,缪卫
(东南大学 电子科学与工程学院,南京 210018)
引 言
传统的USB协议(USB 2.0)规定了两个设备之间进行数据通信时,必须有一个Host设备作为固定的主机,通过这个主机来控制设备间的数据传输。在日常应用中,基本都是将USB设备连接到PC,并在PC的控制下进行数据交换。这种交换方式,一旦离开了PC,各设备间就无法利用USB口进行直接操作。随着嵌入式设备的快速发展,两个USB设备之间直接进行数据交换的需求变得越来越迫切。USB On-The-Go(USB OTG)技术便应运而生。OTG技术实现了在没有Host的情况下,设备之间点对点的数据控制与传输。本文通过研究USB 2.0协议和USB OTG补充规范,结合具体应用需求,建立了基于国产SoC的嵌入式USB OTG模块硬件平台,并在Linux操作系统平台上设计并实现了基于国产内核主控芯片SEP6200的USB OTG设备驱动。
1 USB OTG协议与实现方式概述[1]
USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,并可提供一定的主机检测能力,支持对话请求协议(SRP)和主机交换协议(HNP)。在OTG中,初始主机设备称为A-device,外设称为B-device。
对话请求协议(Session Request Protocol,SRP):为了节省功耗,A-device在总线不被使用时允许VBUS总线关断,此时B设备就会检测到该状态并进入功低耗模式。当外部B-device需要向A-device发起对话时,它会通过SRP向A-device发出申请,请求A-device向VBUS供电并启动一次对话。对话将随VBUS的开启而开始,随VBUS的关闭而结束。
主机交换协议(Host Negotiation Protocol,HNP):该协议允许两个直接相连的OTG设备进行主机Host功能的切换,它能够根据电缆的连接方式来决定初始化角色,从而允许设备在通信时能够改变控制信号。……
