摘 要:通过使用idt70261 双端口ram 实现了arm 与tms320c6211 dsp 之间的高速实时数据通信,给出了双端口ram 与tms320c6211 和arm 的硬件连接图和arm 驱动编写细节。
后pc 时代,由于网络技术和集成电路技术的迅速发展,利用嵌入式系统进行数字信号处理与传输成为可能。在arm 和dsp 构成的双处理器系统中,嵌入式作为主设备,主要完成数据处理、存储与网络传输工作,而dsp 作为从设备需要负责复杂的算法实现。
在此高速数据采集和处理系统中,随着采样数据量的增大和处理任务的增加,对数据的传送要求越来越高,如果在两个系统端口之间没有能够高速传送数据的接口,将会造成数据传送的阻塞,严重影响系统的实时性与处理数据的能力,因此此系统设计的重点之一是主从设备之间的数据通信。本文介绍用双端口ramidt70261 完成tms320c6211dsp 与嵌入式arm920t之间的数据通信。
1 idt70261双端口ram功能简介
idt70261 是美国idt 公司生产的高速16k×16 的双端口sram,其典型功耗为750mw,它具有两个等级的存取时间:商业级有 15/20/25/35/55 ns (max),工业级有20/25/35/55ns (max)。双端口ram 有两个完全独立的端口,它们各自有一套相应的数据总线、地址总线和控制总线,允许两个控制器单独或异步的读写其中任意一个存储单元。两个端口具有同样的对双端口ram 的读写操作能力,但是当两个端口同时对同一地址进行读写操作时,会因为数据的冲突而造成存储或读取的错误。对同一存储单元的操作存在以下四种情况:
(1) 两个端口不同时对同一地址单元进行读写数据。
(2) 两个端口同时对同一地址单元进行读出数据。
(3) 两个端口同时对同一地址单元进行写入数据。
(4) 两个端口同时对一个地址单元,一个写入数据,另一个读出数据。
前两种情况不会造成对双端口ram的读写错误,第三种情况会造成写入数据的错误,第四种情况会造成读出错误。为了避免对双端口ram 造成读写错误,idt70261 有以下几种仲裁控制方法。
1.1 遇忙逻辑控制
当双端口同时对同一地址单元进行控制时,idt70261 提供一种/busy 控制机制。双端口不对同一地址单元进行控制时,两个端口的/busy 引脚都为高,左右两个端口均可正常访问存储空间。当两个端口对同一地址单元进行存取时,一个端口的/busy 引脚为高(允许对存储空间的读写操作),另一个端口的引脚为低(禁止对存储空间的读写操作),哪一个请求信号在前,其端口引脚为高,另一个为低。两个端口请求读写的时间差最小为5ns,当时间小于5ns 时,系统会自动允许一个引脚读写,屏蔽另外一个引脚,防止出现对同一地址单元的读写错误。
1.2 中断控制机制
idt70261 具有中断输出功能,中断工作时,双端口ram 的两个最高地址单元3ffe、3fff 作为“邮箱”来传递相应的命令。当中断功能不使用时,3ffe、3fff两个单元作为正常的存储单元使用。下面介绍中断工作原理。
左端口写地址单元3fff,/intr 变为有效(低电平),向右端口发送中断请求,右端口响应中断请求后,可向3fff 地址单元执行一次读操作,清除中断标志(/intr 变为高电平)。同理,右端口写地址单元3ffe,/intl 变为有效(低电平),向左端口发送中断请求,左端口响应中断请求后,可向3ffe 地址单元执行一次读操作,清除中断标志(/intl 变为高电平)。
1.3 令牌传递原理
idt70261 内部有8 个独立于双端口ram 的逻辑锁存单元,用来标明共享的双端口ram 是否正在使用。在此工作模式下,/sem 用作锁存器的“片选”信号,地址线a2~a0 用来寻址8 个标志锁存器,数据线d0用来标志锁存器的状态。
端口向锁存器写入0 表示申请控制权,写入1 表示放弃使用权。当左端口要使用双端口ram 时,先写入0 到标志锁存器,然后读出标志锁存器的状态,若读出的值为0,则左端口获得该存储单元的使用权;若读出的值为1,表明右端口正在使用该存储单元。
此时,左端口要么循环检测锁存器状态,直到右端口使用结束,要么向锁存器写入1,撤销请求。同理,若右端口使用双端口ram 时,仍按照上述步骤进行操作[1,2]。
2 基于idt70261的接口电路
本系统为视频数据采集处理系统,当摄像头采集后的数据经dsp 压缩编码后输入到双端口ram 芯片中,arm 处理器接收到数据请求后,接收图像数据,对数据进行存储和传输工作,最终将图像经过解码显示在终端pc 机上。
基于idt70261 的接口电路图如图1 所示,此系统采用中断控制机制,双端口ram 的一些功能引脚并不需要全部使用。双端口ram 的左端是arm920t芯片,右端是tms320c6211 dsp 芯片。双端口ram两个独立的数据线d0l-d15l 和d0r-d15r 分别与arm920 芯片和dsp 芯片连接,地址线a0l-a13l 和a0r-a13r 也分别与上述两芯片连接。/ce 为芯片使能引脚,r/w 为读写控制引脚,/oe 为输出使能引脚,/int 为中断标志引脚,/busy 为遇忙控制引脚,其连接电路如图1 所示。
图1 接口电路
3 数据通信的软件实现
本系统采用中断控制方式来实现对双端口ram的读写操作。dsp 主要负责图像数据压缩工作,压缩后的数据传送给双端口ram.传送数据时,dsp 向信令字单元3fff 写入‘55h’,在arm 方产生中断后,arm 读信令字单元3fff,如果是‘55h’,说明数据正在传输,读完数据后,向信令字单元3ffe 写入‘aah’,代表读完数据。dsp 接收到中断后,读信令字单元3ffeh,如果为‘aah’,表示传输数据成功。
arm完成整个系统的实时控制,对双端口ram的图像数据进行读取然后经过网络传递给pc 机,因此需要驱动程序来实现双端口ram与arm之间的数据通信。驱动程序是应用程序与硬件之间的接口,用户可以通过驱动程序来间接的实现对硬件的读写控制操作。双端口ram 的驱动程序主要任务是读双端口ram 数据到用户空间、把用户空间命令写入双端口ram 相应地址以及相应双端口ram 产生的中断。在驱动程序中,最主要的结构便是file_operation,在里面包含了对文件的打开、关闭、读写和其他控制函数,file_operation 结构如下:
在使用设备之前需要对设备进行初始化,包括配置arm 接口寄存器、注册设备、申请中断和分配虚拟地址空间等。配置寄存器和注册申请工作在加载模块时实现,分配资源工作在dualram_open 函数内实现。
配置接口寄存器,at91rm9200 具有一个ebi 接口,可以方便的连接各种存储设备,可以使用ebi 接口中的smc 来控制读写,由cs4 接口来控制双端口ram 的使能信号,通过向相应寄存器内写入控制字来实现arm 对双端口ram 的端口初始化工作。
在初始化函数init_dualram 中,用register_chrdev将双端口ram 注册为一个字符型设备,用request_irq为设备申请相应的中断资源,函数如下:
myirq=request_irq(at91rm_irq1,dualport_inter,sa_interrupt,“dualram”,null)
在装载驱动时进行注册和申请,在卸载模块时必须进行注销,即在dualram_exit 内执行unregister_chrdev 和free_irq 来释放资源。
linux 无法直接访问某一物理地址空间,必须通过虚拟地址空间的映射机制来完成访问。映射工作在dualram_open 函数内完成,因此每次打开设备都会完成此工作。所要用到的地址资源和数据结构定义如下:
#define dualram_base_addr 0x60000000
#define dualram_size ox3fff
u16 *remaddr
通过使用函数remaddr = ioremap (dualram_base_addr ,dualram_size);进行虚拟地址映射,此后就可以使用remaddr 来完成对实际双端口ram 空间的访问了。
为了有效的提高数据传输效率,驱动程序与应用程序之间采用异步通知的机制,这样上层应用程序便可以知道ram 中的数据量是否达到阈值,而不用采用轮询的方式,占用处理器资源。异步通知机制分三步完成,首先需要让内核知道驱动程序与哪个进程通信,当进程使用系统函数fcntl 执行f_setown 命令时,设备文件拥有者(owner)的id 号会被记录在flip-》f_owner 中,此时内核知道了与驱动进行通信的进程,然后应用程序调用fcntl 的f_setfl 命令来激活异步通知机制,这样新数据到达时输入文件便可发送一个sigio 信号到flip-》f_owner 中指定的进程。
图像数据到达后,linux 内的应用程序完成对数据的读写操作,写操作函数为:dualram_write,就是利用copy_from_user 把用户空间的数据写入到双端口ram中,读操作函数:dualram_read,就是利用copy_to_user把双端口ram 中的数据读入到用户空间中[5,7]。
4 测试结果
视频监控系统的测试环境是arm 920t 与tms320c6211 通过网络与pc 互连构成一个简单的局域网。通过网络抓包软件可以统计网络的数据流量,通过ccs 分析工具分析系统的实时性。系统的量化阶距越高,图像的压缩比率越大,所获得的图像质量越差,本系统设置的量化阶距设置为75.经测试本系统的主要参数如下:图像的压缩格式为jpeg,分辨率为bmp(240×160),最大编码速度为15 帧/秒,数据流量为50-200kbps,网络采用udp/ip 协议,网络接口为rj-45 100mbps.
5 结语
本文结合了嵌入式图像数据采集系统的设计,介绍了通过双端口ram 实现arm920t 与 tms320c6211 dsp 之间的通信。利用双端口ram 的强大功能可以实现各种形式的处理器之间的高速数据通信。在信号处理领域和高速数据采集中,利用双端口ram的几种不同仲裁机制,可以完成不同的数据传送要求。用它构成的接口电路具有传送速率高、实时性好、可靠性高、电路简单等优点。
先进封装技术如何助力实现工业4.0?
区块链随机数的安全性阐述
RS485通讯线制作、连接操作说明
频率测量与频谱分析-搜索式超外差雷达测频系统原理
常见的电子元器件封装有哪些?
双端口RAM实现ARM与DSP高速数据通信设计
光中继器的作用_光中继器有哪些类型
Marvell ARMADA 1500智能电视平台荣获中国电子成就奖
微软 Win10X 将支持现代待机,即时开启、始终连接
迪士尼苹果挑起价格战 苹果给JDI 2亿开启转型OLED
大棚杀虫灯的介绍,它有什么作用
高德红外三个募投项目结项 节余3.6亿元永久补充流动资金!
对于vivo X23的超大广角相机,你有心动吗?
OPPO携多项无障碍技术亮相中国计算机学会技术公益大会
智慧校园建设方案之智能化用电管理系统的应用
6种让开发物联网解决方案更有效的方法
巡检机器人主要由哪三大控制系统组成
走向人机共融的未来
首个Rust版sudo发布!
MEMS传感器又一个“万亿市场”:汽车市场