天嵌 ARM开发社区

 找回密码
 注册
查看: 3683|回复: 9

最新关于spi调试,求高手指点!

[复制链接]
xuhe1206 发表于 2013-12-9 21:07:24 | 显示全部楼层 |阅读模式
概况:fpga采集数据,arm与fpga采用spi通信,从fpga中读取数据,采样率为320k/s,ad为16位精度,也就意味着spi的通信速率最起码达到320k*16bit/s=5.12Mb/s
关于spi部分,我是直接用的spidev的驱动,相应应用程序用的kernel/documentation/spi/spidev_test.c,
设置通信速率为10M。

接下来上问题,从如下两个图形中可以看出,对于1bit数据来讲,耗时约为150ns,折算为1s钟的量,约为7.5Mbit,如果达到这个等级,按说也是满足要求的。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| xuhe1206 发表于 2013-12-9 21:09:30 | 显示全部楼层
但接下来事儿麻烦了,两个相邻的16bit之间,要delay约为1us

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| xuhe1206 发表于 2013-12-9 21:10:42 | 显示全部楼层
由下图我们可以看出,一次性发了20个数据的话,耗时超过了70us。计算一下,的确如此,150ns*16bit*20+19*1us=67us,再加上cs信号跳变时间,肯定要超过70us。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| xuhe1206 发表于 2013-12-9 21:11:30 | 显示全部楼层
如果只是这样,也能勉强通过,但更严峻的在后面呢,由下图我们可以看出,在相邻两个20*16bit数据之间,居然要间隔100us,怪不得,从电脑上的com口得到的数据,刷新好慢!严重不符合要求啊!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| xuhe1206 发表于 2013-12-9 21:15:03 | 显示全部楼层
在spi_test.c里面,我用的是

while(1){
    transfer(fd);
}

也就是不间断的调用了transfer函数,但从实际效果看,一个while循环结束后,最起码是等待了100us之后才进行下一次调用。
这应该就是因为系统任务调用的时间分配问题吧?

那我该怎么做才能实现我的目的呢?
如何让transfer这个函数按照我的预定时间间隔来调用呢?
需要用到中断么?
lrx666 发表于 2013-12-10 08:55:24 | 显示全部楼层
考虑am3358设置成从设备呢?缓冲满了通知cpu读取,以前在M3上这样实现过
 楼主| xuhe1206 发表于 2013-12-10 21:05:06 | 显示全部楼层
lrx666 发表于 2013-12-10 08:55
考虑am3358设置成从设备呢?缓冲满了通知cpu读取,以前在M3上这样实现过

本来是这样设计的
但是spidev的这个驱动,貌似必须要作为主机才行
因为不想自己写spi驱动,所以只能先这么用

不过或许可以考虑下自己写spi驱动
cain 发表于 2013-12-27 15:48:32 | 显示全部楼层
请问你用的是spi0 还是spi1 ?
 楼主| xuhe1206 发表于 2014-1-8 21:46:52 | 显示全部楼层
cain 发表于 2013-12-27 15:48
请问你用的是spi0 还是spi1 ?

我用的是spi1,也就是你设置的spidev2.0
cain 发表于 2014-1-20 16:43:59 | 显示全部楼层
xuhe1206 发表于 2014-1-8 21:46
我用的是spi1,也就是你设置的spidev2.0

你的代码可能发给我瞧瞧,我比较下看看
我邮箱是939578974@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-3-29 18:14 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表