基于Linux操作系统和AT91RM9200处理器实现接口转换卡的设计

接口总线为一群互相连接的设备提供一种有效的通信方式,它是自动测试系统发展的标志,可以说接口总线技术发展的历史就是自动测试系统发展史,接口总线技术发展的水平标志着自动测试发展的水平。本文提出的接口转换方案解决了包括usb总线、gpib总线、网络等几种通用标准接口之间的相互转换。本方案以嵌入式linux操作系统和arm处理器为软硬件平台,在自动测试系统的应用中取得了良好的应用效果。
硬件系统设计
硬件平台基于arm920t的处理器at91rm9200,该处理器不仅有丰富的片上资源和标准接口,而且有低功耗、低成本、高性能、支持多种主要的嵌入式操作系统等特点,其采用5级整数流水线结构,性能高达200mips,具有标准的armv4存储器管理单元(mmu),内部集成两个usb2.0全速(12mb/s)主机端口、一个usb2.0全速(12mb/s)器件端口和10/100 base-t型以太网接口。该芯片具有多种工作模式,其低功耗待机模式下电流仅3.1ma。
此方案的硬件系统结构设计如图1所示,主要包括at91rm9200处理器、gpib模块、jtag接口、网络模块、32m sdram、16m flash、串口、usb主从口等部分。其中gpib模块通过cpld器件epm1270逻辑控制gpib接口芯片nat9914实现,网络模块通过外接dm9161实现10/100m自适应网络连接。另外,处理器内置的双主机收发器可连接usb设备。
软件系统设计
linux系统的移植
linux操作系统是可以运行在不同类型计算机上的一种操作系统的“内核”,它提供命令行或者程序与计算机硬件之间接口的软件核心部分。嵌入式linux系统从软件角度分为4个层次,分别为引导加载程序(boot loader)、内核、文件系统和用户程序。
boot loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
本方案中linux内核采用linux2.6.16版的kernel。因为本方案需要访问u盘,所以内核中必须加上支持u盘的模块,包括scsi support、scsi disk support、usb mass storage support、vfat(windows95)support、msdos partition tables等。usb器件端口与usb主机通信,可以有三种方式:一些功能最完备结构也最复杂的设备,采用用户定制的内核模块实现在标准usb总线上运行复杂的高级协议,由usb主机上相应的用户驱动程序和应用程序来完成连接;另一些基于linux系统的usb设备则利用usb总线来实现该设备与主机之间的简单点对点串行连接,主机上的应用程序实际上是利用了主操作系统所提供的usb编程接口,但实现的是串行通信协议;最后一种是设备将主计算机作为网关,将usb设备连接到办公局域网或互联网上,从而usb设备构成了一个模拟以太网接口。本方案采用最后一种方式,配置了内核中的usb rndis gadget模块,该模块利用usb接口作为物理媒介,模拟出一个虚构的以太网设备。
文件系统是用户模式进程与内核模式进程交互的纽带,制作具有特定的功能的文件系统是移植嵌入式系统不可缺少的部分。本方案利用busybox软件工具包构造ext2文件系统,此软件包集成了linux常用命令,可根据需求裁减,极大的方便了嵌入式系统的开发。[page]
应用程序的具体实现
数据在多个接口之间的转换主要是在用户态的应用程序中实现。此应用程序主要完成的功能是两个usb主口(一个接usb仪器,一个接u盘)、一个usb从口、gpib口和网口之间的数据交换。程序自动检测接口是否处于连接状态:如果是,便监听是否有数据需要传送,并将监听到的数据传给其他处于连接状态的接口。整个应用程序的框架如图2所示。
各个子进程的功能如下:
子进程1:usb从口的实现主要依靠内核中的usb rndis gadget模块的支持,当usb从口连接至pc时,在pc上模拟以太网接口,用tcp/ip网络协议传输数据;
子进程2:usb主口1专用于usb设备的usb端口;
子进程3:usb主口2专用于u盘,将u盘实际连接,当有数据传给u盘时,便在linux操作系统上挂载u盘,并以二进制方式将数据存储到u盘的linux.txt文件中,15s内没有数据传输就会卸载u盘;
子进程4:网口是以tcp/ip网络协议传输数据。子进程1和子进程4分别实现了网络服务器功能;
子进程5:在linux操作系统中为gpib口准备一个中断例程,当gpib口有动作时,会首先产生一个中断,应用程序立即跳转中断处理执行程序相关操作。
由于接口总线协议的解析都在linux驱动中完成,所以子进程间的数据传输直接代表了接口总线的通信。子进程创建了自己专用的管道fifo,以完成进程间的数据交换。
每个子进程都有一个主线程,完成端口的连接状态检测,主线程的流程图如图3所示。端口输出数据的处理主要由线程readfifo完成,它读取该进程的专用管道fifo的数据,如果从fifo中读到了数据,并且该端口连接标志位flag为1(表示该端口处于连接状态),便将此数据填入该端口的输出缓冲区,否则将读到的数据舍去。端口输入数据的处理由另一个线程完成,如果该端口处于连接状态,主线程就会创建该子线程实时读取该端口的输入数据,并将数据通过专用管道传给其他进程。
在整个应用程序中,各个端口的数据转发利用了linux进程间的数据通信技术。每个端口都设置了一定大小的数据缓冲区,使数据能够连续发送而不受外围控制器速度的影响,接收数据可靠,并尽可能减少了错误接收和错误判断的可能性。
结语
本文介绍了基于at91rm9200平台和嵌入式linux的一种接口转换卡的软硬件设计,它实现了usb、gpib和网络之间的数据通信。此转换卡具有广泛的实际应用价值,如pc通过网络远程控制usb设备或gpib主机控制usb设备等等。目前本方案已成功应用于示波器的接口扩展,事实证明该方案能够为组建接口总线繁多的自动测试系统提供帮助,取得了良好的效果。


各大厂商暗战动力电池 抢布电动汽车市场
小米6的发布,让小米5s价格暴跌,别等了买吧
用于过孔和阻抗走线的PCB技巧
物联网技术助力大型油田资产管理
国内最大单晶硅片项目在郑州航空港实验区投产
基于Linux操作系统和AT91RM9200处理器实现接口转换卡的设计
保时捷发布了首款纯电动跑车Taycan,特斯拉的对手又多了一个!
众云世纪科技RK3288安卓解码驱动一体板 ZYSJ08B介绍
支持AEC-Q100的LDO稳压器BUxxJA2MNVX-C系列
半导体封装测试
基于差动电容传感器的车辆载荷检测系统
纳芯微推出全新高精度、低功耗的远程数字温度传感器NST141x系列
重获被浪费的时间,这款AI应用让医生有更多时间关注患者
国产FPGA翻身做主人 技术实现质的飞跃
2014慕尼黑上海电子展:一场回味无穷的热点和商机“秀”
Linux操作系统基本使用知识,Linux操作系统操作流程图文详解
定制嵌入式主板:满足客户的实际需求
工业机器人连接器的要求是什么
安科瑞黄岩博物馆防火门监控系统 Acrelsale1
家庭电路或电器发生漏电的方法