7705|4

34

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

linux下spi读写的时间开销问题。求助!!! [复制链接]

板子跑的linux,我在调spi的时候遇到一个问题就是读写外设的寄存器的时间开销太大。
static void
transfer (int fd)
{
  int ret;
  uint8_t tx[] = {
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0x40, 0x00, 0x00, 0x00, 0x00, 0x95,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD,
    0xF0, 0x0D,
  };
  uint8_t rx[ARRAY_SIZE (tx)] = { 0, };
  struct spi_ioc_transfer tr = {
    .tx_buf = (unsigned long) tx,
    .rx_buf = (unsigned long) rx,
    .len = ARRAY_SIZE (tx),
    .delay_usecs = delay,
    .speed_hz = speed,
    .bits_per_word = bits,
  };

  ret = ioctl (fd, SPI_IOC_MESSAGE (1), &tr);


上面是spi_write函数的大概内容,其中ioctrl的时间开销就很大,读一次spi(一个字节)需要大约50us的时间(spi配置为3Mbps)。

是有点长,有什么方法可以提高spi读写的效率?

谢谢!
此帖出自Linux开发论坛

最新回复

留QQ,周一上班交流  详情 回复 发表于 2012-12-8 07:32
点赞 关注

回复
举报

202

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

我也发现太慢

等了44us才从SPI输出时钟,应用层到内核层要判断数据合理性,要拷贝,我后来直接用mmap映射SPI物理地址后,在应用层写寄存器(不符合LINUX推荐办法),延时很短,1us延时,当然数据多时,你连贯发也会因为系统时间片切换而被暂停,比如我试验发送64KBYTES,我用30M时钟,计算大约21ms发完,实际是三个包,每个包最长10ms,包中间隔了10ms被系统切走(忙的话还要更多),所以实际50ms左右传完64KBYTES

[ 本帖最后由 mr.king 于 2012-12-7 19:57 编辑 ]
此帖出自Linux开发论坛
 
 

回复

34

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
你好,你用的哪种方式读的spi,能不能贴一部分代码?
此帖出自Linux开发论坛

点评

留QQ,周一上班交流  详情 回复 发表于 2012-12-8 07:32
 
 
 

回复

202

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 板凳 agoodog 的帖子

留QQ,周一上班交流
此帖出自Linux开发论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(高级)

5
 
你用的什么驱动?我用的内核自带的spi驱动。你qq多少?
此帖出自Linux开发论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表