小编Cpu*_*u86的帖子

DMA PCIe从PC到FPGA的读传输

我正在尝试在FPGA和x86_64 Linux机器之间进行DMA传输.

在PC端我正在做这个初始化:

//driver probe
... 
pci_set_master(dev); //set endpoint as master
result = pci_set_dma_mask(dev, 0xffffffffffffffff); //set as 64bit capable
...

//read
pagePointer = __get_free_page(__GFP_HIGHMEM); //get 1 page
temp_addr = dma_map_page(&myPCIDev->dev,pagePointer,0,PAGE_SIZE,DMA_TO_DEVICE);
printk(KERN_WARNING "[%s]Page address: 0x%lx Bus address: 0x%lx\n",DEVICE_NAME,pagePointer,temp_addr);
writeq(cpu_to_be64(temp_addr),bar0Addr); //send address to FPGA
wmb();
writeq(cpu_to_be64(1),bar1Addr); //start trasnfer
wmb();
Run Code Online (Sandbox Code Playgroud)

总线地址是64位地址.在FPGA端,我发送的TLP读取1 DW:

Fmt: "001"
Type: "00000"
R|TC|R|Attr|R|TH : "00000000"
TD|EP|Attr|AT : "000000"
Length : "0000000001"
Requester ID
Tag : "00000000"
Byte Enable : "00001111";
Address : (address from dma map page)
Run Code Online (Sandbox Code Playgroud)

我从PC上回来的完成是:

Fmt: …
Run Code Online (Sandbox Code Playgroud)

fpga dma pci-e

6
推荐指数
1
解决办法
1336
查看次数

标签 统计

dma ×1

fpga ×1

pci-e ×1