0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于SL811HS/T和AT91SAM7X256控制器实现USB主机接口的设计

电子设计 来源:电子设计工程 作者:王佳伟,夏路易 2021-06-22 17:10 次阅读

由于人们对数字形式信息的需求量越来越大,数据通信及其应用技术受到越来越广泛的关注和应用。随着技术的发展。USB通信正向高速、方便快捷、稳定可靠的方向发展。目前,大多数USB设备都是需要与PC机相连进行通信,而USB设备之间的通信则无法实现。而对于一些处在特殊环境下的称重设备的数据传输和系统升级,PC机很不方便实现,因此迫切要求开发出能够识别USB设备的主机端口。这样使用U盘等设备就能实现数据传输。本系统设计在AT91SAM7X256控制器的基础上,增加了主机端口,适用于工矿企业中称重设备的数据更新和系统升级。

1 系统整体方案

USB(UniversalSerialBus)即通用串行总线,提供一种兼容不同速度的、可扩充的,使用方便的外围设备接口,同时也是为解决计算机接口太多等问题而设计的。在嵌入式系统中如果处理器集成了OHCI标准的USB主机控制器,则直接就可以引出USB主控端口:而对于没有集成的处理器,则需要使用USB主控器件,从总线上扩展USB主机接口。很多IC制造商都提供这种主控器件,如Scanlogic公司的SL811HS/T等。在编写USB设备驱动程序设计时,可以分为3部分编写:主机端设备驱动程序、主机控制器驱动程序设计和设备端驱动程序。对于一些不具备USB主机端口的设备,为了实现通信的方便、快捷性,如与U盘直接通信等设备是完全有必要在原来设备的基础上扩展USB主机端口。

该系统硬件设计是由电源、复位、时钟电路、以太网口、USB主机和设备端口以及串口组成,其结构框图如图1所示。其中,以太网口用于将设备接入网络实行远程管理和监控。将设备的数据接入Internet,实现远程监控,适用于工矿企业设备的集中化管理和维护。USB主机端口通过主机控制器SL811HS/T与控制器AT9lSAM7X256相连,进行数据通信。USB设备端口作为与PC机通信的接口。该系统设计的创新在于该设备抛开了PC机,既可作为主机,也可作为外设,并与其他0TG设备直接实现点对点通信。

2 硬件电路设计

USB主机与设备之间的通信最终都是通过USB主机控制器和USB设备的总线接口间的电缆实现的,任何一个输出请求都是由主机控制器组成包的形式发往总线的。USB,总线中只有一个主机,它是USB树形结构的根,通过一个根HUB提供一个或多个连接点,由其连接各个USB设备。

2.1 核心器件选型

该系统设计选用Scanlogic公司的SL811HS/T作为USB主机接口器件,该器件是既能用作Host模式又能用作Slave模式的,具有标准微处理器总线接口USB控制器,适用于非PC设备在Host模式下,它支持嵌入式主机与USB外围设备的通信,在Slave模式下,可作为主机的一个外设。SL811HS具有以下特点:是遵循USBl.1协议的嵌入式USBHost/Slave器件;提供8bit宽数据总线及中断支持,方便与微处理器、微控制器连接;通过硬件设置或软件设置,工作在Host或Slave模式;自动探测所接设备是低速设备还是高速设备:8bit双向数据总线;片上SI-E、USB收发器;软件控制下运行为单个USB主或从设备主机或从设备模式有1.5Mb/s的低速,12Mb/s的全速,自动识别低速和全速设备8位双向数据,工作于12MHz或48MHz晶振或振荡器

微处理器是系统核心,其性能直接决定该系统设计的准确性,稳定性和可靠性。基于本系统对精度和实时性的要求。选用ATMEL公司的AT9lSAM7X256单片机。它具有以下特点:1)内部集成ARM7TDMIARMThumb处理器,支持嵌入式ICE内电路仿真以及调试通信接口:2)复位控制器(RSTC),基于上电复位单元,提供外部信号整形和复位源状态;3)时钟发生器(CKGR),低功耗RC振荡器,3~20MHz片上振荡器和1个PLL;4)电源管理控制器(PMC),具有电源优化功能,包括慢速时钟模式(低于500Hz)和空闲模式,4个可编程外部时钟信号;5)USB2.0全速(每秒12Mbit)设备接口,具有片上收发器,大小为1352字节的可配置成FIF0;6)10/100base-T(Mb/s)的以太网口;7)提供片上1.8V稳压器,为内核及外部组件提供高达100mA的电流,3.3VVDDIO提供I/O线电源,独立的3.3VVDDFLASH提供Flash电源,具有掉电检测的1.8VVDDCORE提供内核电源。

2.2 AT91SAM7X256的USB设备端口设计

AT91SAM7X256的USB设备端口原理图,如图2所示。由于AT91SAM7X256支持USB2.0全速(每秒12Mbit)设备接口,故AT91SAM7X256的2个引脚DDM和DDP与外界USB相连,直接实现USB设备端口。

由USB接口输入5V直流电源,二极管VD1用于限制电源的导通方向,经过C18、C19滤波,然后经过SPXll7M-3.3将电源稳压至3.3V。为了降低噪声和出错率,应隔离模拟电源与数字电源,图3中的L1和L2用于电源隔离元件(将数字电源的高频噪声隔离)。SPXll7M-3.3是Sipex公司的LDO器件,其特点为输出电流大,输出电压精度高稳定性高。SPXll7M系列LD0器件输出电流可达800mA,具有电流保护和热保护功能,可广泛应用于数字家电和工业控制等领域。

2.3 USB主机端口设计

AT91SAM7X256的USB主机端口原理图,如图3所示。SL811HS/T选用48引脚的TQFP封装形式,SL811HS/T既能用作Host模式又能用作Slave模式。将SL811HS/T的M/S引脚接地,即设为低电平信号(M/S=0),选择作为主机端口。

SL811HS/T的D0~D7端口为双向数据I/O端口,与控制器的PAl0~PAl7端口相连,实现数据通信。SL811HS/T的nRD引脚与AT91SAM7X256的PA9相连,nWR引脚与AT9lSAM7X256的PA8相连,SL811HS/T的nCS引脚与AT91SAM7X256的PA7相连,AO引脚与AT91SAM7X256的PA6相连,控制SL811HS/T的读写状态,如图4所示。

访问存储器和控制寄存器的空间时,先设A0=0后写地址,接下来设A0=1,再进行寄存器/存储器读/写周期。当nWR或nCS处于无效时,SL811HS写或读操作终止。对于连接到SL81lHS的设备,在writenWR信号之前取消片选nCS,数据将一直保持并与指定的值相同。SL811HS/T的nRST引脚与AT91SAM7X256的PAl8相连,实现软件低电平复位功能。SL811HS/T的引脚7、8与USB接口的DATA+,DATA-相连实现数据通信。S-L811HS/T的Clk/X1引脚和X2引脚与外接12MHz晶振相连。

3 系统软件实现

USB设备驱动程序设计包括主机端设备驱动程序、主机控制器驱动程序和设备端驱动程序3部分组成。主机端设备驱动程序就是设备驱动程序,它是主机环境中为用户应用程序提供一个访问USB外设的接口。Linux为这部分驱动程序提供编程接口,设计者只要按照需求编写驱动程序框架,通过调用操作系统提供的APl接口函数可以完成对USB外设的特定访问。

3.1 USB设备驱动程序框架

图5所示Linux中USB驱动的体系结构。LinuxUSB主机驱动由3部分组成:USB主机控制器驱动,USB驱动和不同的USB设备类驱动。USB驱动程序首先要向Linux内核进行注册自己,并告之系统该驱动程序所支持的设备类型及其所支持的操作。这些信息通过usb_driver结构传递。

3.2 注册和注销

USB驱动程序注册,就是把在初始化函数中填好的use_driver结构作为参数传递给use_register()函数即可,函数的调用方法为:result=usb_register(&skel_driver);当要从系统卸载驱动程序时,也是将use_driver结构作为参数传递给usb_deregister函数处理。函数的调用格式为:

当USB设备插入时,为了使linux-hotplug系统自动装载驱动程序,需要创建一个MODULE_DEVICE_TABLE。核心代码如下(这个模块仅支持某一特定设备):

3.3 probe()函数

probe()函数的编写格式为:staTIcvoid*skel_probe(structusb_device*dev,unsignedintifnum,conststructusb_device_id*id);驱动程序需要确认插入的设备是否可以被接收,如果不接收,或者在初始化的过程中发生任何错误,probe()函数返回一个NULL值。否则返回一个含有设备驱动程序状态的指针,通过这个指针,就可以访问所有结构中的回调函数。

在驱动程序里,最后一点是要注册devfs(设备文件系统)。首先创建一个缓冲用来保存那些被发送给USB设备的数据和那些从设备上接收的数据,并为设备传输创建一个USB请求块(URB)以向设备写入数据,同时USBurb被初始化,然后在devfs子系统中注册设备,允许devfs用户访问USB的设备。注册过程如下:

如果devfs_register函数失败,devfs子系统会将此情况报告给用户。如果设备从USB总线拔掉,设备指针会调用disconnect函数。驱动程序就需要清除那些被分配了的所有私有数据,关闭urbs,并且从devfs上注销调自己。

3.4 open(),write()和read()函数

首先,要打开此设备。在open()函数中MODULE_INC_USE_COUNT宏是一个关键,它起到一个计数的作用,有一个用户态程序打开一个设备,计数器就加1。read()函数首先从open()函数中保存的fi。write()函数和read()函数是完成驱动对读写等操作的响应。在skelwrite中,一个FLL_BULK_URB函数,就完成了urb系统callbak和的skel_write_bulk_callback之间的联系。read函数与write函数稍有不同在于:程序并没有用urb将数据从设备传送到驱动程序,而是用usb_bulk_msg函数代替,这个函数能够不需要创建urbs和操作urb函数的情况下,来发送数据给设备,或者从设备来接收数据。调用usb_bulk_msg函数并传到一个存储空间,用来缓冲和放置驱动收到的数据,若没有收到数据表示失败并返回一个错误信息。usb_bulk_msg函数,当对USB设备进行一次读或者写时,usb_bulk_msg函数是非常有用的;然而,当需要连续地对设备进行读/写时,应建立一个自己的urbs,同时将urbs提交给USB子系统。

MOD_DEC_USE_COUNT宏也会被调用到,首先确认当前是否有其他的程序正在访问这个设备,如果是最后一个用户在使用,可以关闭任何正在发生的写,操作如下:

USB设备可以在任何时间点从系统中取走,即使程序目前正在访问它。USB驱动程序必须要能够很好地处理解决此问题,它需要能够切断任何当前的读写,同时通知用户空间程序:USB设备已经被取走。

4 实验结果

经过大量的试验,该系统工作稳定可靠,传输速度快且具有极低的误码率。利用逻辑分析仪和BusHound软件进行相应的逻辑功能分析,USB主机与设备之间可以正常通信。因为整个电路主要应用于称重系统,所以着重测试了控制传输和批量传输这两种数据传输方式。批量传输的有效数据传输速率可以达到1Mb/s,这是传输带宽的限制和数据包中冗余信息的存在所导致的。总体来讲,1Mb/s的传输速率还是令人满意的。

5 结束语

本系统以AT91SAM7X256单片机为核心进行设计,采用SL811HS/T主控器件,实现了USB主机端口的扩展,使称重设备中同时具有USB设备端和主机端口,因此,该系统设计实现数据的点对点通信,实现称重设备数据更新、系统升级的可靠、快捷,适合工矿企业特殊环境下设备数据的更新,便于对设备的管理和维护。并在称重系统中引入USB主机端口具有非常实用的特点。因此,该系统设计具有很好的应用前景。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16073

    浏览量

    176959
  • 接口
    +关注

    关注

    33

    文章

    8435

    浏览量

    150685
  • usb
    usb
    +关注

    关注

    60

    文章

    7866

    浏览量

    263582
收藏 人收藏

    评论

    相关推荐

    AT91SAM7X256 仿真调试教程

    AT91SAM7X256 仿真调试教程 本篇文章主要介绍 ADS1.2 下如何仿真调试AT91SAM7X256的开发板。该开发板是深圳市英贝德科技有限公司制作。该板提供
    发表于 10-22 12:00

    SL811HS嵌入式USB主从控制器相关资料下载

    概述:SL811HS是Cypress Semiconductor公司生产的一款嵌入式USB主/从控制器。它为48脚TQFP封装。
    发表于 05-19 06:52

    怎么实现基于Linux下的USB主机接口设计?

    本系统以AT91SAM7X256单片机为核心进行设计,采用SL811HST主控器件,实现USB主机
    发表于 06-03 06:07

    SL811HS VxWorks Host Driverv 1

    The SL811HS is a dual role host / slave embedded USB device.  The SL811HS VxWorks Host Driver
    发表于 04-11 16:33 15次下载

    SL811HS VxWorks USB Host Contr

    The SL811HS USB Host embedded host controlleris a single chip USB embedded host solution thatcan
    发表于 04-11 16:34 55次下载

    SL811HS VxWorks Host Driver Re

    SL811HS VxWorks Host Driver Release Notes The SL811HS is a dual role host / slave embedded USB
    发表于 04-11 16:38 2次下载

    SL811HS/SL811S Errata Embedded

    SL811HS/SL811S Errata Embedded USB Host/Slave Controller The SL811HS operation of
    发表于 04-14 10:53 24次下载

    SL811HS/SL811S pdf datasheet (

    The SL811HS generates erroneous packets after it tries to communicate with low speeddevices through
    发表于 04-14 10:55 36次下载

    SL811HS的Linux驱动程序源代码下载

    The SL811HS is a dual role host / slave embedded USB device. The SL811HS Linux Host Driver
    发表于 04-14 10:58 53次下载

    sl811hs/sl811中文资料 (嵌入式USB 主/从设

    SL811HS是一个嵌入式的主/从设备控制器,可以全速或低速与USB设备通信。SL811HS可以接微处理,微
    发表于 04-14 11:06 14次下载
    <b class='flag-5'>sl811hs</b>/<b class='flag-5'>sl811</b>中文资料 (嵌入式<b class='flag-5'>USB</b> 主/从设

    基于SL811HSUSB主从一体化设计及软件实现

    本文介绍了一种基于SL811HSUSB控制器与从设备一体化设计的实现方法。介绍了单片机和SL811HS 的硬件
    发表于 08-04 09:10 110次下载

    AT91SAM7X256/AT91SAM7X128中文资料,

    AT91SAM7X256/128 是基于 32 位 ARM RISC 处理的系列微控制器中的一员,集成有256/128K 字节的高速 Flash 和 64/32K 字节的 SRAM
    发表于 03-05 09:51 232次下载

    USB接口芯片SL811HS在51单片机系统中的应用

    摘要:介绍了CYPRESS公司生产的主/从双工作模式USB接口芯片SL811HS的性能与内部结构,给出了SL811HS芯片在单片机系统中扩展USB
    发表于 09-25 01:04 138次下载

    基于SL811HS的单片机扩展USB接口设计

    详细介绍了SL811HS 这块USB 芯片的特点和功能,给出了用单片机AT89S52与SL811HS来设计单片机扩展USB接口的连接电路图,
    发表于 05-17 17:30 188次下载
    基于<b class='flag-5'>SL811HS</b>的单片机扩展<b class='flag-5'>USB</b><b class='flag-5'>接口</b>设计

    如何使用51单片机控制SL811HS实现USB主机的硬件设计和底层驱动的编写

    本文介绍了51单片机控制SL811HS实现USB主机的硬件设计和底层驱动的编写。其中,底层驱动部分主要讲述了
    发表于 12-20 17:27 3次下载
    如何使用51单片机<b class='flag-5'>控制</b><b class='flag-5'>SL811HS</b><b class='flag-5'>实现</b><b class='flag-5'>USB</b><b class='flag-5'>主机</b>的硬件设计和底层驱动的编写