Part Number:AM2434
在使用PCIE输出16K数据遇到下面的问题,请帮忙察看是否是这样配置,配置是否有问题,请帮忙解答下,谢谢!!
EP需要有两段BAR地址:
iomap_post : 0x00000~0x01000 (4K)
iomap_Buffer: 0x04000~0x07000 (12K)
因此,应该有两组Inboun/OutBound。其中一组设置为8K时,能收到8K数据。但是设置为16K时,不能收到8K以上的数据。
(1)8K syscfg配置:
1. RC配置
2.EP配置
EP调试界面可以看到:数组在IOmao_BufferRecv[2047]之后就收不到数据。
能收到数据大小=2048 * 4 = 8192 Byte
(2)16K syscfg配置:
1. RC配置
1. EP配置
EP调试界面可以看到:数组在IOmao_BufferRecv[319]之后就收不到数据。
能收到数据大小= 320* 4 = 1280 Byte
Gary Lu:
看样子像是涉及到PCIe传输和内存映射,确保以下PCIe设备的BAR地址设置正确,以便正确映射到系统内存
,
li YI:
需要怎么设置呢?能给个参考嘛?因为配置用syscfg。只是增加了一个通道,根据映射的范围对于inbound 更改BAR aperture, lower base address , upper base addresses, region window size.对于outbound更改了lower Target Addresse, upper Base Target ,Region window Size其他地方都没有更改。
可以提供一个EP需要有两段BAR地址:
iomap_post : 0x00000~0x01000 (4K)
iomap_Buffer: 0x04000~0x07000 (12K)
的配置方法嘛?最好提供一个demo
,
Gary Lu:
下面是我写的一个简单的示例,展示了如何使用syscfg来配置EP
#include <stdio.h> #include <syscfg.h>int main() { // 配置inbound通道 syscfg_set_inbound_bar_aperture(1, 0x00000, 0x07000); // 设置BAR aperture范围 syscfg_set_inbound_lower_base_address(1, 0x00000); // 设置lower base address syscfg_set_inbound_upper_base_address(1, 0x07000); // 设置upper base address syscfg_set_inbound_region_window_size(1, 12); // 设置region window size// 配置outbound通道 syscfg_set_outbound_lower_target_address(1, 0x04000); // 设置lower target address syscfg_set_outbound_upper_target_address(1, 0x07000); // 设置upper target address syscfg_set_outbound_region_window_size(1, 12); // 设置region window size// 打印配置结果 printf("EP配置完成:\n"); printf("iomap_post : 0x00000~0x01000 (4K)\n"); printf("iomap_Buffer: 0x04000~0x07000 (12K)\n");return 0; }
,
li YI:
SDK不存在这些函数,使用的SDK库是mcu_plus_sdk_am243x_09_00_00_35。而且syscfg_set_inbound_upper_base_address不应该是再64bit地址时才设置的嘛?
,
Gary Lu:
您好,这只是我写的一个示例参考