mythares

mythares

1个粉丝

4

问答

0

专栏

1

资料

mythares  发布于  2017-07-14 20:57:07
采纳率 0%
4个问答
4404

3536 i2c dma 性能

 
在项目中需要通过i2c传输较多的数据,发现海思默认驱动不带i2c功能,在i2c-hisilicon.c中发现有导出的hi_i2c_dma_write/read.
然后将该方法接入i2c-dev.c的i2c设备fops的read/write操作中通过判断条件来决定走dma操作还是普通操作。

现有问题是通过dma方式每次写入32bits 数据循环写入时会在写入两次之后产生dma超时。:'(
如果在循环中使用usleep()产生任意延迟则不会产生dma超时,但是这样每次睡眠唤醒影响到了传输速率的问题。

请问各位大佬有没有什么好点的i2c传输解决方案?速率能达到什么情况??:hug:
我来回答
回答1个
时间排序
认可量排序

mythares

1个粉丝

4

问答

0

专栏

1

资料

mythares 2017-07-15 12:54:27
认可0
研究发现 在i2c驱动进行hi_i2c_dma_write/read操作之后加入内核延迟 udelay(100) 可解决超时问题,尝试使用udelay(50)仍然会产生dma超时

这样以来传输速率(write)在 32bit x 1000 / 0.457s =  8.5KB/s 左右 是比 i2c默认低速模式100kHz 的传输上限低一些

但是换成传输数据块大小为 16Bytes (128bits) 传输250次 则测试传输时间为 0.11s左右 等效速率  16Bytes x 250 / 0.11s = 35.5 KB/s 这样的话超出了i2c 时钟 100kHz的传输能力上限?有大佬知道这是怎么回事么??i2c在dma传输模式会自动调整时钟么频率吗(自动变成400kHz的?)?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区