基于μCLinux的USB驱动程序实现

发布者:平章大人最新更新时间:2013-09-06 来源: dzsc关键字:μCLinux  USB  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

  0 引 言

  μClinux是针对嵌入式控制领域的操作系统,它继承了Linux内核的绝大部分特性,专为没有内存管理单元MMU的嵌入式微处理器而设计。它内核小,效率高,源代码开放,包含了完整的TCP/IP网络协议。ADSP-BF533是ADI公司Blackfin系列的高速数字信号处理器芯片。 Blackfin系列是ADI与Intel联合开发的体现高性能体系结构的首款第四代DSP产品,16位定点DSP内核,新型指令结构,支持C/C++编程,主频达600 MHz,内核电压1.2 V,具有动态电源管理能力,功耗低,扩展能力强,被广泛应用于各种信号处理。

  这里使用基于Blackfin ADSP-BF533微处理器的μClinux开发板,在对外通信时需用到USB接口。结合实际情况,选择FTDI公司推出的USB芯片FT245BL。主要介绍USB芯片FT245BL的工作原理和电路设计,以及如何在μClinux操作系统下编写和添加其驱动程序的方法。

  1 FT245BL工作原理与电路设计

  传统USB芯片要求设计人员对USB的标准、Firmware编程及驱动程序的开发等有较深入的理解,工作量大,开发周期长,需要经验丰富的设计者才能完成;而FTDI(Future Technology Devices Intl.Ltd.)公司推出的USB芯片FT245BL集成了微控制器,并且把实现USB通信协议的固件程序直接固化在芯片中,同时提供了PC端的没备驱动程序,用户只需进行必要的硬件设计和简单的软件编程,所以大大降低了开发难度。

  1.1 功能结构

  FT245BL是FTDI公司的一款并行FIFO双向数据传输的USB芯片,对于微处理器它提供8位并行数据总线D0~D7,对于外部主机是标准串行总线或虚拟接口,其数据传输速率最高可达1 MB/s,提供USBl.1/2.O规范的全速物理接口,支持UHCI/OHCI/EHCI主控制器。

  FT245BL芯片的内部系统结构框架图如图1所示,芯片主要由3.3 V稳压器、USB收发器、串行接口引擎(SIE)、USB协议引擎和先进先出(FIFO)控制器、6 MHz振荡器、8×倍频器、USB锁相环、复位器、E。PROM接口等构成。其内部设置了2个FIFO数据缓冲区,一个是128 B的接收缓冲区;一个是384 B的发送缓冲区。串行接口引擎用来完成USB数据的串/并双向转换;USB协议引擎用于管理来自USB设备控制端口的数据流,实现USB主机控制器需要的 USB底层协议。


  1.2 工作原理

  DSP与FT245BL接口框图如图2所示。主板CPLD用AMS[0:3]和高5位地址线(A19~A15)进行译码;FT245BL的TXE和RXF 信号在查询地址有效时,通过DSP读取其状态,判断是否发送数据或接收数据;TXE用于判断发送FIFO是否满,0为不满,1为满,当TXE为0时,外部 DSP向发送FIFO缓冲区写数据,直到发送数据全部写入;RXF用于判断接收FIFO是否有数据,只要数据个数≥1,RXF就为低,通知DSP可以读取数据。FT245BL的RD和WR信号在读写地址有效时,分别与DSP的ARE和AWE相连,DSP可以读取接收数据和写入发送数据。


  1.3 电路设计

  FT245BL芯片使用主板上的3.3 V和5 V电源供电,主板对外作为一个USB设备。USB总线的电源线连接在芯片的复位引脚RESET上,这样保证了USB芯片平时处于复位状态。

  当USB总线连接到主机时,电源线变高,RESET变高,最终导致RSTOUT变高,由于USBDP引脚配置了一个1.5 kΩ的上拉电阻连到RSTOUT引脚,使得芯片以全速状态连接到主机。FIFO控制器接口包括8位数据线D7~D0、读RD、写WR、发送使能TXE、接收完毕RXF的5个信号。由于FT245BL芯片没有片选线,所以信号都是经过主板CPLD内部的译码电路处理后才连接的。DSP采用中断机制读取 FIFO的数据,所以将RXF连接DSP的可编程端口(PF3),用以产生中断。

  2 FT245BL驱动程序的编写

  这里以ADI公司的ADSP-BF533为例,介绍USB接口芯片FT245BL在μClinux下驱动程序的编写。依据FT245BL芯片的结构和接口设计,决定将其作为字符设备来开发它的驱动程序。所用开发平台的硬件结构如下:


  2.1 确定设备的设备名称和主设备号

  主设备号是内核识别不同类型设备的惟一标识,内核利用主设备号将设备与相应的驱动程序对应起来。开发新的驱动程序,必须找到一个还未被使用的主设备号,分配给自己的字符设备。主设备号的确定可以通过两种方法:一是静态定义;二是动态分配。该驱动采用的是静态主设备号,在ft245b1.C文件中直接定义设置为254,#define ft245bl_major 254。[page]

  2.2 确定编写需要的file-operations数据结构中的功能函数

  该驱动文件ft245b1.C中定义的file_operations数据结构:


  2.3 设备的注册与注销

  设备驱动在调用前必须首先向系统注册,这时就执行加载函数static int_init ft245bl_init(void)。该函数的核心语句是 register_chrdev(ft245bl_major,FT245BL_DEV,&ft245bl_fops)字符注册函数。其中,ft245bl_major是设备驱动向系统申请的主设备号;FT245BL_DEV是USB设备的名称;ft245bl_fops是之前定义为 file_operations数据结构的各个功能函数的文件指针。该函数返回值为0,表示注册成功;返回-INVAL,表示申请的主设备号非法;返回 -EBUSY,表示该设备号正在使用。设备注册成功后,设备名会出现在系统的/proc/devices文件中。

  设备有注册就有卸载,卸载字符设备需要调用函数unregister_chrdev(ft245bl_major,FT245BL_DEV),参数有主设备号和设备名两个,USB退出驱动,用staticvoid_exit ft245bl_exit(void)函数。

  2.4 编写相应的功能函数

  对于每一个设备驱动程序来说,都有一些与此设备密切相关的功能函数,通常对于块设备或者字符设备来说,都存在着诸如打开、关闭、读、写这一类的操作。当进行系统调用时,将自动地使用驱动函数中特定的函数来实现具体的操作。打开函数open()主要完成以下操作,即检查设备错误(诸如设备未就绪或相似的硬件问题),如果是首次打开,则初始化设备;读取次设备号;分配和填写要放在file→private-data内的数据结构;增加使用计数。读函数 read()用来从外部设备中读取数据,当其为NULL指针时,将引起read()系统调用返回-EINVAL(“非法参数”)。函数返回一个非负值表示成功地读取了多少字节。写函数write()向外部设备发送数据,如果没有这个函数,返回一个-EINVAL;如果返回值非负,就表示成功写入的字节数。当设备被关闭时调用release()这个操作,有时也称为close()。它应该完成以下操作:使用计数减1;释放open分配在 file→rivate-data中的内存;在最后一次关闭操作时关闭设备。下面是FT245BL驱动程序读函数read()的实现:


  读取函数ft245bl_read通过判断USB芯片RXF管脚的状态来处理接收到的数据,如果RXF为0,表示接收缓冲区(RX FIFO)中至少有1个数据,处理器读取一个数据后重新回到判断;如果RXF为1,表示芯片没有接收到数据,这时程序启动中断等待事件函数 wait_event_interruptible,内核从USB设备驱动中释放出来,运行其他程序,直到有新的数据到来时,内核首先执行中断处理函数 ft245bl_rx_handler,将中断标志位irqflag置1,唤醒等待队列ft245bl_waitqueue,然后再回到读取函数中继续运行。

  2.5 中断处理

  设备驱动程序通过调用中断申请函数申请中断,其格式为:


  函数调用成功返回0值,返回-INVAL表示中断号超出范围或者handler=NULL;返回-BUSY表示中断已经被占用且不能共享。其中,handler是中断处理子程序指针,中断产生时自动调用该函数;参数irq为中断号;pt_regs为中断发生之前寄存器的映像,很少使用;irqflags控制中断行为。irqflags=SA_INTER-RUPT表示它在运行时将禁止所有的中断;irqflags=SA_SHIRQ 表示共享此中断处理程序;devname为设备名称;dev_id用于支持中断的共享,它将作为第2个参数传递给中断处理函数,可以利用它来传递一些必要的信息。该中断处理程序如下:


  3 实现驱动程序的加载

  驱动程序可以按照两种方式编译:一种是静态编译进内核;另一种是编译成模块以供动态加载。该设备驱动程序采用静态编译进μClinux内核。下面以在嵌入式μClinux系统中需新增一个USB字符型设备FT245BL为例,介绍设备驱动程序的添加的一系列步骤。[page]

  3.1 配置相关信息

  首先,将编写好的驱动程序复制到μClinux系统的文件目录中。新建ft245bl目录统一管理USB设备的驱动文件包括C文件、头文件、编译文件、配置文件,存放于目录μClinux-dist/linux-2.6.x/drivers/char/下,在ft245bl下新建Makefile,并在下面两个编译文件中添加编译指令:


  在ft245bl下新建配置文件Kconfig,添加驱动名FT245BL_DRIVER、菜单选项名称USB ft245bl Driv-er、菜单有效选项DRIVER_FT245BL及驱动说明,代码如下:


  第1项是μClinux系统为设备驱动创建的驱动文件名及所在目录;第2项是设备类型;第3项是设备驱动文件的权限;第4,5项分别为用户ID和组ID;第6,7项为主设备号和次设备号;第8,9,10项分别为次设备号的起始号码、增量和数量。

  3.2 编译驱动程序

  在/home/μClinux/μClinux-dist目录下运行make menueonfig进行配置,在字符设备选项中可以看见刚刚添加的FT245BL Driver选项,选中它。通过make的一系列编译,所有内核和应用程序源代码将被编译,编译结束后将产生二进制文件uImage。

  3.3 加载驱动程序

  这里的BF533主板中数据存储器SDRAM大小为32 MB,地址为0~Ox02000000;异步存储区BootFLASH大小为4 MB,地址为0x20000000~0x203FFFFF。在/home/μClinux/μClinux-dist运行指令下,把uImage文件拷贝到/svr/tftp目录,tftp是一个简单的ftp下载:

  cp images/uImage/svr/tftp

  打开超级终端μClinux,接通目标板电源或按复位键,目标板上的u-boot自动启动,通过超级终端的串口输入命令:

  到此,在μClinux中添加设备驱动程序的工作已经完成。

  4 结 语

  介绍了基于Blackfin ADSP-BF533开发板,在μClinux环境下USB芯片FT245BL驱动程序的设计与加载。简述了设备驱动程序开发的过程,并给出了读函数和中断函数的实例,说明了在μiClinux下如何添加FT245BL驱动程序的方法,实现了DSP主板的USB端口通信。


参考文献:

[1]. FT245BL datasheet http://www.dzsc.com/datasheet/FT245BL_335930.html.
[2]. CPLD datasheet http://www.dzsc.com/datasheet/CPLD_1136600.html.

关键字:μCLinux  USB  驱动程序 引用地址:基于μCLinux的USB驱动程序实现

上一篇:ADUM3160: 全速/低速USB数字隔离器
下一篇:分析USB鼠标造成电脑死机的原因

推荐阅读最新更新时间:2024-05-02 22:45

Intel宣布开放雷电3技术,速度能达到40Gbps
如果评选PC中最方便的功能,USB接口显然是最佳候选人之一,随着USB-C接口的普及,USB难插对方向的问题也解决了,而且速度越来越快,USB 3.1已经达到10Gbps了。USB最新的规范是USB 3.2了,最大速度可达20Gbps,且仅支持USB Type-C。 在台北电脑展上微星等公司也展示了基于USB 3.2 2x2的产品,包含一个PCIE转接卡做主机(HOST),一个转接板做的USB 3.2 Gen 2X2 转NVME设备,推测为测试样品。 USB 3.2之后呢?再下一代的标准就是USB 4.0了,目前USB-IF组织还没有完全公布USB 4.0规范,但是今年3月份Intel宣布开放雷电3技术,并且经由U
[嵌入式]
Intel宣布开放雷电3技术,速度能达到40Gbps
应对现代USB音频系统设计的挑战
USB音频是绝大多数设备中普遍使用的接口,除非是最古老的个人电脑硬件和操作系统。以其鲁棒性连接和数据传输速率,人们可能会认为,在这种接口上传输高质量的音频是很简单的。然而,今天成功的基于USB的音频产品无不是做了大量的芯片和系统方面的工作,需要解决时钟恢复等棘手难题。  问题的本质是,最后的输出设备传送音频到扬声器,耳机或线路输出插座,这需要一个“主时钟”来调整音频转换速度。这个主时钟需要有两个独立的属性:1)它一定是音频采样率的整数倍,这要非常精确(这样当时序错误时,你就不需要舍弃或复制音频样本);2)它的抖动(或者可以说是相位噪声)必须足够低,这样数模转换过程就不会受到影响。这里的挑战是我们要同时满足这两个要求。  困难
[嵌入式]
赛普拉斯推出业内首个具备USB电力传输功能USB Type-C Hub控制器
全新EZ-USB HX3C集四个芯片的功能于一身,提供了一个具有成本效益且节省空间的USB3.1 Gen 1、USB Type-C和PD Hub解决方案 台湾台北,2016年5月31日 - 市场领先的USB创新者赛普拉斯半导体公司(纳斯达克股票代码:CY)今日宣布,其业界首个具备USB电力传输功能的USB Type-C Hub控制器样品现已出样,并将于2016台北电脑展上进行展示。USB 开发者论坛(USB-IF)制定的USB Type-C标准和PD规范因能实现纤薄的工业设计,具有简单易用的连接器和线缆,能够传输多种协议,电力输出最高可达100W (较之前的7.5W标准有了大幅提升),因而获得了越来越多顶级PC厂商的支持
[嵌入式]
赛普拉斯推出业内首个具备<font color='red'>USB</font>电力传输功能<font color='red'>USB</font> Type-C Hub控制器
USB串口的超高速通信
USB串口转换器是实现USB与RS-232/RS-485/RS-422串口设备相互通讯的一种协议转换装置(USB协议-串行通信协议)。一般的USB串口转换器支持的波特率最高达到115.2Kbps(115200bps).USB串口的超高速通信是指最高波特率超过115200bps的串口通信,比如921600、460800、230400bps.由于这几种波特率是非标的,所以从硬件到软件都有特殊要求和方法才可以实现。本文以波仕USB232GH2转换器和波特率921.6Kbps(921600bps)为例来进行介绍。 要实现USB串口的921.6Kbps的高速通信,必须满足2个条件:1、USB-串口转换器本身支持921.6Kbps波特率;2、必
[嵌入式]
基于单片机USB接口的数据采集存储电路的设计
在一些特殊的工业场合,有时需要将传感器的信号不断的实时 采集 和存储起来,并且到一定时间再把 数据 回放到PC机中进行分析和处理。在工作环境恶劣的情况下采用高性能的单片机和工业级大容量的FLASH存储器的方案恐怕就是最适当的选择了。CYGNAL公司的C8051F320 SOC是一种具有8051内核的高性能单片机,运行速度为普通8051的12倍。该芯片内部528字节随机RAM和2048字节XRAM为数据缓冲和 程序 运行提供了充足的空间。更受欢迎的是它的串行扩展功能为当前的各种串行芯片和外部 设备 接口的扩展提供了极大的方便。高速的SPI硬件接口与串行FLASH RAM的无缝连接大大简化了电路板布线,而片内自带的USB接口功能使数据
[应用]
NOR FLASH驱动程序
// // 参考 drivers\mtd\maps\physmap.c // #include linux/module.h #include linux/types.h #include linux/kernel.h #include linux/init.h #include linux/slab.h #include linux/device.h #include linux/platform_device.h #include linux/mtd/mtd.h #include linux/mtd/map.h #include linux/mtd/partitions.h #include asm/
[单片机]
工程师改造 AirPods Pro,将 Lightning 端口改为 USB-C 端口
硬件原型设计顾问 Ken Pillonel 为了改善苹果 AirPods Pro 的可维修性,通过 3D 打印充电盒外壳,将 Lightning 充电端口切换为 USB-C 端口。 国外维修团队 iFixit 给苹果 AirPods Pro 的可维修打分为 0 分(满分 10 分,分数越高越容易维修)。Pillonel 在分享的视频中再次强调,虽然苹果 AirPods Pro 充电盒要比 AirPods 更容易打开,但依然无法保证在不损坏元件的情况下打开充电盒。 在为第一代和第二代 AirPods 开发了类似的解决方案后,Pillonel 试图创造一种解决方案,为无法打开的 AirPods Pro 充电盒赋予新的生
[手机便携]
工程师改造 AirPods Pro,将 Lightning 端口改为 <font color='red'>USB</font>-C 端口
实物图曝光,苹果35W双口USB-C充电器采用扁造型设计
此前,9to5Mac 发现了一份泄露的支持文件,苹果可能计划在不久的将来推出一款双口 35W USB-C 充电器。而 ChargerLAB 也分享了据称是该 35W 双口 USB-C 充电器的渲染图。   随后,推特博主 @Majin Bu 放出了一个更加有力的证据,他晒出了号称是这款充电器的实拍图。从图中可以看到,这款充电器与上面的渲染图基本一致,采用扁造型设计,双 USB-C 接口采用横向排列,但两侧没有凹槽设计。   IT之家了解到,早在 3 月初,分析师郭明錤就在推特上透露了一款新的 30W 充电器,采用氮化镓 GaN 技术,可以实现更小、更轻的外形尺寸。郭明錤表示,这款充电器“接近量产”,将于 2022 年某
[手机便携]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved