作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我遇到了一个与 PCIe 相关的问题。我用驱动把0x12345678
写入BAR0+offset,用Xilinx Chipscope看波形。在我们的 Intel Rangeley 主板上,我们看到 TLP 有效载荷被分成两个 DW,即 00_00_00_78 56_34_12_00
,而在戴尔 PC 上,我们在有效载荷中只看到一个 DW。我确定这两种情况都符合 PCIe 规范。
但我很奇怪,为什么PCIe规范要有这种设计,即TLP头的2nd DW中的“Last DW BE”和“First DW BE”?
最佳答案
您的问题涉及内存请求 PCI 传输,对于您的问题,可以将其缩减为 4 个参数:地址、长度、第一个双字字节启用和最后一个双字字节启用。
地址和长度是双字对齐的,即 PCI 规范的 address[1:0] = 0
。那么如果你想写一个字节会发生什么?还是在非双字对齐地址(例如 0x3567)?您被迫至少写入 1 个双字,但您不想删除相邻的字节。这就是第一个 DW BE 发挥作用的地方。例如,要将 1 个字节写入地址 0x3567,您将:
同样,当您的传输未在双字边界结束时,最后一个 DW BE 开始发挥作用。例如,如果要在地址 6 处写入 27 个字节:
关于linux - 为什么 PCIe TLP header 有 "Last DW BE"和 "First DW BE"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065749/
我是一名优秀的程序员,十分优秀!