USB主机控制器的设计
这里在EZ-Host主控制器驱动中定义一个结构体structusb hcd c67x00_hcd,用于描述EZ-Host的基本信息、硬件资源、状态描述,定义struct hc_driver c67x00_hc_driver来描述用于操作主机控制器的钩子函数,其结构体如图4所示。本文引用地址:https://www.eepw.com.cn/article/202547.htm
c67x00_hub_start()启动HCD主控制器,c67x00_hub_irq()实现其中断控制处理,c67x00_hub_status_data(),c67x00_hub_control()实现对虚拟根集线器的控制,c67x00_hub_enqueue(),c67x00_hub_dequeue()实现对USB请求(URB)进行排队,对URB进行调度。根据hcd和endp-oint的信息,安排URB的schedule到e67x00,该URB的传输完成后,会调用urb->complete()通知USBD。
4 测试结果
在ML405开发板上实现了USB主机控制器的开发,使系统具有USB主机功能。在开发板上分别插入USB键盘、USB鼠标、U盘进行测试,内核识别信息输出如图5所示。
从图5中可看出,系统可以方便与大容量存储类(MassStorage类)USB接口、人机接口类HID(Human Interfaee Device)USB接口进行通信,进行正常读写操作,实现了系统的SB接口扩展。
5 结束语
详细介绍在SoPC平台上进行USB主机控制器的硬、软件设计。针对EZ-Host器件,详细介绍其USB主控制器的Linux驱动开发过程及主要的接口设计,对于USB的主机控制器的驱动开发有一定参考价值。设计的重点和难点主要集中在主机控制器器件的驱动程序开发的环节上,但Linux作为开源系统,在开发设备驱动程序时有着其他嵌入式系统不可比拟的优势,大量的开放源码无疑可以大大加快开发的进程并使得其应用更加的广泛。因此,USB作为一种新型的高速外设总线,在嵌入式Linux领域有着广阔的应用前景。
评论