基于μCLinux的USB芯片FT245BL驱动程序实现
[11-20 17:14:04] 来源:http://www.88dzw.com 嵌入式系统 阅读:8342次
文章摘要: 当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的USB芯片FT245BL驱动程序实现,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.com当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。
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()的实现:
《基于μCLinux的USB芯片FT245BL驱动程序实现》相关文章
- › 基于CXA3355ER的GPS接收机下变频器电路
- › 基于CXA1951AQ的GPS接收机下变频器电路
- › 基于CAN总线的电池管理系统结构框图
- › 基于CY7C68013A的USB控制系统设计研究
- › 基于CPCI总线的多网口卡设计
- › 基于CAN总线的分布式位置伺服系统设计
- 在百度中搜索相关文章:基于μCLinux的USB芯片FT245BL驱动程序实现
- 在谷歌中搜索相关文章:基于μCLinux的USB芯片FT245BL驱动程序实现
- 在soso中搜索相关文章:基于μCLinux的USB芯片FT245BL驱动程序实现
- 在搜狗中搜索相关文章:基于μCLinux的USB芯片FT245BL驱动程序实现