以Freescale公司的i.MX6Q四核处理器及ALTERA EP3C40F324 FPGA为核心的嵌入式硬件平台,介绍i.MX6Q与FPGA基于EIM总线通信接口设计,基于Linux 3.14.28内核开发此接口的驱动程序方法以及基于Linux下从应用到驱动程序的通信实现.该技术已应用到某终端设备研制,实现FPGA芯片与Linux系统的连接,实际测试其与Android应用程序可靠通信,对同类型嵌入式平台的驱动接口设计及开发有借鉴意义.
External Interface Module(EIM)接口是飞思卡尔公司的MCIMX系列芯片的重要接口,是一种并行数据总线接口,主要用于同外设芯片或外部存储器进行数据传输,能异步访问带SRAM接口的器件或者同步访问带NOR Flash或PSRAM接口的器件.介绍了通过EIM接口实现CPU处理器与外设FPGA异步通信的硬件平台和EIM接口的实现原理.论述了Linux操作系统上EIM接口驱动的实现,描述了驱动的示意代码,并通过SignalTapⅡLogic Analyzer进行数据采集和显示屏显示,共同验证EIM接口能够高效地完成数据传输.通过EIM接口对FPGA固定寄存器进行写读操作,写入寄存器的值能够正确无误的读回来,对OLED显示屏进行初始化,大量数据能够正确传输,EIM接口功能完善,传输效率高,能够应用于多种场合.
开发环境Ubuntu14.04
运行环境:IMX6Q
Linux内核版本:3.14.28
总线接口:地址线A0~25 数据线D0~15(复用地址线低16位)
调试完成。
初始化参数代码如下:
/* EIM初始化 */
int uio_eim_async_multiplexed_16bit(struct uio_info *info)
{
unsigned int regs[EIM_REG_NUMS];
uio_read(info, regs, EIM_REG_NUMS);
/**
* PSZ=0 WP=0 GBC=1 AUS=0 CSREC=0 SP=0 DSZ=001
* BCS=0 BCD=0 WC=1 BL=0 CREP=0 CRE=0 RFL=0 WFL=0 MUM=1 SRD=0 SWR=0 CSEN=1
*
*/
#ifndef BIT_32
regs[CS0GCR1] = 0x1010089; /*16 bit port resides on DATA[15:0] 多路复用模式 使能cs0*/
#else
regs[CS0GCR1] = 0x1030089;
#endif
/**
* MUX16_BYP_GRANT=0 DAP=0 DA=0 DAPS=0 ADH=1
*/
regs[CS0GCR2] = 0x00000001;
/**
* RWSC=c
* RADVA RAL RADVN
* OEA OEN RCSA RCSN
*/
regs[CS0RCR1] = 0xC000000;
/**
* APR PAT RL RBEA RBE RBEN
*/
regs[CS0RCR2] = 0x0;
/**
* WAL WBED WWSC=A WADVA WADVN WBEA
* WBEA WBEN WEA WEN WCSA=0 WCSN
*/
regs[CS0WCR1] = 0xA000000;
#ifndef BIT_32
regs[CS1GCR1] = 0x1010089;
#else
regs[CS1GCR1] = 0x1010089;
#endif
regs[CS1GCR2] = 0x00000001;
regs[CS1RCR1] = 0xC000000;
regs[CS1RCR2] = 0x0;
regs[CS1WCR1] = 0xA000000;
uio_write(info, regs, EIM_REG_NUMS);
return 0;
}