- 主机X86,插上PCI卡,主机侧驱动和板侧驱动是自己写的;
- 卡侧DMA将数据从主机侧一块物理地址搬移到卡侧一块物理地址,物理地址都是使用dma_alloc_coherent() 接口分配的连续的一致性地址;
- 同样的程序,在两台不同的主机上进行跑,一台是正常的通信,一台是有问题的,数据表现为有的是正确的,有的是没写进去,好像跟CPU缓存有关系,但是内核接口的 关cache 操作已经能调的都调了。
- 不知道这是主板问题还是其他问题,求解答。
PCI设备DMA访问,缓存不一致情况
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 老皮芽子 2021-11-10 17:28关注
这是一个 Cache 一致性问题
CPU 为了加速访问 DDR ,一般都是启用 Cache,通常 Cache 与 DDR 的数据是一致的,但是在一些 DMA 操作 DDR 时,DDR 数据变了 Cache 没变。也有 Cache 变化后 DDR 没有跟着变化,就使 Cache 与 DDR 不一致。
消极的办法是禁止用 Cache 。
也可以通过函数将 "Cache 内容刷新至DDR" 或 "将DDR内容拉进 Cache".使 Cache 与 DDR 保持一致
xil_DCacheInvalidateRange //Cache 内容刷新至DDR
xil_DCaheFlushRange //将DDR内容拉进 Cache
这俩函数是 xilinx fpga cpu 中的,别的cpu也会有类似的函数。解决 无用评论 打赏 举报
悬赏问题
- ¥15 stm32流水灯+呼吸灯+外部中断按键
- ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
- ¥15 NX MCD仿真与博途通讯不了啥情况
- ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
- ¥15 gradio的web端页面格式不对的问题
- ¥15 求大家看看Nonce如何配置
- ¥15 Matlab怎么求解含参的二重积分?
- ¥15 苹果手机突然连不上wifi了?
- ¥15 cgictest.cgi文件无法访问
- ¥20 删除和修改功能无法调用