社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 877|回复: 6

[ARM开发] 有关片上内存和DMA

[复制链接]

47

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-8-4 17:42:19 | 显示全部楼层 |阅读模式
如果不考虑热启动的话,0xffff0000处的64KB内存能否用来DMA存数据。如果用的话,有什么需要注意的么?linux系统下用mmap操作好么?
谢谢。
此帖出自Altera SoC论坛


回复

使用道具 举报

6559

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

爱原创

发表于 2017-8-4 18:58:42 | 显示全部楼层
linux系统下你直接操作绝对地址吗?

点评

嗯,已经避免使用片上内存了 DMA的问题也差不多了 感谢回复的2位网友  详情 回复 发表于 2017-11-10 11:29
没有SMMU,DMA能用虚拟地址操作吗?必须只能物理地址啊,你就算申请到内存拿到虚拟地址了,也得转成物理地址给DMA控制  详情 回复 发表于 2017-8-12 21:31
ioremap或mmap我知道 请问2个固定的物理地址之间DMA数据传输用什么方法比较好? 我想把将768M后的DDR物理内存留下不让linux系统用,作为fpga写数据的缓冲区,因为fpga写间隔比较小,只有二十几微秒,希望能把数据通过  详情 回复 发表于 2017-8-6 17:27
training


回复

使用道具 举报

47

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-8-6 17:27:03 | 显示全部楼层
白丁 发表于 2017-8-4 18:58
linux系统下你直接操作绝对地址吗?

ioremap或mmap我知道

请问2个固定的物理地址之间DMA数据传输用什么方法比较好?
我想把将768M后的DDR物理内存留下不让linux系统用,作为fpga写数据的缓冲区,因为fpga写间隔比较小,只有二十几微秒,希望能把数据通过网络再传走。可是现在每秒fpga写入总时间大约0.688s,留给linux单独占用768M后DDR内存时间比较少。我想通过DMA把数据搬移到0xffff0000的片上内存,用网络发走,避免读写冲突。

不知道是否可行。还是我直接研究pl330的驱动去,自己实现这个功能?
谢谢


回复

使用道具 举报

1035

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2017-8-12 21:31:37 | 显示全部楼层
白丁 发表于 2017-8-4 18:58
linux系统下你直接操作绝对地址吗?

没有SMMU,DMA能用虚拟地址操作吗?必须只能物理地址啊,你就算申请到内存拿到虚拟地址了,也得转成物理地址给DMA控制

点评

嗯,已经避免使用片上内存了 DMA的问题也差不多了 感谢回复的2位网友  详情 回复 发表于 2017-11-10 11:29
其实我的情况是这样的 fpga每秒写数据到arm内存0x30000000物理地址,长度16M。再写另一部份数据到0x3C000000物理地址,长度大约也是16M。linux把物理地址通过mmap转换为虚拟地址,通过乒乓方式发送tcp包。 但现在  详情 回复 发表于 2017-8-14 15:26


回复

使用道具 举报

47

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-8-14 15:26:20 | 显示全部楼层
lelee007 发表于 2017-8-12 21:31
没有SMMU,DMA能用虚拟地址操作吗?必须只能物理地址啊,你就算申请到内存拿到虚拟地址了,也得转成物理 ...

其实我的情况是这样的
fpga每秒写数据到arm内存0x30000000物理地址,长度16M。再写另一部份数据到0x3C000000物理地址,长度大约也是16M。linux把物理地址通过mmap转换为虚拟地址,通过乒乓方式发送tcp包。
但现在发现每秒的fpga不是连续全速写入数据,而是间隔20多微秒写1000多字节。造成linux独占时间不够。
所以我想用片上内存转送,每次fpga写满64KB就用DMA,避免网络读和fpga写有内存冲突。
但是发现0x30000000转为虚拟地址,再从虚拟地址转总线地址后,总线地址只是虚拟地址的一个偏移。
总线地址不是应该和物理地址有关么?好奇怪。
而且不知道0xffff0000的片上内存的总线地址是多少?它的IOMEM对DMA有什么影响么?

我问mmap和ioremap,因为我收到的数据和发送都是在固定的物理地址,我想知道能否跳过将0x30000000转换虚拟地址这一步,提高速度。

谢谢


回复

使用道具 举报

47

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-11-10 11:29:43 | 显示全部楼层
白丁 发表于 2017-8-4 18:58
linux系统下你直接操作绝对地址吗?

嗯,已经避免使用片上内存了
DMA的问题也差不多了
感谢回复的2位网友


回复

使用道具 举报

47

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-11-10 11:29:55 | 显示全部楼层
lelee007 发表于 2017-8-12 21:31
没有SMMU,DMA能用虚拟地址操作吗?必须只能物理地址啊,你就算申请到内存拿到虚拟地址了,也得转成物理 ...

嗯,已经避免使用片上内存了
DMA的问题也差不多了
感谢回复的2位网友


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-12-18 22:29 , Processed in 2.138207 second(s), 16 queries , Redis On.

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