精华内容
下载资源
问答
  • Oxford半导体公司(Oxford Semiconductor)近日宣布开发出世界上第一个可在USB2.0端口和外部SATA存储...这种桥接芯片的嵌入式USB2.0 Link和Phy可支持全速和高速模式,并后向兼容USB1.1。 OXU921S设有一个6KB的高速缓存,
  • Oxford半导体公司 (Oxford Semiconductor) 宣布开发出世界上第一个可在USB2.0 端口和外部SATA存储设备之间提供透明数据传输的芯片,型号为 OXU921S 的桥接芯片能支持业界迅速迈进至Serial ATA存储装置的新时代。...
  • ORCAD画的电路图,想研究SATA到USB口转换的可以下载学习。我们平时买的移动硬盘盒原理和这个类似。先打开ORCAD再用软件打开电路图
  • 近几年来,USB 接口得到了日益...利用USB/UART桥接芯片开发USB 接口是一种较为简便易行的设计方法,这种方法可以适合大多数的USB 小型系统的应用。本文以TTDI公司的FT8U232M为例,对这种USB 接口的设计方法进行了阐述。
  • 在2005年第二季推出的 “92X” 系列产品包括五款新型SATA桥接芯片,拥有多项创新技术,所支持的接口标准包括USB2.0、FireWire400、FireWire800以及首次支持的External SATA。Oxford半导体的SATA桥接芯片将协助硬盘...
  • USB转UART桥接芯片CP2101及其应用

    千次阅读 2012-12-25 14:30:40
    USB转UART桥接芯片CP2101及其应用 分类: 电子相关2008-10-01 00:10 577人阅读 评论(0) 收藏 举报  摘要:CP2101及其升级产品CP2102最美国Silicon公司生产的高集成度USB-UART桥接电路。它们能够用最...
     

    USB转UART桥接芯片CP2101及其应用

    分类: 电子相关 577人阅读 评论(0) 收藏 举报
     摘要:CP2101及其升级产品CP2102最美国Silicon公司生产的高集成度USB-UART桥接电路。它们能够用最简单的外部电路、最少的外部器件及最小的电路板面积简便实现USB2.0到UART的转换。文中介绍该电路的主要特性和实际应用方法。
        关键词:CP2101 UART USB
    引言
    CP2101及其升级产品CP2102是美国Silicon公司推出的USB-UART桥接电路。该电路的集成度高,内置USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM及异步串行数据总线(UART),支持调制解调器全功能信号,无需任何外部的USB器件。功能强大,采用MLP-28封装,尺寸仅为5mm×5mm,占用空间非常小。
    与其他USB-UART转接电路的工作原理类似,CP2101通过驱动程序将PC的USB口虚拟成COM口以达到扩展的目的。虚拟COM口(VCP)的器件驱动程序允许一个基于CP2101的器件以PC应用软件的形式作为一个增加的COM口独立于任何现有的硬件。COM口使用运行在PC上的应用软件以访问一个标准硬件COM口的方式访问基于CP2101的器件,PC与CP2101间的数据传输是通过USB完成的,因此,无需修改现有的软件和硬件就可以通过USB向基于CP2101的器件传输数据。
    1 CP2101的特性
    CP2101的体积虽小但功能非常强大,其主要特性如下:
    ·内含USB收发器,无需外接电路器;
    ·内含时钟电路,无需外接振荡器;
    ·其内部512字节的EEPROM可用于存储产品生产商的ID、产品的ID序列号、电源参数、器件版本号和产品说明;
    ·内含上电复位电路;
    ·片内电压调节可输出3.3V电压;
    ·符合USB2.0规范的要求(12Mb/s);
    ·SUSPEND引脚支持USB状态挂起;
    ·异步串行数据总线(UART)兼容所有握手和调制解调器接口信号;
    支持的数据格式为数据位8、停止位1、2和校验位(包括奇校验、偶校验和无校验);
    ·波特率范围为300b/s~921.6kb/s;
    ·内含512字节接收缓冲器和512字节发送缓冲器;
    ·支持硬件或X-On/X-Off握手;
    ·支持事件状态。

    图1

    此外,通过厂商及销售商免费提供的、适用于Windows(含Windows CE)、Linux、Mac OS-X等多个操作系统的驱动程序,可省去CP2101系列器件二次开发的投入。这样,在一般情况下,焊接完毕并安装好驱动程序即可使用。
    2 工作原理
    CP2101的内部结构及外部基本连接电路如图1所示。由图1可见,用CP2101进行串口扩展所需的外部器件非常少,仅需3只去耦电容器即可,使用起来非常方便。
    2.1 USB功能控制器和收发器
    CP2101中的USB功能控制器是一个符合USB2.0的全速电路,带有收发器和相应的片内上拉电阻器。USB功能控制器管理USB与UART间的所有数据传输,以及由USB主控制器发出的请求命令和用于控制UART功能的命令。通过USB挂起和恢复信号可支持CP2101及外部电路的电源管理。当在总线上检测到挂起信号时,CP2101将进入挂起模式。在进入挂起模式时,CP2101会发出SUSPEND和SUSPEND信号,同时,在CP2101复位后,CP2101也会发出该信号直到USB要求的器件配置完成。CP2101的挂起模式会在下述任何一种情况出现时被取消:
    (1)检测到继续信号或产生继续信号时;
    (2)检测到一个USB复位信号;
    (3)器件复位。
    在退出挂起模式时SUSPEND和SUSPEND信号被取消。
    需要注意的是SUSPEND和SUSPEND和CP2101复位期间会暂时处于高电平,如果要避免这种情况,可以使用一个大的下拉电阻器(10kΩ)来确保SUSPEND在复位期间处于低电平。
    2.3 异步串行数据总线(UART)接口
    CP2101的UART接口包括TX发送、RX接收数据信号,以及RTS、CTS、DSR、DTR、DCD和RI控制信号。UART支持RTS/CTS、DSR/DTR和X-On/X-Off握手,还可以通过编程使UART支持各种数据格式和波特率。UART的数据格式和波特率编程可在PC上进行。表1所列是CP2101串行总线的数据格式和波特率。

    表1 CP2101串行总线的数据格式和波特率
    数据位 8
    停止位 1
    校验位 无校验、奇校验、偶校验
    波特率 300,600,1200,1800,2400,4800,7200,9600,14400,19200,28800,38400,56000,57600,115200,128000,230400,460800,921600
    这里还需注意的是,CP2101异步串行数据总线的数据位和停止位是固定的,也就是说,在实际使用中可以通过软件改变校验位和波特率,但是,改变数据位和停止位会在通讯中出现异常现象。
    2.3 内部EEPROM
    CP2101内部集成了一个EEPROM,可用于存储由设备原始制造商定义的USB供应商的ID、产品的ID说明、电源参数、器件版本号和器件序列号等信号。USB配置数据的定义是可选的。如果EEPROM没有被OEM的数据占用,则采用默认方式配置数据。注意,尽管如此,对于可能使用多个基于CP2101的器件连接到同一个PC的OEM应用来说,它们需要一个专一的序列号。
    内部EEPROM可通过USB进行编程,以便OEM的USB配置数据和序列号可以在制造和测试时直接写入到系统上的CP2101中。Silicon公司提供一种专门为CP2101内部EEPROM进行编程的工具,同时还提供一个Windows DLL格式的程序库。该程序库可在制造过程中将EEPROM编程步骤集成到OEM中,以便用自定义软件进行流水线式测试和序列号的管理。EEPROM的写寿命典型值为100,000次,数据保持时间为100年。
    3 应用实例
    CP2101的实际应用参考电路如图2所示。该电路经过制板和调试,证明是完全可行的。

    图2

        (1)以上电路支持全功能串行通信应用。为了确保数据收发的稳定性,避免通信过程中的干扰,还可以在USB接口端添加滤波电路。
    (2)电路中采用的多通道RS-232收发器是Maxim公司的MAX241系列或MAX223等系列电路(详情请参看MAXIM公司RS-232收发器数据手册),该系列支持在挂起状态(当CP2101进入挂起状态时,SUSPEND引脚变为高电平,从而使RS-232收发器亦进入挂起状态),保持接收外界数据有效。在 在使用电路时,需要注意EN引脚及SHDN引脚的正确连接。
    在很多简单的串行通信中,仅使用TXD/RXD二个引脚的信号,在这种情况下可以使用通道数更少,封超更小的RS-232收发器。
    (3)CP2101的底部有大片金属,在芯片内部接地。因此在制板时一定要保证没有非接地通孔在CP2101的中间通过,或者保证通孔不与其发生短路。为了保证电路工作的可靠性,建议不要在CP2101焊接面板层的中间部分进行布线。
    (4)CP2101的UART总线上的信号能够被单片机等直接识别,因此应根据具体应用要求决定是否需要进行电平转换。
    4 结束语
    CP2101是一款功能强大的USB-UART桥接电路,5mm×5mm的外型使其占用空间非常小,用它将USB口扩展成串口非常简单易行。同时由于其内部存储产品的ID等信息的寄存器可以直接通过USB口改写,因此用其开发相关产品还有省时省力的优点。唯一遗憾的是,由于UART本身的限制,其最大波行率只能达到921600b/s,不能发挥USB2.0并没有多大的意义。目前,CP2101的升级产品CP2102已经面市。
    展开全文
  • Oxford半导体公司(Oxford Semiconductor)宣布推出全球首个可在USB2.0端口和多达两个SATA磁盘之间进行透明数据传输的桥接芯片——OXU921DS。该器件支持USB2.0和外部SATA连接,允许外部存储产品的设计可以在现有和...
  • Oxford半导体公司(Oxford Semiconductor)的OXU921DS器件支持USB2.0和外部SATA... OXU921DS桥接芯片以ARM7处理器为基础,包含8Kbyte的RAM和12个GPIO。与芯片一同提供的现场可升级固件包括USB大量存储协议,作为Windo
  • 全新µPD720231芯片的主要特性:(1)减小尺寸,节约能源;(2)支持SATA 3.0版,可实现6 Gbps的高速数据传输;(3)支持高速UASP协议,不受操作系统限制;(4)能够与可靠的物理层(PHY)核心无缝连接
  • cp2102电路,带指示灯,不用编程,直接用usb与rs232通讯
  •  在没有有线网络的情况下,可以外挂一个usb无线网卡来桥接上网,目前支持3070L、8187L芯片的网卡,反正linux系统都用这些芯片, 免的安装驱动, 我选择的是 WN-722N      1. 在开机的状态下,插入网卡到设备...

     0:选择USB网卡

      在没有有线网络的情况下,可以外挂一个usb无线网卡来桥接上网,目前支持3070L、8187L芯片的网卡,反正linux系统都用这些芯片, 免的安装驱动, 我选择的是 WN-722N

      

      

     1. 在开机的状态下,插入网卡到设备的usb接口

      然后登录用ssh 登录到 roo@172.16.42.1, 默认的登录密码和账号是:

      输入帐号:root  密码:pineapplesareyummy

      命令行下执行启动网卡wlan1:

    ifconfig wlan1 up

      可以看到多了一个物理网卡接口

      

     

     2:重启设备

     

     3:ssh登录并修改配置

      修改配置文件/etc/config/network , 需要熟悉vim命令行的操作

    vim /etc/config/network

      添加代码:

    config interface wwan
           option proto dhcp

     

     4: 手机上安装wifi manager 软件

      用来扫描周围的wifi,并获取加密方式信息,  502网络通道为 11, 

      502的加密方式为:[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ,对应的为 : mixed-psk+ccmp

    无线网络的加密方式有很多:

    WPA版本Ciphers
    psk2+tkip+ccmp
    psk2+tkip+aes
    WPA2 Personal (PSK) TKIP, CCMP
    psk2+tkip WPA2 Personal (PSK) TKIP
    psk2+ccmp
    psk2+aes
    psk2
    WPA2 Personal (PSK) CCMP
    psk+tkip+ccmp
    psk+tkip+aes
    WPA Personal (PSK) TKIP, CCMP
    psk+tkip
    psk
    WPA Personal (PSK) TKIP
    psk+ccmp
    psk+aes
    WPA Personal (PSK) CCMP
    mixed-psk+tkip+ccmp
    mixed-psk+tkip+aes
    mixed-psk
    WPA/WPA2 Personal (PSK) mixed mode TKIP, CCMP
    mixed-psk+tkip WPA/WPA2 Personal (PSK) mixed mode TKIP
    mixed-psk+ccmp
    mixed-psk+aes
    WPA/WPA2 Personal (PSK) mixed mode CCMP
    wpa2+tkip+ccmp
    wpa2+tkip+aes
    WPA2 Enterprise TKIP, CCMP
    wpa2+ccmp
    wpa2+aes
    wpa2
    WPA2 Enterprise CCMP
    wpa2+tkip WPA2 Enterprise TKIP
    wpa+tkip+ccmp
    wpa+tkip+aes
    WPA Enterprise TKIP, CCMP
    wpa+ccmp
    wpa+aes
    WPA Enterprise CCMP
    wpa+tkip
    wpa
    WPA Enterprise TKIP
    mixed-wpa+tkip+ccmp
    mixed-wpa+tkip+aes
    mixed-wpa
    WPA/WPA2 Enterprise mixed mode TKIP, CCMP
    mixed-wpa+tkip WPA/WPA2 Enterprise mixed mode TKIP
    mixed-wpa+ccmp
    mixed-wpa+aes
    WPA/WPA2 Enterprise mixed mode CCMP

     

     5. 配置无线桥接的参数,修改文件/etc/config/wireless

     

     6. 执行命令

    ifup wwan

      网卡会去连接wifi热点,如果连接成功,敲命令

    ifconfig wlan1

      然后重新启动pineapple, 配置正常的话即可正常上网。

     

     7. 想让手机也能上网,则要进行转发操作,执行命令 :

    iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE

      可以将此命令放在文件/etc/rc.local里,开机自动运行。 

     参考:

      http://blog.csdn.net/call_me_yifei/article/details/41298893:http://blog.csdn.net/call_me_yifei/article/details/41298893

       

    作者: NONO
    出处:http://www.cnblogs.com/diligenceday/
    企业网站:http://www.idrwl.com/ 厦门点燃未来网络科技
    开源博客:http://www.github.com/sqqihao
    QQ:287101329
    微信:18101055830 

    厦门点燃未来网络科技有限公司, 是厦门最好的微信应用, 小程序, 微信网站, 公众号开发商

    展开全文
  • 就通信方式讨论:(以下不论ARM核\嵌入式\低端\高端均称为单片机) 单片机间通信可用...USB口需单片机带USB接口模块,或USB桥接芯片,或用软件模拟(仅业余使用,商品或工业使用不推荐)。 就USB接口讨论: 单片机
  • linux中的usb子系统

    2019-01-27 16:18:52
    usb协议由于考虑通用性,既可以支持大容量存储设备,音频设备,HID设备,CDC协议,DFU...,内容理论与实例相结合,基于51单片机和一块usb桥接芯片实现了usb众多设备。本篇不详细分析总线驱动程序,而着重分析设备驱...

        usb协议由于考虑通用性,既可以支持大容量存储设备,音频设备,HID设备,CDC协议,DFU等等等。。。在设计整套协议的时候非常复杂,比如相关包类型,事务,端点等这些概念内容非常多,如果读者向深入分析整套协议栈,可以阅读<<圈圈教你玩usb>>,内容理论与实例相结合,基于51单片机和一块usb桥接芯片实现了usb众多设备。本篇不详细分析总线驱动程序,而着重分析设备驱动程序。

     

     

    Linux系统中实现了如下以下设备类

    • 音频通信类 ,比如USB声卡,USB麦克风
    • 通信设备类,比如USB转虚拟串口
    • HID类,比如鼠标,键盘,游戏手柄
    • 打印设备类,比如打印机
    • 海量存储类,比如U盘

    在Linux内核中,使用usb_driver结构体描述USB设备驱动,usb_driver结构体定义如下所示:

    struct usb_driver {
    	const char *name;
    
    	int (*probe) (struct usb_interface *intf,
    		      const struct usb_device_id *id);
    
    	void (*disconnect) (struct usb_interface *intf);
    
    	int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code,
    			void *buf);
    
    	int (*suspend) (struct usb_interface *intf, pm_message_t message);
    	int (*resume) (struct usb_interface *intf);
    	int (*reset_resume)(struct usb_interface *intf);
    
    	int (*pre_reset)(struct usb_interface *intf);
    	int (*post_reset)(struct usb_interface *intf);
    
    	const struct usb_device_id *id_table;
    
    	struct usb_dynids dynids;
    	struct usbdrv_wrap drvwrap;
    	unsigned int no_dynamic_id:1;
    	unsigned int supports_autosuspend:1;
    	unsigned int soft_unbind:1;
    }

     usb总线驱动程序,在接入USB设备,会构造了一个新的usb_dev结构注册到usb_bus_type,这部分内容内核已经帮我们实现好了,设备驱动程序需要做的就是构造好usb_driver结构体,注册到usb_bus_type,usb_driver结构体中有一项id_table,表示能够支持哪些设备,当usb能匹配到id_table的某个设备时,就会调用usb_driver结构体的probe探测函数,当拔掉usb设备时,就会调用用usb_driver结构体的emove注销函数。

    usb_device_id结构体定义如下所示,usb_device_id结构体包含有USB设备的PID,VID,版本,设备类,设备子类,接口类等以及匹配标志成员match_flags,以表明匹配的种类

    struct usb_device_id {
    	/* which fields to match against? */
    	__u16		match_flags;
    
    	/* Used for product specific matches; range is inclusive */
    	__u16		idVendor;
    	__u16		idProduct;
    	__u16		bcdDevice_lo;
    	__u16		bcdDevice_hi;
    
    	/* Used for device class matches */
    	__u8		bDeviceClass;
    	__u8		bDeviceSubClass;
    	__u8		bDeviceProtocol;
    
    	/* Used for interface class matches */
    	__u8		bInterfaceClass;
    	__u8		bInterfaceSubClass;
    	__u8		bInterfaceProtocol;
    
    	/* not matched against */
    	kernel_ulong_t	driver_info;
    };

     

    可以借助一些宏来生成usb_device_id结构体,比如USB_DEVICE(vendor,product),USB_DEIVICE_INFO(class,subclass,protocol),USB_INTERFACE_INFO(class,subclass,protocal)等

     

    USB请求块是USB设备驱动中用来描述与USB设备通信所用的基本载体。非常类似于I2C设备驱动中的i2c_msg结构体,SPI设备驱动程序中的spi_message结构体。

    struct urb {
    	/* private: usb core and host controller only fields in the urb */
    	struct kref kref;		/* reference count of the URB */
    	void *hcpriv;			/* private data for host controller */
    	atomic_t use_count;		/* concurrent submissions counter */
    	atomic_t reject;		/* submissions will fail */
    	int unlinked;			/* unlink error code */
    
    	/* public: documented fields in the urb that can be used by drivers */
    	struct list_head urb_list;	/* list head for use by the urb's
    					 * current owner */
    	struct list_head anchor_list;	/* the URB may be anchored */
    	struct usb_anchor *anchor;
    	struct usb_device *dev;		/* (in) pointer to associated device */
    	struct usb_host_endpoint *ep;	/* (internal) pointer to endpoint */
    	unsigned int pipe;		/* (in) pipe information */
    	unsigned int stream_id;		/* (in) stream ID */
    	int status;			/* (return) non-ISO status */
    	unsigned int transfer_flags;	/* (in) URB_SHORT_NOT_OK | ...*/
    	void *transfer_buffer;		/* (in) associated data buffer */
    	dma_addr_t transfer_dma;	/* (in) dma addr for transfer_buffer */
    	struct scatterlist *sg;		/* (in) scatter gather buffer list */
    	int num_mapped_sgs;		/* (internal) mapped sg entries */
    	int num_sgs;			/* (in) number of entries in the sg list */
    	u32 transfer_buffer_length;	/* (in) data buffer length */
    	u32 actual_length;		/* (return) actual transfer length */
    	unsigned char *setup_packet;	/* (in) setup packet (control only) */
    	dma_addr_t setup_dma;		/* (in) dma addr for setup_packet */
    	int start_frame;		/* (modify) start frame (ISO) */
    	int number_of_packets;		/* (in) number of ISO packets */
    	int interval;			/* (modify) transfer interval
    					 * (INT/ISO) */
    	int error_count;		/* (return) number of ISO errors */
    	void *context;			/* (in) context for completion */
    	usb_complete_t complete;	/* (in) completion routine */
    	struct usb_iso_packet_descriptor iso_frame_desc[0];
    					/* (in) ISO ONLY */
    };

     

     

    URB使用流程

    • 创建一个URB结构体
    struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags)
    //iso_packets=NULL表示不创建等时数据包
    //开辟urb空间的mem标志,一般为GFP_KERNEL

     

    • 设置创建好的URB结构体,把这个URB分配给USB设备的特定端点
    中断URB
    static inline void usb_fill_int_urb(struct urb *urb,   //指向该URB
    				    struct usb_device *dev, //指向该请求块要发送的usb设备,设备可以利用interface_to_usbdev函数根据probe中的 intf形参转换而来 
    				    unsigned int pipe,      //特定端点,通过usb_rcvintpipe创建
    				    void *transfer_buffer,  //指向数据缓冲区
    				    int buffer_length,      //指向数据缓冲区长度
    				    usb_complete_t complete_fn, //完成数据传输的回调函数
    				    void *context,
    				    int interval)            //调度间隔
    批量URB,批量URB没有调度间隔
    static inline void usb_fill_bulk_urb(struct urb *urb,
    				     struct usb_device *dev,
    				     unsigned int pipe,   //特定端点,通过usb_rcvbulkpipe创建
    				     void *transfer_buffer,
    				     int buffer_length,
    				     usb_complete_t complete_fn,
    				     void *context)    
    控制URB
    static inline void usb_fill_control_urb(struct urb *urb,
    					struct usb_device *dev,
    					unsigned int pipe,  //特定端点,通过usb_rcvctrlpipe创建
    					unsigned char *setup_packet,  //指向将发送到端点的设置数据包
    					void *transfer_buffer,
    					int buffer_length,
    					usb_complete_t complete_fn,
    					void *context)  

     

    等时URB没有以上三种传输的初始化函数,只能手动设置,然后提交给USB核心层

    • 提交URB给USB核心
    int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
    //struct urb *urb   指向该URB
    //gfp_t mem_flags   开辟urb空间的mem标志,一般为GFP_KERNEL

     

    简单的URB使用流程

    在一些批量与控制传输的场合,有时设备驱动只是从usb上传输一些简单的控制消息,可以不需要使用urb,而使用一些更简单的函数来完成usb数据的传输

    批量传输
    int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
    		 void *data, int len, int *actual_length, int timeout)
     控制传输  
     int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
    		    __u8 requesttype, __u16 value, __u16 index, void *data,
    		    __u16 size, int timeout)
     

     

    实例:USB鼠标(linux2.6 测试环境s3c2440)

    Linux系统中,鼠标属于标准输入设备,其驱动包含两部分:usb_driver结构体的设置以及输入设备驱动input_dev的设置。

    该驱动程序模块加载与卸载中,分别注册与注销usb_driver结构体

    static struct usb_device_id usbmouse_id_table [] = {
    	{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,
    		USB_INTERFACE_PROTOCOL_MOUSE) },
    	{ }	/* Terminating entry */
    };
    
    /*  分配/设置usb_driver */
    static struct usb_driver usbmouse_as_key_driver = {
    	.name		= "usbmouse",
    	.probe		= usbmouse_probe,
    	.disconnect	= usbmouse_disconnect,
    	.id_table	= usbmouse_id_table,
    };
    
    
    static int usbmouse_init(void)
    {
    	/* 2. 注册 */
    	usb_register(&usbmouse_driver);
    	return 0;
    }
    
    static void usbmouse_exit(void)
    {
    	usb_deregister(&usbmouse_driver);	
    }

     

    在usb_driver中的probe()函数中,对输入设备进行初始化并注册,设置创建好的URB结构体并提交给USB核心层

    static int usbmouse_probe(struct usb_interface *intf, const struct usb_device_id *id)
    {
    	struct usb_device *dev = interface_to_usbdev(intf); //获取usb设备
    	struct usb_host_interface *interface;
    	struct usb_endpoint_descriptor *endpoint;   
    	int pipe;
    	
    	interface = intf->cur_altsetting;
    	endpoint = &interface->endpoint[0].desc;
    
    	/* a. 分配一个input_dev */
    	uk_dev = input_allocate_device();
    	
    	/* b. 设置 */
    	/* b.1 能产生哪类事件 */
    	set_bit(EV_KEY, uk_dev->evbit);
    	set_bit(EV_REP, uk_dev->evbit);
    	
    	/* b.2 能产生哪些事件 */
    	set_bit(KEY_L, uk_dev->keybit);
    	set_bit(KEY_S, uk_dev->keybit);
    	set_bit(KEY_ENTER, uk_dev->keybit);
    	
    	/* c. 注册 */
    	input_register_device(uk_dev);
    	
    	
    	pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); //创建中断输入端点
    
    	
    	len = endpoint->wMaxPacketSize;   //端点的包长
    
    	
    	usb_buf = usb_buffer_alloc(dev, len, GFP_ATOMIC, &usb_buf_phys);//分配usb缓冲区
    
    	
    	/* 分配URB */
    	uk_urb = usb_alloc_urb(0, GFP_KERNEL);
    	//设置URB
    	usb_fill_int_urb(uk_urb, dev, pipe, usb_buf, len, usbmouse_irq, NULL, endpoint->bInterval);
    	uk_urb->transfer_dma = usb_buf_phys;
    	uk_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
    
    	/* 向核心层提交URB */
    	usb_submit_urb(uk_urb, GFP_KERNEL);
    	
    	return 0;
    }

     

    在usb_driver断开函数中,终止已提交的URB,并注销输入设备

    static void usbmouse_disconnect(struct usb_interface *intf)
    {
    	struct usb_device *dev = interface_to_usbdev(intf);
    
    	//printk("disconnect usbmouse!\n");
    	usb_kill_urb(uk_urb);
    	usb_free_urb(uk_urb);
    
    	usb_buffer_free(dev, len, usb_buf, usb_buf_phys);
    	input_unregister_device(uk_dev);
    	input_free_device(uk_dev);
    }

     

    usb鼠标数据传输属于中断传输,在鼠标中断的URB完成函数,会通过input_report_key()报告按键时间

    static void usbmouse_as_key_irq(struct urb *urb)
    {
    	static unsigned char pre_val;
    
    	/* USB鼠标数据含义
    	 * data[0]: bit0-左键, 1-按下, 0-松开
    	 *          bit1-右键, 1-按下, 0-松开
    	 *          bit2-中键, 1-按下, 0-松开 
    	 *
         */
    	if ((pre_val & (1<<0)) != (usb_buf[0] & (1<<0)))
    	{
    		/* 左键发生了变化 */
    		input_event(uk_dev, EV_KEY, KEY_L, (usb_buf[0] & (1<<0)) ? 1 : 0);
    		input_sync(uk_dev);
    	}
    
    	if ((pre_val & (1<<1)) != (usb_buf[0] & (1<<1)))
    	{
    		/* 右键发生了变化 */
    		input_event(uk_dev, EV_KEY, KEY_S, (usb_buf[0] & (1<<1)) ? 1 : 0);
    		input_sync(uk_dev);
    	}
    
    	if ((pre_val & (1<<2)) != (usb_buf[0] & (1<<2)))
    	{
    		/* 中键发生了变化 */
    		input_event(uk_dev, EV_KEY, KEY_ENTER, (usb_buf[0] & (1<<2)) ? 1 : 0);
    		input_sync(uk_dev);
    	}
    	
    	pre_val = usb_buf[0];
    
    	/* 重新提交urb */
    	usb_submit_urb(uk_urb, GFP_KERNEL);
    }

     

    从USB鼠标驱动例子可以看出,usb_driver结构体本省只是起一个挂载总线的作用,具体设备类型的驱动模型根据具体设备类型额定,鼠标就是input子系统,USB声卡就是ALSA框架,USB摄像头就是V4L2框架,而这些具体设备的底层硬件操作时,都是调用的URB相关接口。USB核心层API的存在无需关系底层USB主机控制器的具体细节

     

    展开全文
  • USB3125T芯片使用说明

    2018-12-27 16:48:50
    本文件用于描述USB3125T的使用...USB3125T设备提供USB端口和MIDI UART串行端口之间的桥接。 它是USB-to-MIDI专业芯片,支持一个USB2.0端口,一个MIDI输出端口和一个MIDI输入端口。该芯片只需简单的外围电路便可以工作。
  • USB HUB简述

    2021-03-23 16:01:19
    一般来说,一块hub桥接芯片可扩展4个usb接口,而市面上的一拖七hub,其实使用了两块hub桥接芯片,其中一块hub桥接芯片的上行端口连接到另一块hub桥接芯片的下行端口。 hub的上行端口面向host,下行端口面向device。...

    概述

    在这里插入图片描述
    hub,集线器,连接在host与device之间的一种用于usb接口扩展的usb设备。可以将一个usb上行接口扩展为多个下行接口,使得一个host可以同时与多个device连接。

    一般来说,一块hub桥接芯片可扩展4个usb接口,而市面上的一拖七hub,其实使用了两块hub桥接芯片,其中一块hub桥接芯片的上行端口连接到另一块hub桥接芯片的下行端口。
    在这里插入图片描述
    hub的上行端口面向host,下行端口面向device。在下行端口上,hub提供了设备接入检测和设备移除检测的能力,并给下行端口供电。hub可单独使能各下行端口。不同的端口可工作在不同的速度(H/F/L)。

    数据传输

    在这里插入图片描述
    在这里插入图片描述
    host与hub之间使用的还是high speed bus,而hub与device之间使用的是full/low speed bus。

    host-hub间的数据流:
    在这里插入图片描述
    hub-device间的数据流:
    在这里插入图片描述
    需要注意的是,host与hub之间的IN数据流,在complete split阶段的data0之后,是没有handshake的,但hub与device之间还是有handshake的。

    SPLIT-分离传输

    分离传输仅在host和hub之间执行,通过分离传输,可以允许全速/低速设备连接到高速主机。

    分离传输对于device来说是透明的不可见的。

    分离传输:将一次完整的事务传输,拆分成两个事务传输。其出发点是高速传输和全速/低速传输的速度不相等,如果使用一次完整的事务来传输,势必会造成比较长的等待时间,从而降低了高速USB总线的利用率。通过将一次传输分成两次,将令牌(和数据)的传输与响应数据(和握手)的传输分开,这样可以在中间插入其他高速传输,从而提高总线的利用率

    在这里插入图片描述
    分离传输将一次完整的IN请求事务拆分为两次事务传输,分别为发送令牌包的SSPLIT事务传输、接收数据包的CSPLIT事务传输。
    在SSPLIT与CSPLIT之间,可以插入了一次其他device的IN请求。也就是说,分离传输允许在不超过最大响应时间的前提下,分离传输的两次事务之间可以适当插入其他的传输事务,提高总线利用率。

    1)SSPLIT-start split
    在这里插入图片描述
    PID:0~3 bit为包标识字段的包类型,4~7 bit为包类型字段的校验补码。
    在这里插入图片描述
    Hub address:支持指定的全速/低速设备的hub的设备地址,用于全速/低速事务。
    SC:start/complete,为0时表示SPLIT传输事务的SSPLIT。为1时,表示SPLIT传输事务的CSPLIT。
    Hub port:全速/低速事务所针对的目标中心的端口号,即对应hub的端口号。
    S:speed,此中断或控制事务的速度。S为1时,低速。S为0时,全速。
    E:在块传输、中断传输和控制传输中,无须传输方向,所以E置为“0”。对于同步传输,如果是IN传输则E=0,如果是OUT传输,则按下表进行选择。
    在这里插入图片描述
    ET:Endpoint type,当前端点的传输类型,不同值代表的如下。

    在这里插入图片描述
    CRC-5:循环冗余校验。

    2)CSPLIT-complete split

    在这里插入图片描述
    U字段:值固定为“0”,保留。其他字段同上。

    控制传输(SPLIT)

    SPLIT的控制传输事务根据数据流方向分为两种,OUT传输事务和IN传输事务。
    在这里插入图片描述
    SPLIT控制传输OUT事务示意:
    在这里插入图片描述
    SPLIT控制传输IN事务示意:
    在这里插入图片描述

    中断传输(SPLIT)

    在这里插入图片描述
    SPLIT中断传输事务示意:
    在这里插入图片描述
    host发送IN请求后,device没有准备好数据时,给host回复NAK。当device已经准备好数据,IN请求后,device上传数据给host,host接收后回复ACK。

    块传输(SPLIT)

    同步传输(SPLIT)

    展开全文
  • 3V电压供电,端口I/O均可耐压5V,硬件增强型URAT可与外部设备直接进行串口通信,或通过UART转USB桥接芯片同外部设备进行USB接口进行通讯;SMBus总线直接与ST的射频专用收发芯片CRX14连接,对CRX14控制来实现非接触...
  • 摘要:从功能方块图、引脚说明、帧格式、寄存器及其控制指令等几个方面详细介绍SigmaTel公司开发的一款专用于USB与IrDA间桥接控制的新型ASIC:STIr4200S。 STIr4200S是SigmaTel公司开发的一款专用于USB与IrDA间桥接...
  • 同时FDTI利用在此间举办的“国际集成电路研讨会”,隆重发布了其新一代USB桥接芯片,并介绍了相应的USB参考设计,以帮助本地厂商顺利导入相关系统。  FTDI总部位于英国格拉斯哥市,亚太地区区经理和工程经理诠释了...
  • 同时FDTI利用在此间举办的“国际集成电路研讨会”,隆重发布了其新一代USB桥接芯片,并介绍了相应的USB参考设计,以帮助本地厂商顺利导入相关系统。  FTDI总部位于英国格拉斯哥市,亚太地区区经理和工程经理诠释了...
  • 3V电压供电,端口I/O均可耐压5V,硬件增强型URAT可与外部设备直接进行串口通信,或通过UART转USB桥接芯片同外部设备进行USB接口进行通讯;SMBus总线直接与ST的射频专用收发芯片CRX14连接,对CRX14控制来实现非接触射频...
  • 3V电压供电,端口I/O均可耐压5V,硬件增强型URAT可与外部设备直接进行串口通信,或通过UART转USB桥接芯片同外部设备进行USB接口进行通讯;SMBus总线直接与ST的射频专用收发芯片CRX14连接,对CRX14控制来实现非接触射频...
  • 对于一些学校、工业、科研客户来说,电脑的串口非常重要,很多设备都必须采用串口和电脑端软件连接,很多电路模块可以非常直观方便地利用串口调试软件进行调试,很多仪器必须通过串口进行通讯和...现在USB转串口桥接
  • 然后又想到W600有两个串口,经常有时候调试软件要两根USB线,两个CH340,感觉特别的麻烦,于是就找到了双UART转USB桥接芯片CP2105这块IC,除了贵了点,还是蛮好用的,想到功率计肯定也离不开屏幕嘛,加上加上,按键...
  • 专业电子零组件代理商益登科技所代理的SILICON Laboratories今日推出业界体积最小和整合度最高的单芯片USB至UART桥接器。CP2102提供完整解决方案和免权利金的驱动程序,工程师不需要其它软件就能完成设计,使得RS232...
  • ASM1053芯片数据手册

    2018-11-19 23:47:48
    ASM1053芯片数据手册 ASM1053-datasheet.pdf SATA转USB桥接控制器的手册

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

usb桥接芯片