6.Linux下的PCI-4.PCIE下数据传输-《计算机知识》

admin 2025-11-02 22:22:56 系统网络 来源:ZONE.CI 全球网 0 阅读模式
  • PCI的DMA操作
    • RC从EP端读取数据
      • SAR和DST
      • Max_Payload_Size
      • Linked List

    image.png

    PCI的DMA操作

    参考:PCIe实践之路:DMA机制PCI设备的DMA写用Posted方式,读使用NON-Posted方式。

    RC从EP端读取数据

    假设现在RC要从EP mem space读1MB数据,可以有这么两种方式:

    • RC发起DMA读;
    • EP发起DMA写。

    这两种方式结果是等效的,对最后完成中断的方式会不一样,前者通过local interrupt表示自己DMA读完了,后者需要EP发送一笔IMWr来表示DMA读完成了。

    image.png

    SAR和DST

    SAR:DMA传输的数据源地址, 这里是从EP 读,所以是EP中某个BAR range内地址。DST: DMA的目标地址, 这里从EP读数据到DDR,所以是DDR中某个地址。

    Max_Payload_Size

    DMA读写本质上还是通过拆分成TLP来进行的,每次传输的size就是通过tlp header中的length来确定的,而length由控制器的Max_Payload_Size决定,这个值取EP和RC的capability中相应参数的最小值.

    Linked List

    EP往RC写:*DMA写操作流程* Reg Address RegData0x1000_7010 0x0000_0001 ;// DMA Write Engine Enable0x1000_7028 0x0000_0000 ;// DMA Write Interrupt Mask 0x1000_7058 0x0400_0008 ;// DMA Write Channel Control 1 register/ 传输长度 /0x1000_7060 0x0000_0400 ;// DMA Write Transfer Size ????-bytes/ 双方地址 /0x1000_7064 0x????_0000 ;// DMA Write SAR Low (Local(EP) Memory Address)[高位需要与地址是0x1000_0010的值保持一致][31]需要是10x1000_7068 0x???????? ;// DMA Write SAR High(Local(EP) Memory Address)[全部需要与地址是0x10000014的值保持一致]0x1000_706c 0x???????? ;// DMA Write DAR Low (Remote(PC) Memory Address) 0x10007070 0x???????? ;// DMA Write DAR High(Remote(PC) Memory Address) / 开始传输 /0x1000_7014 0x0000_0000 ;// DMA Write Doorbell 读0x1000_7024判断第0位是否为1,若为1则表示传输完成,写0x1000_702c 0x0000_0001 ;// DMA Write Interrupt Clear0x1000_7010 0x0000_0000 ;// DMA Write Engine Disable

    *DMA读操作流程*

    Reg Address Reg_Data0x1000_7080 0x0000_0001 ;// DMA Read Engine Enable0x1000_7098 0x0000_0000 ;// DMA Read Interrupt Mask 0x1000_70cc 0x0400_0008 ;// DMA Read Channel Control 1 register

    / 传输长度 /0x1000_70d4 0x0000_0400 ;// DMA Read Transfer Size ????-bytes

    / 双方地址 /0x100070d8 0x???????? ;// DMA Read SAR Low (Remote(PC) Memory Address)0x100070dc 0x???????? ;// DMA Read SAR High (Remote(PC) Memory Address)0x100070e0 0x????_0000 ;// DMA Read DAR Low (Local(EP) Memory Address)[高位需要与地址是0x1000_0010的值保持一致][31]需要是1 0x1000_70e4 0x???????? ;// DMA Read DAR High(Local(EP) Memory Address)[全部需要与地址是0x1000_0014的值保持一致] / 开始传输 /0x1000_7084 0x0000_0000 ;// DMA Read Doorbell

    读0x1000_7094判断第0位是否为1,若为1则表示传输完成,

    写0x1000_709c 0x0000_0001 ;// DMA Read Interrupt Clear0x1000_7080 0x0000_0000 ;// DMA Read Engine Disable

    sscom51 - 副本.ini

    01-shell脚本介绍-《shell脚本》 系统网络

    01-shell脚本介绍-《shell脚本》

    一、shell脚本是什么二、为什么要学shell,而不是其他计算机语言三、学习这门课程的优势四、学了能干什么五、学习什么内容六、学习的技巧七、成长路径八、学习环
    评论:0   参与:  18