打印
[i.MX]

求教:i.mx6+FPGA架构用什么通信方式比较好?并行总线?SPI?

[复制链接]
2094|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzzno1|  楼主 | 2016-5-23 23:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lzzno1 于 2016-5-23 23:01 编辑

      最近一个项目需要ARM+FPGA架构,所以买了周立功的m6708核心板,i.mx6处理器,简单双核,linux3.0.15系统。自己画的板子,板子上有一块FPGA。用arm核心板上的25个GPIO,作为并行总线与FPGA通信,14为地址总线。8为数据总线,读写使能,还有一个备用管脚。
      当时参照了以前的而一个LPC2478+FPGA的板子,那个板卡用的就是GPIO做并行总线,但没有操作系统,直接操作到管脚上就行。现在的麻烦是,不是很了解linux操作系统,这个把GPIO作为和FPGA通信的并行总线来用的驱动总也调不好。我用的是sysfs提供的GPIO操作就是sys/class/gpio,就是先导出到用户空间export(),再设置direction,然后读写value。这个并行总线的操作用这种方式是不是不合适呢?下图是程序中,对两个gpio的写操作,我向GPIO175之后写了置0之后下一行代码就是将GPIO05也置0,可示波器触发方式截图可以看到,两个信号置零操作的时间差在2us左右。用FPGA的signaltap得到的也是这样。这样一想,如果我按照这种方式要操作到八位的数据总线上,如将2进制数00010010写到数据总线上,那么有可能D0=0后延迟了14us代表数据位D7的GPIO才能置0,并行数据总线的信号位间同步会出问题。这样情况下除非把通信速率降的很慢,否则行不通的。求教论坛的大大们有没有什么建议。

相关帖子

沙发
killer2014| | 2016-5-24 08:42 | 只看该作者
推荐用PCIE接口,简单。

使用特权

评论回复
板凳
lzzno1|  楼主 | 2016-5-24 15:51 | 只看该作者
killer2014 发表于 2016-5-24 08:42
推荐用PCIE接口,简单。

这套核心版的PCIE接口不是很稳定。在用户空间调用GPIO效率应该比较低,如果在内核直接写驱动会不会好点。还有一路SPI备用,只不过没有现成驱动,需要自己修改,我该在哪里修改?刚接触linux,所以比较懵逼。球大神带。

使用特权

评论回复
地板
killer2014| | 2016-5-25 10:31 | 只看该作者
SPI 基本上还行, 只是速度不够, 关键看你用在什么上面

使用特权

评论回复
5
lzzno1|  楼主 | 2016-5-25 11:02 | 只看该作者
killer2014 发表于 2016-5-25 10:31
SPI 基本上还行, 只是速度不够, 关键看你用在什么上面

我们应用数据量不大,速率要求也不是很高。几Mb即可。SPI应该没问题的,我以前用FPGA做过。只不过这次涉及了linux就比较懵了。有操作系统, 驱动怎么写,改哪里就不是很清楚了。

使用特权

评论回复
6
killer2014| | 2016-5-25 14:39 | 只看该作者
如果是在操作系统下, 那就不是很容易修改了, 这涉及到内核态驱动, 如果你没搞过, 你可能会比较头痛。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lzzno1 + 1 赞一个!
7
acan375| | 2016-5-26 17:27 | 只看该作者
并行总线可以考虑用EIM总线,最近我也在做类似的项目。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lzzno1 + 1 赞一个!
8
lzzno1|  楼主 | 2016-6-8 15:32 | 只看该作者
acan375 发表于 2016-5-26 17:27
并行总线可以考虑用EIM总线,最近我也在做类似的项目。

NXP的叫EIM,TI的arm上叫GPMC,三星系列的貌似叫EMC,应该是一种东西,但是这个到底是什么总线?不是很懂。。。所以当时就没敢用。

使用特权

评论回复
9
rayin| | 2016-6-8 16:30 | 只看该作者
如果只是简单的一些数据交互,可以用SPI,写应用程序简单,FPGA里面也好处理。
如果数据量要求比较大,又不想开发Linux驱动,可以用USB接口,在FPGA里面实现一个USB Device,外接ULPI PHY的话实现起来很容易,占用逻辑也少。
当然如果FPGA带serdes的话就是PCIE了。

使用特权

评论回复
10
acan375| | 2016-6-12 10:00 | 只看该作者
lzzno1 发表于 2016-6-8 15:32
NXP的叫EIM,TI的arm上叫GPMC,三星系列的貌似叫EMC,应该是一种东西,但是这个到底是什么总线?不是很懂 ...

通俗的说就是“通用外部存储器总线”,该总线上可以外挂存储设备,如NOR,NAND FLASH,SRAM等等,把FPGA当成ARM的一个外部存储器。

使用特权

评论回复
11
zjf199007| | 2016-7-1 22:31 | 只看该作者
推荐使用EIM,速度很快,。。

使用特权

评论回复
12
lzzno1|  楼主 | 2016-7-6 22:22 | 只看该作者
zjf199007 发表于 2016-7-1 22:31
推荐使用EIM,速度很快,。。

在网上找相应的资料一直没找到,有没有比较好的博文或资料讲这个的,能不能给个链接,十分感谢!

使用特权

评论回复
13
lixuhui112| | 2016-7-20 08:36 | 只看该作者
我也在搞这个,呢,还不知道怎么入手呢,spi 总线 与fpga  要写内核驱动以及修改设备树什么的。。。。迷茫

使用特权

评论回复
14
zjf199007| | 2016-7-21 23:44 | 只看该作者
lzzno1 发表于 2016-7-6 22:22
在网上找相应的资料一直没找到,有没有比较好的博文或资料讲这个的,能不能给个链接,十分感谢! ...

Linux内核中有初始化的代码可以参考一下在board。c中好像。

使用特权

评论回复
15
imlyi| | 2016-7-22 14:09 | 只看该作者
用eim吧。传说配置好dts直接就能用了。具体的去http
s://
community
.nxp
.com
/welcome
论坛里面找找。这个地方小问题还好说,深入点的技术问题很难碰到有人给你说的。

使用特权

评论回复
16
lzzno1|  楼主 | 2016-8-25 21:42 | 只看该作者
lixuhui112 发表于 2016-7-20 08:36
我也在搞这个,呢,还不知道怎么入手呢,spi 总线 与fpga  要写内核驱动以及修改设备树什么的。。。。迷茫 ...

嗯嗯,这部分缺失对新手有点难,如果你的linux没有驱动需要重新编译内核,记得好像是在描述板卡信息的.c文件里添加spi设备的信息,然后再用menuconfig里添加SPI的驱动,重新编译内核,再烧录,之后才可以在linux里调用SPI设备。FPGA这一侧还要写个SPI从设备的模块,这个网上挺多的,稍微好做一点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝